Coupla questions:

I thought the variable remapper only operated over function bodies, so I don't see how it got applied to a class? In the original, the function body was analyzed to see what variables were free and which were local (or parameters), and only the locals and parameters were remapped. (This was originally implemented to support 'register' vars in SWF7, but was extended to Javascript for compaction and obfuscation.)

Are the annotations on every expression, or do you try to minimize them (by only inserting them when the source file changes, or when a source line expands into a different number of target lines?)

Otherwise, approved.

On 2007-12-11, at 11:29 EST, Donald Anderson wrote:

Change 20071211-dda-Y by [EMAIL PROTECTED] on 2007-12-11 10:58:29 EST
   in /Users/dda/laszlo/src/svn/openlaszlo/branches/devildog
   for http://svn.openlaszlo.org/openlaszlo/branches/devildog

Summary: lztest-node fixes for SWF9

New Features: none

Bugs Fixed: LPP-5234

Technical Reviewer: ptw (pending)
QA Reviewer: (pending)
Doc Reviewer: (pending)

Documentation: none

Release Notes: none

Details:
This change addresses several issues related to building lztest- node in SWF9.

 + lztestmanager was written using 'old style' class definition.
We could have found a way to make this work, but it seemed much better to take advantage of the new capabilities of defining classes via 'class' keywords, etc.

+ Many methods reference global variables. These variables either appear as part of the default application class, or become true 'globals'. In the former case, we need to potentially emit 'with (this)' or 'with (lzDefaultAppliation)', apparently depending on whether the method is within the default application or not. In the latter case, the users of the global variable are fine, but the variable needs to be emitted in its own source file. This seems to be the only way to create a standalone
   global variable in SWF9.
      package {
       public var global = null;
      }

+ Normally the JavascriptGenerator remaps local variables to names like $1, $2, etc. This was even happening for 'class variables' in explicitly declared classes:
     class foo {
        var x = 1;
        function bar() {
           x++;
        }
     }
x would be renamed to $1, and the references to it (from bar) were not remapped. Even if we could remap all, this would not be appropriate if x were public (really only private should be remapped for this case). In SWF9, we simply disable this remapping for now. Undoubtedly, we'll need this conditionally (I left in a TODO) but it's easiest to make progress by deferring this.

+ Fixed some small problems related to string manipulation of generated code. For SWF9, generated code contains 'annotations', that is line and classname information embedded in the generated Strings. These annotations are stripped out when writing the text to a file, but is also used to build line number tables and direct output to the proper filename. When making simple manipulations, like 'remove a semicolon from the last character of a string', care must be taken to not remove any part of the annotation. Fortunately, very little string manipulation occurs after code
   is generated.

Tests:

Files:
M WEB-INF/lps/server/src/org/openlaszlo/sc/ JavascriptGenerator.java
M      WEB-INF/lps/server/src/org/openlaszlo/sc/SWF9Generator.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      lps/components/lztest/lztestmanager.lzx

Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20071211-dda-Y.tar



--

Don Anderson
Java/C/C++, Berkeley DB, systems consultant

Voice:  617-547-7881
Email:  [EMAIL PROTECTED]
WWW:    http://www.ddanderson.com


Reply via email to