Created a JIRA http://jira.openlaszlo.org/jira/browse/LPP-10087

On Sat, Sep 24, 2011 at 11:16 AM, Raju Bitter
<[email protected]> 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