I emailed them a case to replicate and i saw your code in the bug base (which is the same as mine basically), other than that no info :(
On 10/30/07, Derek Vadneau <[EMAIL PROTECTED]> wrote: > > Hi Johannes, > > Did Adobe contact you for more info about the Proxy bug?: > https://bugs.adobe.com/jira/browse/ASC-2812 > > I posted the information I had, but the bug is still indicating > "incomplete" and "Waiting on Info". > > Is Adobe waiting for information from you? Or has the bug slipped into the > (at least now visible) blackhole? > > > > On 9/27/07, Derek Vadneau < [EMAIL PROTECTED]> wrote: > > > > First of all, thank you Johannes for posting the bug. I entered some > > code in the comments. > > > > Second, yes it's a bug. > > > > Retrieving the property isn't the issue. Executing it as a function is. > > > > For example: > > mp['prop'] = 'something'; > > > > Why doesn't that execute getProperty? If it did Proxy would be > > completely useless. How would you know what was trying to be set or that a > > set action was being attempted at all? > > > > The same applies to a function call. The fact is a method is being > > called - the player expects it, that's why you get a runtime error if you > > don't return a function. > > > > Functionally, there's no difference here: > > mp['go'](); > > mp.go(); > > > > We are accessing the same property. go is a property that references a > > function, in BOTH cases. Why would getProperty not be called for both? Why > > is there a callProperty method at all? > > > > There's a difference between: > > var a = mp['go']; > > > > and: > > var a = mp['go'](); > > > > Just as there's a difference between: > > var a = mp.go; > > > > and: > > var a = mp.go(); > > > > mp['go'] requires a lookup, the same as mp.go requires a lookup. The > > latter calls the function directly but the other does not? > > > > A peer of mine suggested this may be a compiler bug rather than a player > > bug. It's possible that the compiler is treating the [] as a property lookup > > that needs to call getProperty, ignoring the fact that a function is being > > called. At least that's our suggestion from the outside. The compiler/player > > team would know best. > > > > Fwiw, check this entry in the Flash Player 10 bug list. This is a bug > > listed that suggests a similar behaviour: > > https://bugs.adobe.com/jira/browse/ASC-2298 > > ------------------- > > myXML:XML = new XML('<a>test</a>'); > > trace(myXML['toXMLString']()); > > > > Actual Results: > > > > TypeError: Error #1006: value is not a function. > > > > Expected Results: > > > > <a>test</a> > > ------------------- > > > > That happens because, I'll bet, under the covers the E4X implementation > > is doing the same thing as Proxy. When you type myXML.somenode you get > > back a reference to the node, but it doesn't exist on myXML directly. The > > reason all of the members of XML are methods is so they don't conflict with > > this process. The reason the above code fails is because getProperty is > > being called and XML is doing a lookup on the data, not finding it, or > > finding it, whatever the case, but not returning the method as expected. > > > > A workaround in that case is to lookup the XML methods first and return > > them if found, but then you have conflicts, a problem that using methods was > > supposed to resolve. > > > > The solution is to have callProperty called. > > > > > > On 9/27/07, Johannes Nel < [EMAIL PROTECTED]> wrote: > > > > > > and here is the bug id: > > > http://bugs.adobe.com/jira/browse/ASC-2812 > > > > > > > > > On 9/27/07, Johannes Nel < [EMAIL PROTECTED]> wrote: > > > > > > > > as a side note, someone on the player team did think this was a bug > > > > before i logged it post i escalated it to people who know more people > > > > than i > > > > do :) > > > > > > > > On 9/27/07, Johannes Nel <[EMAIL PROTECTED]> wrote: > > > > > > > > > > var mo:MyOther = new MyOther(); > > > > > var mp:MyProxy = new MyProxy(); > > > > > mo.nextfunction = mp['go'] > > > > > > > > > > this is a very good point. > > > > > > > > > > > > > > > > > > > > On 9/27/07, actionscript_czar <[EMAIL PROTECTED] > wrote: > > > > > > > > > > > > This doesn't seem to be a bug to me, just looking at it from a > > > > > > > > > > > > limited perspective. > > > > > > > > > > > > Image a class that lookes like this: > > > > > > > > > > > > class MyClass > > > > > > { > > > > > > public var go:Function; > > > > > > > > > > > > public function MyClass( goFunc:Function ) > > > > > > { > > > > > > this.go = goFunc; > > > > > > } > > > > > > } > > > > > > > > > > > > In this case go is a property that happens to be a function > > > > > > object. > > > > > > So what if using your proxy with another class you did something > > > > > > like > > > > > > this: > > > > > > > > > > > > var mo:MyOther = new MyOther(); > > > > > > var mp:MyProxy = new MyProxy(); > > > > > > mo.nextfunction = mp['go']; // could also be mp.go > > > > > > > > > > > > In that case it would use getProperty and your description is no > > > > > > > > > > > > different. When you use the [] operators it gets the property > > > > > > then > > > > > > you use the () operators to call the property. The () property > > > > > > is > > > > > > expecting a function object on the left hand side. The reason it > > > > > > > > > > > > doesn't use callProperty is because the () operators only see a > > > > > > function object but don't see it as part of the MyProxy object. > > > > > > > > > > > > This doesn't mean it couldn't work as you expect in the future, > > > > > > but > > > > > > my understanding says the two methods of getting to go are > > > > > > processed > > > > > > distinctly for a reason. > > > > > > > > > > > > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, > > > > > > "Derek Vadneau" <[EMAIL PROTECTED]> > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > There seems to be a bug in flash.utils.Proxy. Here's some > > > > > > sample > > > > > > code: > > > > > > > > > > > > > > var mp:MyProxy = new MyProxy(); > > > > > > > > > > > > > > mp.myVar = 'something'; // calls flash_proxy setProperty as > > > > > > expected > > > > > > > > > > > > > > mp['myVar'] = 'something'; // calls flash_proxy setProperty as > > > > > > > > > > > > expected > > > > > > > > > > > > > > mp.go(); // calls flash_proxy callProperty as expected > > > > > > > > > > > > > > mp['go'](); // calls flash_proxy getProperty - NOT expected > > > > > > > > > > > > > > Why is getProperty called where the [] operator is used > > > > > > instead of > > > > > > the > > > > > > > . operator in the case where a function is being called, but > > > > > > not > > > > > > when > > > > > > > setting a property? > > > > > > > > > > > > > > And in that case you MUST return a function or a runtime error > > > > > > will > > > > > > be thrown. > > > > > > > > > > > > > > This is unexpected behaviour, as far as I can see. > > > > > > > > > > > > > > Another example: > > > > > > > > > > > > > > mp.obj.go(); > > > > > > > > > > > > > > mp['obj']['go'](); // getProperty is called twice, > > > > > > callProperty is > > > > > > NOT > > > > > > > called at all > > > > > > > > > > > > > > The issue is that I am dealing with a dynamic API, so I don't > > > > > > always > > > > > > > know that 'obj' or 'go' is a property vs. a method. > > > > > > > > > > > > > > But, because the getProperty is called when a callProperty > > > > > > should be > > > > > > > called I am passing an instance of my Proxy class and a > > > > > > runtime > > > > > > error > > > > > > > is thrown. > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > Derek Vadneau > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > j:pn > > > > > \\no comment > > > > > > > > > > > > > > > > > > > > -- > > > > j:pn > > > > \\no comment > > > > > > > > > > > > > > > -- > > > j:pn > > > \\no comment > > > > > > > > > > > > -- > > > > Derek Vadneau > > > > > -- > > Derek Vadneau > > > -- j:pn \\no comment