Without actually looking at the compiler, I think that functions that are not methods are pulled out and declared early for ES5 (strict?) reasons. I'm not sure there is a good distinction between a "local function" and assigning a function to something.
IIRC, "assigning" some functions like in a function as a parameter like addEventListener is supposed to generate Language.closure wrappers to make a "closure" and bind the 'this' pointer to the method. I'm unclear as to what the desired JS output really should be. Would it really work in JS if the function was directly assigned to a slot on the instance instead of a temporary variable first? If so why? I'm also surprised that in JS, a function call can't have its 'this' pointer reassigned by Function.call. What is the actual JS that is running? -Alex On 6/17/18, 7:29 AM, "Harbs" <[email protected]> wrote: An additional related problem: Using “call” with a different “this” will not work with the aliased functions either. This is proving to be a challenge for me… Harbs > On Jun 17, 2018, at 12:02 PM, Harbs <[email protected]> wrote: > > I have the following class: > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apache.org%2Fr7Ek&data=02%7C01%7Caharui%40adobe.com%7Cd50a81aaa8f8453ae0f408d5d45eb567%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636648425616368813&sdata=5Jz5bTTwhdwweaam%2BghkMCSwkM4WWyqnWHhr%2BrDpub8%3D&reserved=0 <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apache.org%2Fr7Ek&data=02%7C01%7Caharui%40adobe.com%7Cd50a81aaa8f8453ae0f408d5d45eb567%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636648425616368813&sdata=5Jz5bTTwhdwweaam%2BghkMCSwkM4WWyqnWHhr%2BrDpub8%3D&reserved=0> > > Which gets cross-compiled to: > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apache.org%2F3k1r&data=02%7C01%7Caharui%40adobe.com%7Cd50a81aaa8f8453ae0f408d5d45eb567%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636648425616378822&sdata=t50ucBXXnOezZW9mt%2BuMH5J5N%2BlJGGJBoBer7SkYU7I%3D&reserved=0 <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apache.org%2F3k1r&data=02%7C01%7Caharui%40adobe.com%7Cd50a81aaa8f8453ae0f408d5d45eb567%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636648425616378822&sdata=t50ucBXXnOezZW9mt%2BuMH5J5N%2BlJGGJBoBer7SkYU7I%3D&reserved=0> > > The problem is here: > struct.process = function():void { > if (this.version === 0) { > for (var i:int = 0; i < this.offsets.length; i++) { > this.offsets[i] <<= 1; > } > } > }; > > In this case, “this” refers to the “struct” VersionedStruct instance. (At least in Javascript. Am I correct in assuming that’s the case in ActionScript as well?) > > However, it gets cross-compiled to the following where “this" is the global this: > > var /** @type {Function} */ __localFn0__ = function() { > if (this.version === 0) { > for (var /** @type {number} */ i = 0; i < this.offsets.length; i++) { > this.offsets[i] <<= 1; > } > } > } > com.printui.fontkit.tables.loca.struct.process = __localFn0__; > > What is the purpose of pulling the inline function out? > > Harbs
