Tucker, this has a flaw (as you'll see) but it does work, you might
want to take it depending on
how time critical it is. I can work on finding/fixing the flaw
tomorrow too.
- Don
Change 20090108-dda-O by [email protected] on 2009-01-08 06:25:08 EST
in /Users/dda/laszlo/src/svn/openlaszlo/trunk-c
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Remove references to 'this' in static functions
New Features:
Bugs Fixed: LPP-7514 (Compilation error when setting
compiler.swf9.catcherrors=true in lps.properties)
Technical Reviewer: ptw (pending)
QA Reviewer: (pending)
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
The implementation of catchFunctionExceptions (catcherrors) was
blind to static functions,
'this' cannot be used in static functions.
To tell that a function is static, this changeset peeks up the
tree to the parent
of the function node, which should be a ASTModifiedDefinition
('moddef'), and checks the static
flag there. A shortcut in copying part of the tree without the
moddef
needed to be fixed, to do that, a 'shallow copy' function was
added to the moddef class.
Though this change is required for the static detection to work
in SWF9,
it also causes problems for SWF8 compilation (**), so has
been disabled for SWF8. A TODO has been left in the code.
An alternate way of detecting static-ness is to set a 'static'
property in the options.
I had tried in addressing LPP-5813 (not yet completed), and had
some trouble getting
it to work. It's not clear which one is cleaner, but the one
that works wins for me.
This fix is slightly more encompassing than it needs to be, it
also disables any possibility
of applying the WITH_THIS directive within a static function.
This should always be
correct. Changing that to be narrower did not affect the SWF8
problem.
(**) If the moddef copy is used with SWF8 applications, this
apparently triggers an
error in the code generator.. A difference of disassembled swf
files shows that the
errant file is missing pop instructions at the end of functions,
like this:
***************
*** 4109,4115 ****
end // of function
end
- pop
push 'toString', '_root'
getVariable
with
--- 4089,4094 ----
Tests:
(dhtml,swf8,swf9) x (lzpix,weather,smokecheck,hello) x (enable
catcherrors, disable catcherrors)
Files:
M WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java
M WEB-INF/lps/server/src/org/openlaszlo/sc/CommonGenerator.java
M WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java
M WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/
ASTModifiedDefinition.java
Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20090108-dda-O.tar
--
Don Anderson
Java/C/C++, Berkeley DB, systems consultant
voice: 617-306-2057
email: [email protected]
www: http://www.ddanderson.com