diff options
Diffstat (limited to 'Source/JavaScriptCore/jsc.cpp')
-rw-r--r-- | Source/JavaScriptCore/jsc.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp index c672add34..d9f888fb1 100644 --- a/Source/JavaScriptCore/jsc.cpp +++ b/Source/JavaScriptCore/jsc.cpp @@ -1122,23 +1122,29 @@ EncodedJSValue JSC_HOST_CALL functionCreateRoot(ExecState* exec) EncodedJSValue JSC_HOST_CALL functionCreateElement(ExecState* exec) { JSLockHolder lock(exec); - JSValue arg = exec->argument(0); - return JSValue::encode(Element::create(exec->vm(), exec->lexicalGlobalObject(), arg.isNull() ? nullptr : jsCast<Root*>(exec->argument(0)))); + Root* root = jsDynamicCast<Root*>(exec->argument(0)); + if (!root) + return JSValue::encode(exec->vm().throwException(exec, createError(exec, ASCIILiteral("Cannot create Element without a Root.")))); + return JSValue::encode(Element::create(exec->vm(), exec->lexicalGlobalObject(), root)); } EncodedJSValue JSC_HOST_CALL functionGetElement(ExecState* exec) { JSLockHolder lock(exec); - Element* result = jsCast<Root*>(exec->argument(0).asCell())->element(); + Root* root = jsDynamicCast<Root*>(exec->argument(0)); + if (!root) + return JSValue::encode(jsUndefined()); + Element* result = root->element(); return JSValue::encode(result ? result : jsUndefined()); } EncodedJSValue JSC_HOST_CALL functionSetElementRoot(ExecState* exec) { JSLockHolder lock(exec); - Element* element = jsCast<Element*>(exec->argument(0)); - Root* root = jsCast<Root*>(exec->argument(1)); - element->setRoot(exec->vm(), root); + Element* element = jsDynamicCast<Element*>(exec->argument(0)); + Root* root = jsDynamicCast<Root*>(exec->argument(1)); + if (element && root) + element->setRoot(exec->vm(), root); return JSValue::encode(jsUndefined()); } |