UNPKG

@awayfl/avm2

Version:

Virtual machine for executing AS3 code

33 lines (31 loc) 992 B
import { Multiname } from '../abc/lazy/Multiname'; import { axCoerceString } from '../run/axCoerceString'; import { AXSecurityDomain } from '../run/AXSecurityDomain'; export function walk(sec: AXSecurityDomain, holder: any, name: string, reviver: Function) { const val = holder[name]; if (Array.isArray(val)) { const v: any[] = <any>val; for (let i = 0, limit = v.length; i < limit; i++) { const newElement = walk(sec, v, axCoerceString(i), reviver); if (newElement === undefined) { delete v[i]; } else { v[i] = newElement; } } } else if (val !== null && typeof val !== 'boolean' && typeof val !== 'number' && typeof val !== 'string') { for (const p in val) { if (!val.hasOwnProperty(p) || !Multiname.isPublicQualifiedName(p)) { break; } const newElement = walk(sec, val, p, reviver); if (newElement === undefined) { delete val[p]; } else { val[p] = newElement; } } } return reviver.call(holder, name, val); }