[Laszlo-dev] script compiler parser bug with trailing ", " in array

Donald Anderson dda at ddanderson.com
Wed Jan 9 11:34:01 PST 2008


We want to fix just in SWF9?

On Jan 9, 2008, at 11:07 AM, P T Withington wrote:

> This was an error in es3 but is now allowed in es4, so you should  
> file a bug for Don to fix.
>
> On Jan 9, 2008, at 10:40, "Henry Minsky" <henry.minsky at gmail.com>  
> wrote:
>
>> I get a parser error thrown bwhen I make an array with a trailing  
>> comma after the last element, like
>>
>>         var forceload =  [LzText,
>>                           // LzInputText.
>>                           LzView,
>>                           LzNode,
>>                           LzAnimator,
>>                           LzAnimatorGroup,
>>                           LzLayout,
>>                           LzScript,
>>
>>                           ];
>>
>> I thought this was legal in JS, or maybe that's Python I'm thinking  
>> of?
>>
>>      [echo] Compiling C:\users\hqm\openlaszlo\devildog/lps/includes/ 
>> lfc/LFC9.lzl
>>      [java] No prec for ASTEmptyExpression in
>>      [java] org.openlaszlo.sc.CompilerException
>>      [java]     at  
>> org 
>> .openlaszlo 
>> .sc.ParseTreePrinter.maybeAddParens(ParseTreePrinter.java:624)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visitArrayLiteral  
>> (ParseTreePrinter.java:569)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:279)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit( ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit( ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit( ParseTreePrinter.java:160)
>>      [java]     at  
>> org 
>> .openlaszlo 
>> .sc.ParseTreePrinter.makeTranslationUnits(ParseTreePrinter.java:833)
>>      [java]     at  
>> org 
>> .openlaszlo 
>> .sc.SWF9Generator.makeTranslationUnits(SWF9Generator.java :743)
>>      [java]     at org.openlaszlo.sc.Compiler.compile(Compiler.java: 
>> 349)
>>      [java]     at org.openlaszlo.sc.lzsc.compile(lzsc.java:110)
>>      [java]     at org.openlaszlo.sc.lzsc.compile(lzsc.java:322)
>>      [java]     at org.openlaszlo.sc.Main.main(Main.java:10)
>>      [java] No prec for ASTEmptyExpression in
>>      [java] org.openlaszlo.sc.CompilerException
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.maybeAddParens  
>> (ParseTreePrinter.java:624)
>>      [java]     at  
>> org 
>> .openlaszlo 
>> .sc.ParseTreePrinter.visitArrayLiteral(ParseTreePrinter.java:569)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:279)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>      [java]     at org.openlaszlo.sc.ParseTreePrinter.visit  
>> (ParseTreePrinter.java:160)
>>      [java]     at  
>> org.openlaszlo.sc.ParseTreePrinter.visit(ParseTreePrinter.java:160)
>>
>>
>> On Jan 9, 2008 10:35 AM, Henry Minsky < henry.minsky at gmail.com>  
>> wrote:
>> I guess I can have a statement at the start of the LzApplication  
>> main class, that just makes a list of all the
>> LFC classes that have LZX tag names, and that will force them to be  
>> loaded.
>>
>>
>> On Jan 9, 2008 10:33 AM, Henry Minsky <henry.minsky at gmail.com> wrote:
>> Interesting... LzNode looks at the ConstructorMap *before* it  
>> creates an LzText, so that would
>> explain why it isn't there  yet. Given this behavior, anyone have  
>> any suggestions as to how to build
>> the constructormap table in the distributed way we're doing it  
>> currently?.
>>
>> For now, I'm just going to hardcode the whole table  into the  
>> Laszlo application startup class I'm building.
>>
>>
>>
>>
>> On Jan 9, 2008 10:29 AM, Donald Anderson < dda at ddanderson.com> wrote:
>> Henry,
>>
>> At the time you have looked at ConstructorMap, have you
>> already created a LzText object?  If not, maybe it's doing
>> lazy creation of the classes - I know that Java does this -
>> static initializers and blocks don't occur until the class is
>> loaded, and a class may not be loaded until some code executes
>> that either creates an object of that type or references a static  
>> method/var.
>>
>> On Jan 9, 2008, at 9:59 AM, Henry Minsky wrote:
>>
>>>
>>> In one of the LFC files I declare a global
>>>
>>> var ConstructorMap = {};
>>>
>>> which gets turned into it's own declaration  file by the script  
>>> compiler
>>>
>>> ConstructorMap.as:
>>>
>>> package {
>>>   public var ConstructorMap = {};
>>> }
>>>
>>>
>>> In each LFC file I have a statement to add a tag to this global
>>>
>>>
>>> dynamic class LzView extends LzNode {
>>>     static var tagname = 'view';
>>>     ConstructorMap[tagname] = LzView;
>>>
>>>
>>> dynamic class LzAnimator extends LzAnimatorGroup {
>>>   static var tagname = 'animator';
>>>   ConstructorMap[tagname] = LzAnimator;
>>>
>>>
>>> dynamic class LzText extends LzView  {
>>>     static var tagname = 'text';
>>>     ConstructorMap[tagname] = LzText;
>>>
>>> But when the system is running, there is no entry in  
>>> ConstructorMap['text'], in fact
>>> the only entries in the ConstructorMap are
>>>
>>>   view: [class LzView], node: [class LzNode], canvas: [class  
>>> LzCanvas],
>>>
>>> missing are animator, layout, animatorgroup, text
>>>
>>> So I'm wondering is there some arbitrary ordering issue where some  
>>> of the
>>> classes are executing the "ConstructorMap[foo] = bar" before  
>>> ConstructorMap
>>> actually gets initialized, and silently failing, or what? I can't  
>>> figure
>>> out if this is a compiler bug in Flex or if I'm doing something  
>>> wrong.  According to
>>> the AS3 docs, statements at the top level of a class declaration  
>>> get executed once
>>> when the class is defined. But I am wondering how that interacts  
>>> with global var initializations,
>>> maybe the order is arbitrary?
>>>
>>>
>>>
>>>
>>>
>>> -- 
>>> Henry Minsky
>>> Software Architect
>>> hminsky at laszlosystems.com
>>>
>>
>>
>> --
>>
>> Don Anderson
>> Java/C/C++, Berkeley DB, systems consultant
>>
>> voice: 617-547-7881
>> email:  dda at ddanderson.com
>> www: http://www.ddanderson.com
>>
>>
>>
>>
>>
>>
>>
>> -- 
>> Henry Minsky
>> Software Architect
>> hminsky at laszlosystems.com
>>
>>
>>
>>
>> -- 
>> Henry Minsky
>> Software Architect
>> hminsky at laszlosystems.com
>>
>>
>>
>>
>> -- 
>> Henry Minsky
>> Software Architect
>> hminsky at laszlosystems.com
>>


--

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

voice: 617-547-7881
email: dda at ddanderson.com
www: http://www.ddanderson.com




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.openlaszlo.org/pipermail/laszlo-dev/attachments/20080109/6a73c8ad/attachment-0001.html


More information about the Laszlo-dev mailing list