@awayfl/avm2
Version:
Virtual machine for executing AS3 code
39 lines (37 loc) • 1.17 kB
text/typescript
import { AXApplicationDomain } from '../run/AXApplicationDomain';
import { Multiname } from '../abc/lazy/Multiname';
import { runtimeWriter } from '../run/writers';
import { release } from '@awayfl/swf-loader';
import { assert } from '@awayjs/graphics';
/**
* Creates a self patching getter that lazily constructs the class and memoizes
* to the class's instance constructor.
*/
export function defineClassLoader(
applicationDomain: AXApplicationDomain,
container: Object,
mn: Multiname,
classAlias: string
) {
Object.defineProperty(container, classAlias, {
get: function() {
runtimeWriter && runtimeWriter.writeLn('Running Memoizer: ' + mn.name);
const axClass = applicationDomain.getClass(mn);
release || assert(axClass, 'Class ' + mn + ' is not found.');
release || assert(axClass.axConstruct);
const loader: any = function() {
return axClass.axConstruct(<any>arguments);
};
loader.axIsType = function(value: any) {
return axClass.axIsType(value);
};
loader.axClass = axClass;
Object.defineProperty(container, classAlias, {
value: loader,
writable: false
});
return loader;
},
configurable: true
});
}