UNPKG

@awayfl/avm2

Version:

Virtual machine for executing AS3 code

39 lines (38 loc) 1.6 kB
import { assert } from '@awayjs/graphics'; import { release, notImplemented, hasOwnGetter } from '@awayfl/swf-loader'; import { containsSymbol } from './containsSymbol'; export function linkSymbols(symbols, traits, object) { for (var i = 0; i < traits.traits.length; i++) { var trait = traits.traits[i]; var multiname = trait.multiname; var name_1 = multiname.name; var namespace = multiname.namespace; if (!containsSymbol(symbols, name_1)) { continue; } release || assert(namespace.type !== 3 /* NamespaceType.Private */, 'Why are you linking against private members?'); if (trait.isConst()) { release || release || notImplemented('Don\'t link against const traits.'); return; } var qn = multiname.getMangledName(); if (trait.isSlot()) { Object.defineProperty(object, name_1, { get: new Function('', 'return this.' + qn + '//# sourceURL=get-' + qn + '.as'), set: new Function('v', 'this.' + qn + ' = v;' + '//# sourceURL=set-' + qn + '.as') }); } else if (trait.isGetter()) { release || assert(hasOwnGetter(object, qn), 'There should be an getter method for this symbol.'); Object.defineProperty(object, name_1, { get: new Function('', 'return this.' + qn + '//# sourceURL=get-' + qn + '.as') }); } else { notImplemented(trait.toString()); } } }