Change 20080209-dda-7 by [EMAIL PROTECTED] 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: [EMAIL PROTECTED]
www: http://www.ddanderson.com