Approved! P T Withington wrote: > Change 20091020-ptw-P by [email protected] on 2009-10-20 12:13:17 EDT > in /Users/ptw/OpenLaszlo/trunk > for http://svn.openlaszlo.org/openlaszlo/trunk > > Summary: Remove platform dependence from tag compiler (step 1 of n) > > Bugs Fixed: > LPP-5813 JS1 class back end needs to implement lexical scoping of class > members (partial) > > Technical Reviewer: hminsky (pending) > QA Reviewer: max (pending) > > Release Notes: > > The script compiler now (partially) models class declarations to > help discover instance references in methods and insert the `with > (this)` block that makes them work. Because instance references > were not previously detected when compiling the LFC, for now we > warn if a free reference will be interpreted as an instance > reference when compiling the LFC. > > Details: > > The overall idea is that the script compiler should know the > difference between a function and a method and for methods it > should know the class that method belongs to and hence should be > able to resolve references to instance properties. Methods are > detected in the parser and given a new AST type to distinguish > them from functions through the compiler. This implementation is > a step forward, although not a complete solution. It does, > however, remove one of the main remaining platform dependencies > from the tag compiler, which brings us a step closer to being able > to write platform-independent .lzo's. > > LzDebug.lzs: Error noticed in passing in `explainStyleBindings`. > > LzDebug.js: Fix global references that are now shadowed by > instance properties. > > PropertyReference, JS2Doc, : ASTMethodDeclaration gets same > treatment as > ASTFunctionDeclaration. > > JavascriptGenerator, CodeGenerator, CommonGenerator: Move global > management to CommonGenerator. Note classes and global vars in > global table. > > JavascriptGenerator, CodeGenerator, ASTVisitor, > JavascriptCompressor, ParseTreePrinter, ASTModifiedDefinition: > Handle methods as declarations, and as expressions when they > appear in a class plist. > > JavascriptGenerator, CodeGenerator: Remove the unneeded (and > kludgey) isExpressionType assertion. Extend > translateFunctionInternal to know the differnce between a function > and a method. For withThis calculation, when the class > description is known and complete, use it to sort the free > references into free and instance references and only output `with > (this)` when there are instance references. Warn if there are > apparent instance references in the LFC, as they were surely not > intended (since this is a new feature for LFC code). > > variableAnalyzer: Learn about conditional computation so the free > set is correct for conditional compiles. Correct the computation > of free references in super calls and array literals. Note that a > catch clause introduces a local variable. > > CommonGenerator: Add ClassDescriptor to track instance properties > for withThis analysis. The instance properties of superclasses > are lazily computed as the compiler is still 1-pass and there may > be forward references. The withThis analyzer will fall back to > conservatively treating all free references as possible instance > references if the class description is incomplete when needed. > Create a class context around the translation of a class > declaration and not the class description in the context so it can > be retrieved by translateFunctionInternal when translating a > method in the class. Simplify the translation of a method for > plist by simply inserting the method declaration and relying on > the expression translator to translate it as an expression. > > SWF9Generator: Work with, but ignore the above changes, since the > FLEX compiler already does the class/instance analysis for us. > > TranslationContext: Add new context type for class and property > CLASS_DESCRIPTION. > > NodeModel: Remove platform-specific withThis injection. > > Parser: Add MethoDeclaration AST that is the same as a > FunctionDeclaration, but detected lexically at the top level of a > ClassDeclaration. > > Tests: > smokecheck on all platforms, diff of compiler output (LFC and > smokecheck) > > Files: > M WEB-INF/lps/lfc/debugger/LzDebug.lzs > M WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js > M WEB-INF/lps/server/src/org/openlaszlo/js2doc/PropertyReference.java > M WEB-INF/lps/server/src/org/openlaszlo/js2doc/JS2Doc.java > M WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java > M WEB-INF/lps/server/src/org/openlaszlo/sc/VariableAnalyzer.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/sc/TranslationContext.java > M WEB-INF/lps/server/src/org/openlaszlo/sc/ASTVisitor.java > M WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java > M WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptCompressor.java > M WEB-INF/lps/server/src/org/openlaszlo/sc/ParseTreePrinter.java > M WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java > M WEB-INF/lps/server/sc/src/org/openlaszlo/sc/Parser.jjt > M > WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTModifiedDefinition.java > > > Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20091020-ptw-P.tar
-- Regards, Max Carlson OpenLaszlo.org _______________________________________________ Laszlo-reviews mailing list [email protected] http://www.openlaszlo.org/mailman/listinfo/laszlo-reviews
