diff options
Diffstat (limited to 'js/src/jsscript.cpp')
-rw-r--r-- | js/src/jsscript.cpp | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index ba2e540e4..bdd411d04 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -1407,10 +1407,19 @@ ScriptSourceObject::initFromOptions(JSContext* cx, HandleScriptSource source, MOZ_ASSERT(source->getReservedSlot(ELEMENT_PROPERTY_SLOT).isMagic(JS_GENERIC_MAGIC)); MOZ_ASSERT(source->getReservedSlot(INTRODUCTION_SCRIPT_SLOT).isMagic(JS_GENERIC_MAGIC)); - RootedObject element(cx, options.element()); - RootedString elementAttributeName(cx, options.elementAttributeName()); - if (!initElementProperties(cx, source, element, elementAttributeName)) + RootedValue element(cx, ObjectOrNullValue(options.element())); + if (!cx->compartment()->wrap(cx, &element)) return false; + source->setReservedSlot(ELEMENT_SLOT, element); + + RootedValue elementAttributeName(cx); + if (options.elementAttributeName()) + elementAttributeName = StringValue(options.elementAttributeName()); + else + elementAttributeName = UndefinedValue(); + if (!cx->compartment()->wrap(cx, &elementAttributeName)) + return false; + source->setReservedSlot(ELEMENT_PROPERTY_SLOT, elementAttributeName); // There is no equivalent of cross-compartment wrappers for scripts. If the // introduction script and ScriptSourceObject are in different compartments, @@ -1428,26 +1437,6 @@ ScriptSourceObject::initFromOptions(JSContext* cx, HandleScriptSource source, return true; } -bool -ScriptSourceObject::initElementProperties(JSContext* cx, HandleScriptSource source, - HandleObject element, HandleString elementAttrName) -{ - RootedValue elementValue(cx, ObjectOrNullValue(element)); - if (!cx->compartment()->wrap(cx, &elementValue)) - return false; - - RootedValue nameValue(cx); - if (elementAttrName) - nameValue = StringValue(elementAttrName); - if (!cx->compartment()->wrap(cx, &nameValue)) - return false; - - source->setReservedSlot(ELEMENT_SLOT, elementValue); - source->setReservedSlot(ELEMENT_PROPERTY_SLOT, nameValue); - - return true; -} - /* static */ bool JSScript::loadSource(JSContext* cx, ScriptSource* ss, bool* worked) { |