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]