[asterisk-bugs] [Asterisk 0013416]: Function CUT doesn't work if passed as parameter to macro in AEL

Asterisk Bug Tracker noreply at bugs.digium.com
Thu Sep 4 18:06:00 CDT 2008


A NOTE has been added to this issue. 
====================================================================== 
http://bugs.digium.com/view.php?id=13416 
====================================================================== 
Reported By:                yarns
Assigned To:                murf
====================================================================== 
Project:                    Asterisk
Issue ID:                   13416
Category:                   PBX/pbx_ael
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     assigned
Asterisk Version:           1.4.19 
SVN Branch (only for SVN checkouts, not tarball releases): N/A 
SVN Revision (number only!):  
Disclaimer on File?:        N/A 
Request Review:              
====================================================================== 
Date Submitted:             2008-09-03 14:08 CDT
Last Modified:              2008-09-04 18:05 CDT
====================================================================== 
Summary:                    Function CUT doesn't work if passed as parameter to
macro in AEL
Description: 
Function CUT do not worik if passed as parameter to macro

Sample macro:

macro test (abc,cba)
{
  NoOp(${cba});
};

Calling macro:
&gsmSelect("testing",${CUT(EXTEN,,3)});

Output from console:
[Sep  3 20:58:42] ERROR[6251]: func_cut.c:263 acf_cut_exec: Syntax:
CUT(<varname>,<char-delim>,<range-spec>) - missing argument!
    -- Executing [8-0-693697987 at outgoing:4]
Macro("SIP/192.168.1.215-c4121d60", "test|"testing"|") in new stack

======================================================================
Relationships       ID      Summary
----------------------------------------------------------------------
related to          0013357 AEL doesn't like using dialplan functio...
====================================================================== 

---------------------------------------------------------------------- 
 (0092093) svnbot (reporter) - 2008-09-04 18:05
 http://bugs.digium.com/view.php?id=13416#c92093 
---------------------------------------------------------------------- 
Repository: asterisk
Revision: 141094

A   branches/1.4/pbx/ael/ael-test/ael-vtest25/
A   branches/1.4/pbx/ael/ael-test/ael-vtest25/extensions.ael
U   branches/1.4/pbx/ael/ael-test/ref.ael-test6
A   branches/1.4/pbx/ael/ael-test/ref.ael-vtest25
U   branches/1.4/pbx/ael/ael.flex
U   branches/1.4/pbx/ael/ael_lex.c

------------------------------------------------------------------------
r141094 | murf | 2008-09-04 18:05:50 -0500 (Thu, 04 Sep 2008) | 70 lines

(closes issue http://bugs.digium.com/view.php?id=13357)
Reported by: pj
Tested by: murf

(closes issue http://bugs.digium.com/view.php?id=13416)
Reported by: yarns
Tested by: murf

If you find this message overly verbose, relax, it's probably
not meant for you. This message is meant for probably only
two people in the whole world: me, or the poor schnook that
has to maintain this code because I'm either dead or unavailable
at the moment.

This fix solves two reports, both having to do with embedding
a function call in a ${} construct. It was tricky because the
funccall syntax has parenthesis () in it. And up till now,
the 'word' token in the flex stuff didn't allow that, because
it would tend to steal the LP and RP tokens. To be truthful,
the "word" token was the trickiest, most unstable thing in
the whole lexer. I was lucky it made this long without complaints.
I had to choose every character in the pattern with extreme
care, and I knew that someday I'd have to revisit it. Well,
the day has come.

So, my brilliant idea (and I'm being modest), was to use the 
surrounding ${} construct to make a state machine and capture 
everything in it, no matter what it contains. But, I have to now
treat the word token like I did with comments, in that I turn
the whole thing into a state-machine sort of spec, with new
contexts "curlystate", "wordstate", and "brackstate".

Wait a minute, "brackstate"? Yes, well, it didn't take very many
regression tests to point out if I do this for ${} constructs,
I also have to do it with the $[] constructs, too.

I had to create a separate pcbstack2 and pcbstack3 because
these constructs can occur inside macro argument lists, and
when we have two state machines operating on the same structures
we'd get problems otherwise. I guess I could have stopped at
pcbstack2 and had the brackstate stuff share it, but it doesn't
hurt to be safe. So, the pcbpush and pcbpop routines also now
have versions for "2" and "3".

I had to add the {KEYWORD} construct to the initial pattern for
"word", because previously word would match stuff like "default7",
because it was a longer match than the keyword "default". But,
not any more, because the word pattern only matches only one or
two characters now, and it will always lose. So, I made it the
winner again by making an optional match on any of the keywords
before it's normal pattern.

I added another regression test to make sure we don't
lose this in future edits, and had to fix just one regression,
where it no longer reports a 'cascaded' error, which I guess
is a plus.

I've given some thought as to whether to apply these fixes to
1.4 and the 1.6.x releases, vs trunk; I decided to put it in
1.4 because one of the bug reports was against 1.4; and it
is unexpected that AEL cannot handle this situation. It actually
reduced the amount of useless "cascade" error messages that
appeared in the regressions (by one line, ehhem). There is
a possible side-effect in that it does now do more careful
checking of what's in those ${} constructs, as far as matching
parens, and brackets are concerned. Some users may find a an
insidious problem and correct it this way. This should be 
exceedingly rare, I hope.


------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=141094 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2008-09-04 18:05 svnbot         Checkin                                      
2008-09-04 18:05 svnbot         Note Added: 0092093                          
======================================================================




More information about the asterisk-bugs mailing list