LPP-8520
On 9/28/2009 6:18 PM, P T Withington wrote: > I approved your change (sorry, I did it out of order). Could you file > an improvement based on the below? Basically we want to extend the eval > compiler and leverage the scriptElement kludge to allow you to specify a > "global object" where bindings should be made (and free references > looked up). > > On 2009-09-28, at 12:14, André Bargull wrote: > >> On 9/28/2009 5:46 PM, P T Withington wrote: >>> The officially supported way to create a binding that persists in the >>> debugger is to say: >>> var foo = something; >>> That should create Debug.environment['foo'] and bind it to `something`. >> >> It should be in 'Debug.environment', but currently swf8 and dhtml >> create global variables. In swf9, you get only a local variable which >> is no longer available after you've evaluated the expression, so the >> variable is neither available in 'Debug.environment' nor in global. >> >> >>> If you simply say: >>> foo = something; >>> that it magically creates a global binding on some platforms is an >>> artifact of JS1's global implementation. I have to confess, I'm not >>> sure what the AS3 semantics are supposed to be, if you try to assign >>> to a non-existent reference. A with-block does mean the lookup has >>> to be dynamic, but if there is no reference found, that should be an >>> error. Perhaps this is really an AS3 runtime bug. >>> --- >>> Did you test that `var foo ...` creates a binding in >>> Debug.environment that you can later refer to in swf9+? This works >>> in swf8 by the compiler 'scriptElement' kludge that transforms >>> top-level declarations in a function into global assignments (relying >>> on the JS1 global semantics). In swf9+ we could extend this kludge >>> by allowing you to specify an Object to use (in lieu of the JS1 >>> global object). In the debug eval case, the object would be >>> Debug.environment. But see also: >>> (http://jira.openlaszlo.org/jira/browse/LPP-6837). >> >> No, as explained above, it doesn't create any bindings. (But this is >> not a regression due to my change.) >> >> >> >>> On 2009-09-28, at 11:21, Henry Minsky wrote: >>>> Yeah this has always been a not-officially supported but useful >>>> feature, >>>> that you could say "foo = something" and create a global, or at least >>>> something that acts like a global in the expressions >>>> you write in the debugger. >>>> >>>> It would be great if we could figure out a way to make this work in >>>> swf10. I >>>> wonder if we could go so far as to try to recognize statements of >>>> the form >>>> "somevar = someexpression" and put code that wraps around to >>>> check if "somevar" is not yet defined, and if so, to define it in the >>>> Debug.environment. >>>> >>>> >>>> On Mon, Sep 28, 2009 at 9:54 AM, André Bargull >>>> <[email protected]>wrote: >>>> >>>>> Forget to mention: >>>>> There is now a funny effect in swf9/swf10 because of the >>>>> with-block. You >>>>> can evaluate the expression 'lzx> foo = 42' even if 'foo' is not a >>>>> defined >>>>> variable, but if you later want to retrieve the value of 'foo' by >>>>> evaluating >>>>> 'lzx> foo', the runtime reports a ReferenceError. Without the >>>>> with-block, >>>>> you'd get a static compiler error because 'foo' is not defined. But >>>>> as the >>>>> with-block forces dynamic look-up, the runtime needs perform this >>>>> check, but >>>>> apparently fails for assignment expressions, only dereferencing >>>>> gives the >>>>> ReferenceError. I'd consider this as a bug... >>>>> >>>>> >>>>> >>>>> On 9/28/2009 3:28 PM, André Bargull wrote: >>>>> >>>>>> Change 20090928-bargull-YnE by barg...@dell--p4--2-53 on 2009-09-28 >>>>>> 12:39:38 >>>>>> in /home/Admin/src/svn/openlaszlo/trunk >>>>>> for http://svn.openlaszlo.org/openlaszlo/trunk >>>>>> >>>>>> Summary: update eval-script compiler to use Debug.environment >>>>>> >>>>>> New Features: LPP-8519 (wrap evalscript in >>>>>> "with(Debug.environment){...}") >>>>>> >>>>>> Bugs Fixed: >>>>>> >>>>>> Technical Reviewer: ptw >>>>>> QA Reviewer: hqm >>>>>> Doc Reviewer: (pending) >>>>>> >>>>>> Documentation: >>>>>> >>>>>> Release Notes: >>>>>> >>>>>> Details: >>>>>> Compiler.java: >>>>>> Added "compileEvalScript()" to avoid duplicate code for swf8 and AS3 >>>>>> runtimes. Every eval-script is now surrounded with >>>>>> "with(Debug.environment) >>>>>> {...}" in order to allow eval-expressions to access properties >>>>>> from the >>>>>> Debugger environment. >>>>>> For swf8 compilation, the catch block only caught >>>>>> "sc.parser.ParseException", this is now just "Exception" (it was >>>>>> already >>>>>> just "Exception" for swf9), so every possible exception is caught >>>>>> (e.g. >>>>>> otherwise an unterminated multi-line comment throws the compiler >>>>>> out of >>>>>> whack). >>>>>> Apparently it's no longer necessary to prepend "_level0" before >>>>>> references >>>>>> to "Debug" in swf8, so I removed it. I've also added try-catch for >>>>>> swf8 like >>>>>> it's already done in swf9, because otherwise throwing an Error >>>>>> leads a >>>>>> timeout of the eval-request (see 1st comment on LPP-8519). And I >>>>>> wonder how >>>>>> remote debug requests did work in the past, because there was a stray >>>>>> semicolon in the code (l.493). And made sure that >>>>>> Debug.sockWriteAsXML() is >>>>>> always called for remote debug request, so the Debug.inEvalRequest >>>>>> flag gets >>>>>> updated. >>>>>> Also removed the excessive import list for swf9, because it has no >>>>>> use >>>>>> since the script isn't executed in "DebugExec" but in >>>>>> "DebugEvaluate". >>>>>> LzDebug.as (swf8): >>>>>> - removed override of "displayResult()", no longer necessary >>>>>> LzDebug.as (swf9): >>>>>> - removed override of "displayResult()", no longer necessary >>>>>> - cleaned up imports >>>>>> - removed '_', '__' and '___', no longer global >>>>>> - removed "TODO" from comment in "IDForObject()" >>>>>> LzMemory.lzs: >>>>>> - updated to use "Debug.environment" instead of "global" for '_', >>>>>> '__' and >>>>>> '___' >>>>>> LzCanvas.lzs: >>>>>> - added "swf10" to the supported runtimes comment >>>>>> >>>>>> >>>>>> >>>>>> Tests: >>>>>> try eval'ing expression, statements and erroneous inputs in swf8, >>>>>> swf9, >>>>>> swf10 >>>>>> >>>>>> Files: >>>>>> M WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as >>>>>> M WEB-INF/lps/lfc/debugger/platform/swf9/LzDebug.as >>>>>> M WEB-INF/lps/lfc/debugger/LzMemory.lzs >>>>>> M WEB-INF/lps/lfc/views/LaszloCanvas.lzs >>>>>> M WEB-INF/lps/server/src/org/openlaszlo/compiler/Compiler.java >>>>>> >>>>>> Changeset: >>>>>> http://svn.openlaszlo.org/openlaszlo/patches/20090928-bargull-YnE.tar >>>>>> >>>>>> >>>>>> >>>> >>>> >>>> -- >>>> Henry Minsky >>>> Software Architect >>>> [email protected] > > _______________________________________________ Laszlo-reviews mailing list [email protected] http://www.openlaszlo.org/mailman/listinfo/laszlo-reviews
