@awayfl/avm2
Version:
Virtual machine for executing AS3 code
34 lines (33 loc) • 1.08 kB
JavaScript
import { Multiname } from '../abc/lazy/Multiname';
import { axCoerceString } from '../run/axCoerceString';
export function walk(sec, holder, name, reviver) {
var val = holder[name];
if (Array.isArray(val)) {
var v = val;
for (var i = 0, limit = v.length; i < limit; i++) {
var 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 (var p in val) {
if (!val.hasOwnProperty(p) || !Multiname.isPublicQualifiedName(p)) {
break;
}
var newElement = walk(sec, val, p, reviver);
if (newElement === undefined) {
delete val[p];
}
else {
val[p] = newElement;
}
}
}
return reviver.call(holder, name, val);
}