Ah, it may be tied up with André's compile-time conditional evaluator.

Look for ASTConditionalExpression translator.

On 2011-09-24, at 05:16, Raju Bitter wrote:

> Where does the rewrite happen in the code? I could try to fix it.
> 
> On Fri, Sep 23, 2011 at 11:36 PM, P T Withington <[email protected]> wrote:
>> 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