[Laszlo-dev] [REVISED] For Review: Change 20080728-ptw-G Summary: Implement <setter>

André Bargull a.bargull at intensis.de
Tue Jul 29 07:21:45 PDT 2008


Do we want to allow non-literal attribute names for the 
"super.setAttribute(..)" call? I'm just thinking about js2-setters and 
our (possible) future plans to compile away the "setAttribute"-mechanism 
with real js2-setters. I just want to prevent that users make any 
non-sense with the "super.setAttribute"-stuff, so that we may need to 
provide any scary backward compatibility thing in the future. At least 
we should state that this is not supported and may change in future 
versions..
And it's also currently not possible in swf9 at all, see point (iii).

Next problem I hit: what about "Function#call" and "Function#apply"? 
swf8 gave a runtime error, swf9 a compile error. Point (i)

And what is the expected behaviour when I attempt to call a non-existing 
super-setter? swf9 emits a (native) runtime-error, the swf8 error was 
less "informative" (apart from the line number info). Point (ii)

Otherwise approved!


(i) using "call" or "apply"
> <setter name="foo" args="newfoo">
>     Debug.info("sub.set foo: %s", newfoo);
>     super.setAttribute.apply(this, ["foo", newfoo]);
>     //super.setAttribute.call(this, "foo", newfoo);
> </setter>
swf8 compilation - runtime error:
> ERROR @LPP-5587.lzx#21: undefined object does not have a property 'apply'
swf9 compilation - compile error:
> |LPP-5587.lzx:22:5: Syntax error: the token "[" was not expected at 
> this position.
> Was expecting one of: (, .|


(ii) using "super.setAttribute" without super-setter
> <class name="sub" extends="base">
>     <attribute name="bar" value="false" type="boolean" />
>     <setter name="bar" args="newbar" >
>       Debug.info("sub.set bar: %s", newbar);
>       super.setAttribute("bar", newbar);
>     </setter>
>   </class>
swf8 compilation - runtime error:
> ERROR @LPP-5587.lzx#26: undefined object does not have a property 'call' 
swf9 compilation - runtime error in swf9.
> ReferenceError: Error #1070: Method $lzc$set_bar not found in 
> .$lzc$class_base


(iii) non literal for attribute name:

> <class name="sub" extends="base">
>     <setter name="foo" args="newfoo">
>       Debug.info("sub.set foo: %s", newfoo);
>       var methname = "foo";
>       super.setAttribute(methname, newfoo);
>     </setter>
>   </class>
swf9 compilation - compile error:
> |LPP-5587.lzx:22:5: Syntax error: the token "[" was not expected at 
> this position.
> Was expecting one of: (, .|


On 7/29/2008 1:04 PM, P T Withington wrote:
> [REVISED: I really think I got the change set up to date now.]
>
> Change 20080728-ptw-G by ptw at dueling-banjos.local on 2008-07-28 
> 16:57:52 EDT
>     in /Users/ptw/OpenLaszlo/dingdong-clean
>     for http://svn.openlaszlo.org/openlaszlo/trunk
>
> Summary: Implement <setter>
>
> Bugs Fixed:
> LPP-5587 'Improve LZX getter/setter to be more like conventional O-O 
> languages'
>
> Technical Reviewer: a.bargull at intensis.de (pending)
> QA Reviewer: promanik at laszlosystems.com (pending)
>
> Release Notes:
>     There is a new tag available in classes and instances (<setter>)
>     that can be used to define a setter for an attribute.  This tag
>     can be used to override a built-in setter.  The overridden setter
>     can be invoked by using `super.setAttribute`.
>
> Details:
>     schema: allow <setter> in canvas and node
>
>     swf9stubs: use LzFormatter for prettier output
>
>     JavascriptGenerator, CodeGenerator, SWF9Generator: Transform
>     `super.setAttribute(x, y)` to `super['$lzc$set_' + x](y)`.
>
>     NodeModel: Add support or the <setter> tag.
>
> Tests:
>     Test case from bug, in swf8, dhtml, and swf9
>
> Files:
> M      WEB-INF/lps/schema/lfc.lzx
> M      WEB-INF/lps/lfc/debugger/swf9stubs.lzs
> 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/SWF9Generator.java
> M      WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
>
> Changeset: 
> http://svn.openlaszlo.org/openlaszlo/patches/20080728-ptw-G.tar
>


More information about the Laszlo-dev mailing list