[Laszlo-dev] For Review: Change 20080222-dda-o Summary: Add support for new dependency mechanism in script compiler
Donald Anderson
dda at ddanderson.com
Fri Feb 22 20:14:03 PST 2008
Change 20080222-dda-o by dda at lester.local on 2008-02-22 21:31:39 EST
in /Users/dda/laszlo/src/svn/openlaszlo/trunk-dep
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Add support for new dependency mechanism in script compiler
New Features:
Bugs Fixed: LPP-5335 (partial)
Technical Reviewer: ptw (pending)
QA Reviewer: hminsky (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
Introduces a new function Compiler.dependenciesForExpression()
taking
a source expression e.g. "a.b.c + this.something.Fcn(1)" and
producing a source expression representing the dependency, e.g.
[a.b, "c"].concat(this.something.hasOwnProperty("$lsc
$Fcn_dependencies") ? (this.something cast Object).$lsc
$Fcn_dependencies(this, this.something, 1) : [])
This change does not functionally change *anything*, but it
provides
an API needed to switch over to having the tag compiler generate
the
dependency functions.
The significant changes are in ReferenceCollector, which keeps two
implementations (old and new) for the moment. It doesn't make
sense
to refactor them into a common codebase since the old
implementation
will go away after new dependencies are fully integrated. The
old implementation
internal methods can be found in ReferenceCollector named as
*_using_subfunction
in reference to the original naming convention fcn() ->
fcn.dependencies() .
The new implementation uses naming fcn() -> $lsc
$fcn_dependencies() as
indicated in the example above.
The implementation is conscious of the naming convention, since
there
may be calls to the dependency functions in the produced output.
There is also a fix to the ParseTreePrinter so that it knows how
to print
'cast'. This wasn't needed before to print final output from
JS1, since
casts were always removed. Casts are generated in the dependency
source
so they will work with SWF9 - without it, the flex compile
complains
about references to nonexistant dependency functions.
Downcasting to
Object makes the compiler *less* strict and accepting of any
function name.
The output from the simple dependency given above has been tested
to
compile with flex2 as a proof of concept.
Also a small improvement to ReferenceGenerator to only create one
Compiler.Parser object.
This snippet added to NodeModel.java during testing (but not part
of this change)
shows how the new dependency function can be called:
if (when.equals(WHEN_ALWAYS)) {
System.out.println("CONSTRAINT: src = " +
canonicalValue.toString());
String dep = (new
org
.openlaszlo
.sc.Compiler()).dependenciesForExpression(canonicalValue.toString());
System.out.println("CONSTRAINT: dep = " + dep);
}
Tests:
regression: smokecheck,weather,lzpix (swf8/dhtml), runlzunit
Files:
M WEB-INF/lps/server/src/org/openlaszlo/sc/ReferenceCollector.java
M WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java
M WEB-INF/lps/server/src/org/openlaszlo/sc/ParseTreePrinter.java
Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20080222-dda-o.tar
--
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