[Laszlo-user] [REVISED] API change proposal: Disallow `super` calls in <state> methods

Dave Miller dwmiller at umich.edu
Thu Jul 24 10:58:45 PDT 2008


Just a note, wherever you document it, you might want to explain that  
this stuff applies to only methods that are direct children of states.  
A method that is a child of a view that is a child of a state will  
work as before. Right?

"methods inside states" isn't quite precise enough.

Dave




On Jul 24, 2008, at 10:02 AM, David Temkin wrote:

> This is cleaner. Still will present developers with an unexpected  
> "gotcha" as <methods> are put into a <state>, and "super." is used  
> naively within a <method>.
>
> will this generate a compiler error?
>
> where should this limitation going to be documented? <state>?  
> <method>? language preliminaries? the new JS2 doc?
>
> On Jul 24, 2008, at 5:45 AM, P T Withington wrote:
>
>> [Cf.: http://jira.openlaszlo.org/jira/browse/LPP-5624]
>>
>> In the current system, LZX developers have sometimes written  
>> methods inside states.  As far as we can tell, this is neither  
>> explicitly supported or unsupported, but it happens to work for swf  
>> and dhtml.  It can't work for static runtimes like swf9 (or other  
>> JS2's), because states can be placed, so the compiler cannot tell  
>> at compile time which class these methods really belong to -- they  
>> are dynamically attached to instances at runtime.  We have tried a  
>> number of ideas to work around this issue with no success and  
>> currently this is one of the major roadblocks to getting some  
>> applications working in swf9.  We propose making the following API  
>> change for states:
>>
>> 1) The use of `super` is not supported in <method> tags in the  
>> <state> tag.
>>
>> What this means to the LZX developer:
>>
>> 1) If the developer uses <method> in <state>, they will not be able  
>> to make `super` calls in that method.
>>
>> 2) The developer will need to decide whether the purpose of the  
>> <method> is to:
>>
>> a) [most likely] Simply be a common subroutine that is used by  
>> other parts of the state, e.g., to implement a complex constraint.   
>> It references members of parent, but does not need to use `super`.
>>
>> b) Dynamically add a method to the parent and fully participate in  
>> the class protocols.
>>
>> In case a), the <method> can be left as is.
>>
>> In case b), the <method> will have to be statically added to the  
>> parent (i.e., moved out of the state into the parent).  If the  
>> developer was intending the method to dynamically replace an  
>> existing method in the parent when the state is applied, they  
>> should be aware that only constraints and children are removed when  
>> a state is un-applied, so they may not be getting what they expect  
>> anyways.
>>
>> ---
>>
>> Note:  The body of a <handler> is implicitly a method in a <view>.   
>> Because of the above proposal, the body of a <handler> in a <state>  
>> will not be able to make `super` calls either.  As above if a full  
>> method is required, it should be statically added to the parent,  
>> and the handler rewritten to refer to the static method rather than  
>> using its body as an implicit method.
>>
>>
>



More information about the Laszlo-user mailing list