[Laszlo-dev] For Review: Change 20080209-dda-7 Summary: SWF9 mixin support
Donald Anderson
dda at ddanderson.com
Sun Feb 10 14:13:59 PST 2008
On Feb 10, 2008, at 1:57 PM, P T Withington wrote:
> This looks great! Approved.
>
> Comment: In Javascript, symbols begining with $ are supposed to be
> reserved for internal implementation, so we really are within our
> rights to use that. If we really cared, we could escape user $ by
> doubling them or something, but I don't see any reason to.
Yes. But in our case, we are using name like Mixin$Super (not
starting with $) for the interstitial.
So a user with an embedded '$' (not as first character) could
potentially conflict with
a generated class. Should I be starting such generated class names
with $,
perhaps something like $lzmixin$Mixin$Super ?
Then I'd be able to relax the rule to just disallow initial $.
- Don
> On 2008-02-09, at 14:28 EST, Donald Anderson wrote:
>
>> Change 20080209-dda-7 by dda at lester.local on 2008-02-09 13:57:38 EST
>> in /Users/dda/laszlo/src/svn/openlaszlo/branches/devildog
>> for http://svn.openlaszlo.org/openlaszlo/branches/devildog
>>
>> Summary: SWF9 mixin support
>>
>> New Features:
>>
>> Bugs Fixed: LPP-5266
>>
>> Technical Reviewer: ptw (pending)
>> QA Reviewer: promanik (pending)
>> Doc Reviewer: (pending)
>>
>> Documentation:
>>
>> Release Notes:
>>
>> Details:
>> The mixin support follows the design given by Tucker in LPP-5266.
>>
>> In SWF9Generator, when a mixin is seen, it is recorded in
>> mixinDef hashmap.
>> For each use of a mixin combination, the needed interstitials are
>> recorded in
>> the mixinRef hashmap, and all we need to do to the referencing
>> class is change
>> its superclass to be the interstitial.
>>
>> Each mixin declaration AST is duplicated - one is processed
>> like a class and one like an interface.
>> (CommonGenerator:translateClassDirectivesBlock
>> now knows three ways to process a class - the third being to
>> create a property list).
>> The 'interface' version of the mixin remains in the parse tree
>> and is emitted
>> as the interface. The 'class' version of the mixin is what is
>> put into mixinDef.
>>
>> After we are done processing the AST, we visit the mixinRef map
>> and for each entry,
>> we append a new class to the parse tree that implements the
>> interstitial.
>>
>> In unparsing, we need to track the current class name, since
>> constructors within
>> interstitials need that as their name (and not their original
>> name which matches
>> the mixin). Arguably this could be handled when the tree is
>> created, but currently
>> we are sharing all the contents of the interstitial AST with
>> possibly other interstitials.
>> Also in unparsing, bodies of functions for interfaces are handled
>> differently, so
>> we must track when we are in an interface.
>>
>> The changes only affect the implementation of mixins for SWF9.
>> It should be
>> possible to push this implementation into generic javascript
>> eventually.
>> That seemed too big for this moment.
>>
>> Tests:
>> regression tests: smoke/lzpix/weather for DHTML, SWF8 and henry's
>> hello for SWF9
>> mixin tests: for this, verified they compiled and checked
>> contents by eye.
>> constructors in mixins
>> public/private methods in mixins
>> vars in mixins
>> mixins can appear after usage
>> overridden methods possible
>> multiple mixins
>> Not yet tested - converting LFC9 classes back to use mixins.
>>
>> Files:
>> M WEB-INF/lps/server/src/org/openlaszlo/sc/SWF9Generator.java
>> M WEB-INF/lps/server/src/org/openlaszlo/sc/CommonGenerator.java
>> M WEB-INF/lps/server/src/org/openlaszlo/sc/
>> SWF9ParseTreePrinter.java
>> M WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java
>> M WEB-INF/lps/server/src/org/openlaszlo/sc/ParseTreePrinter.java
>> M WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/
>> ASTIdentifier.java
>>
>> Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20080209-dda-7.tar
>>
>>
>>
>> --
>>
>> Don Anderson
>> Java/C/C++, Berkeley DB, systems consultant
>>
>> voice: 617-547-7881
>> email: dda at ddanderson.com
>> www: http://www.ddanderson.com
>>
>>
>>
>>
>
--
Don Anderson
Java/C/C++, Berkeley DB, systems consultant
voice: 617-547-7881
email: dda at ddanderson.com
www: http://www.ddanderson.com
More information about the Laszlo-dev
mailing list