diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2017-06-01 15:54:01 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-06-02 14:07:43 +0000 |
commit | 0a3506ebe5d7f431f0dd4dffa24ac32063b90ff1 (patch) | |
tree | f3d0b92fe7bc5b31426a838c354616fff335e82b /Source/JavaScriptCore/jsc.cpp | |
parent | 881da28418d380042aa95a97f0cbd42560a64f7c (diff) | |
download | qtwebkit-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.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()); } |