Looks like the common path in the compiler for translating ?: is not rewriting 
the test expression.  Should be an easy fix.

On Sep 23, 2011, at 11:10, Raju Bitter <[email protected]> 
wrote:

> The generated AS3 source code for the function:
> 
> function testMethod () {
> var $0 = 999, $1 = false;
> 
> result == 999 ? (visible = true) : visible = false;
> 
> Debug.info("visible=", $1)
> }
> 
> On Fri, Sep 23, 2011 at 5:05 PM, Raju Bitter
> <[email protected]> wrote:
>> Had a small typo in the source code: for the Debug.info output it should be
>>  Debug.info("visible=", visible);
>> 
>> On Fri, Sep 23, 2011 at 5:03 PM, Raju Bitter
>> <[email protected]> wrote:
>>> I've run into a problem with the ternary operator within LZX. Take the
>>> following JS snippet:
>>> 
>>>    var result = 10;
>>>    var visible = false;
>>>    (result == 10) ? visible = true : visible = false;
>>> 
>>> I can run the code snippet in Rhino and Chrome JavaScript console
>>> without any problems. I can use the same code within an AS3
>>> application. But the OpenLaszlo compiler shows the following error
>>> message for both DHTML and SWF10:
>>> 
>>> org.openlaszlo.sc.CompilerError:
>>> ../../app/lzx/test/ou-jira-bugs/ternary/ternary.lzx: 7: Error: Access
>>> of undefined property result, in line: result == 10 ? (visible = true)
>>> : visible = false;
>>> ../../app/lzx/test/ou-jira-bugs/ternary/ternary.lzx: 7: Error: Access
>>> of undefined property visible, in line: result == 10 ? (visible =
>>> true) : visible = false;
>>> ../../app/lzx/test/ou-jira-bugs/ternary/ternary.lzx: 7: Error: Access
>>> of undefined property visible, in line: result == 10 ? (visible =
>>> true) : visible = false;
>>> 
>>> Here's the full LZX code I use for testing:
>>> <canvas debug="true">
>>> 
>>>  <node id="theNode">
>>>    <method name="testMethod">
>>>      var result = 999,
>>>        visible = false;
>>>      (result == 999) ? visible = true : visible = false;
>>>      Debug.info("result=", result);
>>>    </method>
>>>  </node>
>>> 
>>>  <button text="testMethod" onclick="theNode.testMethod()" />
>>> 
>>> </canvas>
>>> 
>>> Looking into the generated JS code for the DHTML runtime, I can see
>>> that the expression is not compiled correctly:
>>> Original code:
>>> Generated: result == 999 ? (visible = true) : visible = false;
>>> 
>>> 
>>> Generated code:
>>> var $lzsc$temp = function() { /* -*- file: -*- */
>>>        try { /* -*- file: ternary.lzx#5 -*- */
>>>            var result_$0 = 999,
>>>                visible_$1 = false;
>>> 
>>>            result == 999 ? (visible = true) : visible = false;
>>>            Debug.info("result=", result_$0)
>>>        } /* -*- file: -*- */
>>>        catch ($lzsc$e) {
>>>            if ((Error["$lzsc$isa"] ? Error.$lzsc$isa($lzsc$e) :
>>> $lzsc$e instanceof Error) && $lzsc$e !== lz["$lzsc$thrownError"]) {
>>>                $reportException("ternary.lzx", 4, $lzsc$e)
>>>            } else {
>>>                throw $lzsc$e
>>>            }
>>>        }
>>>    };
>>> 
>>> Ternary operator expressions work with the following synax:
>>>      visible = (result == 999) ? true: false;
>>> 
>>> Looks like a bug to me.
>>> 
>>> - Raju
>>> 
>> 
> 

Reply via email to