Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
APPEND_OPCODES.add(Op.DynamicAttr, (vm, { op1: _name, op2: trusting, op3: _namespace }) => {
let name = vm[CONSTANTS].getString(_name);
let reference = check(vm.stack.pop(), CheckReference);
let value = reference.value();
let namespace = _namespace ? vm[CONSTANTS].getString(_namespace) : null;
let attribute = vm.elements().setDynamicAttribute(name, value, !!trusting, namespace);
if (!isConst(reference)) {
vm.updateWith(new UpdateDynamicAttributeOpcode(reference, attribute));
}
});
APPEND_OPCODES.add(Op.PushRemoteElement, vm => {
let elementRef = check(vm.stack.pop(), CheckReference);
let insertBeforeRef = check(vm.stack.pop(), CheckReference);
let guidRef = check(vm.stack.pop(), CheckReference);
let element: SimpleElement;
let insertBefore: Maybe;
let guid = guidRef.value() as string;
if (isConst(elementRef)) {
element = check(elementRef.value(), CheckElement);
} else {
let cache = new ReferenceCache(elementRef as Reference);
element = check(cache.peek(), CheckElement);
vm.updateWith(new Assert(cache));
}
if (insertBeforeRef.value() !== undefined) {
if (isConst(insertBeforeRef)) {
insertBefore = check(insertBeforeRef.value(), CheckOption(CheckNode));
} else {
let cache = new ReferenceCache(insertBeforeRef as Reference>);
insertBefore = check(cache.peek(), CheckOption(CheckNode));
vm.updateWith(new Assert(cache));
}
}
let guidRef = check(vm.stack.pop(), CheckReference);
let element: SimpleElement;
let insertBefore: Maybe;
let guid = guidRef.value() as string;
if (isConst(elementRef)) {
element = check(elementRef.value(), CheckElement);
} else {
let cache = new ReferenceCache(elementRef as Reference);
element = check(cache.peek(), CheckElement);
vm.updateWith(new Assert(cache));
}
if (insertBeforeRef.value() !== undefined) {
if (isConst(insertBeforeRef)) {
insertBefore = check(insertBeforeRef.value(), CheckOption(CheckNode));
} else {
let cache = new ReferenceCache(insertBeforeRef as Reference>);
insertBefore = check(cache.peek(), CheckOption(CheckNode));
vm.updateWith(new Assert(cache));
}
}
let block = vm.elements().pushRemoteElement(element, guid, insertBefore);
if (block) vm.associateDestroyable(block);
});