summaryrefslogtreecommitdiffstats
path: root/js/src/jsscript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jsscript.cpp')
-rw-r--r--js/src/jsscript.cpp35
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)
{