[Laszlo-dev] For Review: Change 20070919-dda-V Summary: script compiler refactoring

Donald Anderson dda at ddanderson.com
Fri Sep 21 10:55:24 PDT 2007


Okay, made that change and committed.
Thanks.

- Don

On Sep 21, 2007, at 12:43 PM, P T Withington wrote:

> Approved.  Good stuff.
>
> One comment.  I might have named commonSuperCall translateSuperCall  
> (in keeping with the other visit/translate pairs).
>
> On 2007-09-19, at 18:00 EDT, Donald Anderson wrote:
>
>> Change 20070919-dda-V by dda at freddie.local on 2007-09-19 17:35:41 EDT
>>     in /Users/dda/laszlo/src/svn/openlaszlo/trunk/WEB-INF/lps/ 
>> server/src/org/openlaszlo/sc
>>     for http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/ 
>> server/src/org/openlaszlo/sc
>>
>> Summary: script compiler refactoring
>>
>> New Features:
>>   No externally visible changes.  A rearrangement of source code  
>> to allow for better
>>   sharing between modules, and separation of most of the platform  
>> independent parts of the compiler.
>>   This more easily allows various future work (e.g. SWF9) to  
>> proceed in parallel with
>>   general maintenance changes.
>>
>> Bugs Fixed:
>>
>> Technical Reviewer: ptw
>> QA Reviewer: (pending)
>> Doc Reviewer: (pending)
>>
>> Documentation:
>>
>> Release Notes:
>>
>> Details:
>>     Added a new class CommonGenerator that is the base class of
>>     JavascriptGenerator and CodeGenerator.  Methods from the two
>>     subclasses that are textually the same, or can be easily coerced
>>     to be the same are now only in CommonGenerator.
>>     Data members and internal classes that are identical are
>>     also now in the base class.
>>
>>     To get even greater sharing, many methods (like virtually all the
>>     visit* methods) that had signature changes in JavascriptGenerator
>>     (that is, they return 'SimpleNode' rather than void), have  
>> changed
>>     across the board to return SimpleNode.  That is, these  
>> functions return
>>     the possibly modified node that is visited.  In the  
>> CodeGenerator class, this
>>     concept is generally not used, so even though this class plays  
>> by the
>>     same rules, return values from such methods are ultimately  
>> ignored.
>>     But this gives a lot more code sharing and many more functions  
>> could be moved
>>     to CommonGenerator.
>>
>>     Likewise, methods that visit expressions that used to be declared
>>     returning boolean in CodeGenerator now must return SimpleNode.
>>     The backwards-seeming translation is that 'true' corresponds  
>> to null,
>>     and false corresponds to the existing node.  Doing it this way
>>     gets the maximum code sharing, it clearly reflects the way that
>>     the code was originally transformed after splitting.
>>
>>     CommonGenerator also implements a new interface: ASTVisitor,  
>> which is
>>     the union of all the visit* methods (returning a SimpleNode, of
>>     course).  This allows methods in CommonGenerator (esp.  
>> visitStatement)
>>     to freely call any other visit* method, whether or not it is  
>> actually
>>     defined in CommonGenerator.
>>
>>     Most of these changes listed above are almost mechanical using  
>> the
>>     indicated strategy; only occasionally were small (equivalent)  
>> coding
>>     changes introduced, and then only if a method was otherwise  
>> identical.
>>     More elaborate code sharing is possible, and was attempted, but
>>     such changes tended to inhibit overall readability and  
>> maintainability.
>>
>> Tests:
>>     built all files in lps/includes/lfc with the previous compiler  
>> (without
>>     these changes) using the flags "--option  
>> generatePredictableTemps=true".
>>     built the same files with the new compiler (with these changes).
>>     All *.js files compare exactly, all *.lzl files were  
>> disassembled,
>>     and the output from that compares exactly.
>>
>> Files:
>> M      JavascriptGenerator.java
>> A      CommonGenerator.java
>> A      ASTVisitor.java
>> M      CodeGenerator.java
>>
>> Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20070919- 
>> dda-V.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