Background for others on the list: we found that the swf9 runtime gets an
error  when we create named functions and assign them
to slots, such as is done for debugging purposes. It seems to cause a bug in
their JIT such that the function can be called once,
and then generates a VM  verify error the second time it is called.

For example , an onclick handler might compile to

{ $m1: function foo_$m1 () {this.parent.animate('rotation', 360, 1500,
true)}}

But the swf9 runtime apparently  gets confused that this function is named,
yet is being
assigned to some other var and invoked dynamically.

I noticed that in the tag compiler, the code that generates setter functions
for attributes is always assigning a name to
the function


In NodeModel.java addAttributeElement there is code which compiles the
"setter" attribute of an <attribute> tag

        if (setter != null) {
            String srcloc =
                CompilerUtils.sourceLocationDirective(element, true);
            // Maybe we need a new type for "function"?
            String setterfn =
                srcloc + "function " +
                parent_name + "_" + name + "_onset" +
                " (" + name + ") {" +
                "\n#pragma 'withThis'\n" +
                srcloc + setter + "\n}";

            if (setters.get(name) != null) {
                env.warn(
                    "a setter for attribute named '"+name+
                    "' is already defined on "+getMessageName(),
                    element);
            }

            setters.put(name, setterfn);
        }

It looks like this is always making a named function. I think we had better
conditionalize that, and maybe
it actually causes bugs in some DHTML runtimes? Would this be a test that
would tickle the bug for DHTML?

<class name="foo">
   <attribute name="bar" setter="this.baz = bar + ' is the value of bar'"/>
</class>

<foo>
  <handler name="oninit">
     this.setAttribute('bar', 259);
     Debug.write('baz = ', this.baz);
</handler>
</foo>



-- 
Henry Minsky
Software Architect
[EMAIL PROTECTED]

Reply via email to