UNPKG

@awayfl/avm2

Version:

Virtual machine for executing AS3 code

38 lines (37 loc) 1.49 kB
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; }