[Laszlo-dev] For Review: Change 20090108-dda-O Summary: Remove references to 'this' in static functions (revised)

Donald Anderson dda at ddanderson.com
Fri Jan 9 09:39:37 PST 2009


Yes, it works in that it compiles and gives the result:

   DEBUG: bar: 42
   ERROR @LPP-7514b.lzx#17: ReferenceError: Error #1065

(tested with catcherrors set to true).

How should we proceed?

- Don

On Jan 9, 2009, at 12:23 PM, P T Withington wrote:

> There's still going to be some corner case though, that I am not  
> sure we have thought out:
>
> When the tag compiler compiles an LZX class, _sometimes_ it has to  
> write a method as a closure, in which case it outputs:
>
>  var meth = function (...) { #pragma withThis ... }
>
> and in that case, it really wants a `with (this)` emitted in that  
> function body (which means you need it in your try closure too).
>
> Does the current mechanism do the right thing?  Here's a simple test  
> case:
>
> <canvas debug="true">
>  <class name="foo">
>    <attribute name="bar" value="42" />
>    <state applied="true">
>      <method name="doit">
>        Debug.debug("bar: %#w", bar);
>      </method>
>      <method name="dontit">
>        Debug.debug("bar: %#w", bletch);
>      </method>
>    </state>
>    <handler name="oninit">
>      doit();
>      // Should cause a caught error
>      dontit();
>    </handler>
>  </class>
>
>  <foo />
>
> </canvas>
>
> On 2009-01-09, at 11:48EST, Donald Anderson wrote:
>
>> Oh, right, that would have been a lot easier.
>> I'll make a new changeset.
>>
>> On Jan 9, 2009, at 11:02 AM, P T Withington wrote:
>>
>>> Shouldn't it be sufficient to simply use the same flag you use to  
>>> ignore the withThis pragma for js2 to conditionalize emitting the  
>>> `with (this)` in your try closure?  (I think you use the  
>>> `remaplocals()` predicate, but maybe that should be renamed  
>>> `isjs2()`?
>>>
>>> On 2009-01-09, at 09:44EST, Donald Anderson wrote:
>>>
>>>> Change 20090108-dda-O by dda at lester.local on 2009-01-08 06:25:08  
>>>> EST
>>>> in /Users/dda/laszlo/src/svn/openlaszlo/trunk-c
>>>> for http://svn.openlaszlo.org/openlaszlo/trunk
>>>>
>>>> Summary: Remove references to 'this' in static functions (revised)
>>>>
>>>> New Features:
>>>>
>>>> Bugs Fixed: LPP-7514 (Compilation error when setting  
>>>> compiler.swf9.catcherrors=true in lps.properties)
>>>>
>>>> Technical Reviewer: ptw (pending)
>>>> QA Reviewer: (pending)
>>>> Doc Reviewer: (pending)
>>>>
>>>> Documentation:
>>>>
>>>> Release Notes:
>>>>
>>>> Details:
>>>> [This changeset revises an earlier one sent to review, fixing an  
>>>> ugly workaround.
>>>>  Everything indicated under Tests has been retested with this  
>>>> revision.]
>>>>
>>>> The implementation of catchFunctionExceptions (catcherrors) was  
>>>> blind to static functions,
>>>> 'this' cannot be used in static functions.
>>>>
>>>> To tell that a function is static, this changeset peeks up the  
>>>> tree to the parent
>>>> of the function node, which should be a ASTModifiedDefinition  
>>>> ('moddef'), and checks the static
>>>> flag there.  A shortcut in copying part of the tree without the  
>>>> moddef
>>>> needed to be fixed, to do that, a 'shallow copy' function was  
>>>> added to the moddef class.
>>>>
>>>> An alternate way of detecting static-ness is to set a 'static'  
>>>> property in the options.
>>>> I had tried in addressing LPP-5813 (not yet completed), and had  
>>>> some trouble getting
>>>> it to work.  It's not clear which one is cleaner, but the one  
>>>> that works wins for me.
>>>>
>>>> This fix is slightly more encompassing than it needs to be, it  
>>>> also disables any possibility
>>>> of applying the WITH_THIS directive within a static function.   
>>>> This should always be
>>>> correct.  Changing that to be narrower did not affect the SWF8  
>>>> problem.
>>>>
>>>>
>>>> Tests:
>>>> (dhtml,swf8,swf9) x (lzpix,weather,smokecheck,hello) x (enable  
>>>> catcherrors, disable catcherrors)
>>>>
>>>> Files:
>>>> M      WEB-INF/lps/server/src/org/openlaszlo/sc/ 
>>>> JavascriptGenerator.java
>>>> M      WEB-INF/lps/server/src/org/openlaszlo/sc/ 
>>>> CommonGenerator.java
>>>> M      WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java
>>>> M      WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ 
>>>> ASTModifiedDefinition.java
>>>>
>>>> Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20090108-dda-O.tar
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> Don Anderson
>>>> Java/C/C++, Berkeley DB, systems consultant
>>>>
>>>> voice: 617-306-2057
>>>> email: dda at ddanderson.com
>>>> www: http://www.ddanderson.com
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>
>>
>> --
>>
>> Don Anderson
>> Java/C/C++, Berkeley DB, systems consultant
>>
>> voice: 617-306-2057
>> email: dda at ddanderson.com
>> www: http://www.ddanderson.com
>>
>>
>>
>>
>>
>


--

Don Anderson
Java/C/C++, Berkeley DB, systems consultant

voice: 617-306-2057
email: dda at ddanderson.com
www: http://www.ddanderson.com





-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.openlaszlo.org/pipermail/laszlo-dev/attachments/20090109/a16e8c88/attachment-0001.html


More information about the Laszlo-dev mailing list