summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/jsc.cpp
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2017-06-01 15:54:01 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-06-02 14:07:43 +0000
commit0a3506ebe5d7f431f0dd4dffa24ac32063b90ff1 (patch)
treef3d0b92fe7bc5b31426a838c354616fff335e82b /Source/JavaScriptCore/jsc.cpp
parent881da28418d380042aa95a97f0cbd42560a64f7c (diff)
downloadqtwebkit-0a3506ebe5d7f431f0dd4dffa24ac32063b90ff1.tar.gz
Import WebKit commit 3ca7a25a550e473d60bbbe321475c6c0ef114b31
Change-Id: I480668a0cb8114dccf7a1195190a993282875759 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'Source/JavaScriptCore/jsc.cpp')
-rw-r--r--Source/JavaScriptCore/jsc.cpp18
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());
}