@awayfl/avm2
Version:
Virtual machine for executing AS3 code
38 lines (37 loc) • 1.49 kB
JavaScript
import { InstanceInfo } from '../abc/lazy/InstanceInfo';
import { assert } from '@awayjs/graphics';
import { release, assertUnreachable, pushMany } from '@awayfl/swf-loader';
import { ClassInfo } from '../abc/lazy/ClassInfo';
import { builtinNativeClasses, nativeClasses } from './builtinNativeClasses';
export function getNativesForTrait(trait, throwErrors) {
var className = null;
var natives;
if (trait.holder instanceof InstanceInfo) {
var instanceInfo = trait.holder;
className = instanceInfo.getClassName();
var native = builtinNativeClasses[className] || nativeClasses[className];
if (!native && !throwErrors)
return [];
assert(native, 'Class native is not defined: ' + className);
natives = [native.prototype];
if (native.instanceNatives) {
pushMany(natives, native.instanceNatives);
}
}
else if (trait.holder instanceof ClassInfo) {
var classInfo = trait.holder;
className = classInfo.instanceInfo.getClassName();
var native = builtinNativeClasses[className] || nativeClasses[className];
if (!native && !throwErrors)
return [];
assert(native, 'Class native is not defined: ' + className);
natives = [native];
if (native.classNatives) {
pushMany(natives, native.classNatives);
}
}
else {
release || assertUnreachable('Invalid trait type');
}
return natives;
}