Re: Originate with label?

Mark Murawski <[email protected]>
Newsgroups gmane.comp.telephony.pbx.asterisk.user
Message-ID <[email protected]>
On 8/31/22 05:29, Antony Stone wrote:
>
>>> What I am suggesting is that Tracker=${CDR(uniqueid)} should be converted
>>> by AEL into Set(Tracker=${CDR(uniqueid)}) in order to avoid this sort of
>>> surprise.
>> On the flip-side... anyone who currently relies on purely
>> numeric/boolean handling of the current implementation would be
>> incredibly surprised to find their AEL suddenly broken... so we need to
>> take that into account.
> Indeed.
>
> I realise that the better solution might be to wrap assignments (inside Set()
> or MSet(), no matter) with $[..] *only* if the expressions contain arithmetic
> operators + - * / and not if they are simple a=b assignments, including
> a=${b}.
>
> This would ensure that even if ${b} expanded to something containing a dash,
> it would be interpreted as a mathematical minus sign in a=${b}
>


I would hesitate about making this happen as well.. without a 
migration-plan in place.

Typically:
1) Add a new option that would flip the behavior of var=val sets to 
auto-detect math and act accordingly on whether or not to use $[] (which 
comes with its own issues)

2) Warn about the change in the application: Ie: In Asterisk 20 there 
would be a warning stating in Asterisk 21 this will be the new default 
behavior


But, there's issues with auto-detecting math.  Because it's impossible 
for a compiler/transpiler to correctly assess *intent*. It can read the 
symbols and say, "Oh, I see you have some math symbols here, lets force 
this to math mode" in a purely search and replace context.  Here's the 
problem with that.  Variables can contain all kinds of (very 
unpredictable from a compiler perspective) stuff.

How is the compiler supposed to tell the difference between the 
following examples, for intent
var1 = ${a} + ${b} / ${c};
var2 = Hello World / Hello Bob / Hello Sue
var3 = *1*1*1* HEY THERE IS A PROBLEM *1*1*1
var4 = This-Is-Some-Dash-Separated-Data: 1-2-3-4-5-6

I'm not saying I personally write code like this, but there are some 
quick examples that can easily proof this to be the wrong approach

I think what you're looking for is quoted strings.
var1 = "This-Is-Some-Dash-Separated-Data: 1-2-3-4-5-6"
Which gets converted to an MSet(var1=$[ 
"This-Is-Some-Dash-Separated-Data: 1-2-3-4-5-6" ])

Which considering MSet actually has a desired behavior here of removing 
quotes, your value of var1 will be exactly what you expect it to be


AEL

   9999 => {

     var = "hi there - what's - up 0 * 1 / 4 not math";

     NoOp(${var});

   }


Dialplan:

vbox-markm-x64*CLI> dialplan show 9999@services

[ Context 'services' created by 'pbx_ael' ]

   '9999' =>         1. MSet(var=$[ "hi there - what's - up 0 * 1 / 4 not math"]) [pbx_ael]

                     2. NoOp(${var})                               [pbx_ael]



Execution:

MSet(var="hi there - what's - up 0 * 1 / 4 not math")

NoOp(hi there - what's - up 0 * 1 / 4 not math)

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

Check out the new Asterisk community forum at: https://community.asterisk.org/

New to Asterisk? Start here:
      https://wiki.asterisk.org/wiki/display/AST/Getting+Started

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.