Move from direct Evaluate to compile then execute for classic script

This commit is contained in:
CYBAI 2020-07-11 16:46:38 +09:00
parent 1aef31bb2f
commit 99e832a345

View file

@ -77,13 +77,14 @@ use embedder_traits::EmbedderMsg;
use ipc_channel::ipc::{self, IpcSender}; use ipc_channel::ipc::{self, IpcSender};
use ipc_channel::router::ROUTER; use ipc_channel::router::ROUTER;
use js::glue::{IsWrapper, UnwrapObjectDynamic}; use js::glue::{IsWrapper, UnwrapObjectDynamic};
use js::jsapi::Compile1;
use js::jsapi::{CurrentGlobalOrNull, GetNonCCWObjectGlobal}; use js::jsapi::{CurrentGlobalOrNull, GetNonCCWObjectGlobal};
use js::jsapi::{HandleObject, Heap}; use js::jsapi::{HandleObject, Heap};
use js::jsapi::{JSContext, JSObject}; use js::jsapi::{JSContext, JSObject};
use js::jsval::{JSVal, UndefinedValue}; use js::jsval::{JSVal, UndefinedValue};
use js::panic::maybe_resume_unwind; use js::panic::maybe_resume_unwind;
use js::rust::transform_str_to_source_text; use js::rust::transform_str_to_source_text;
use js::rust::wrappers::Evaluate2; use js::rust::wrappers::JS_ExecuteScript;
use js::rust::{get_object_class, CompileOptionsWrapper, ParentRuntime, Runtime}; use js::rust::{get_object_class, CompileOptionsWrapper, ParentRuntime, Runtime};
use js::rust::{HandleValue, MutableHandleValue}; use js::rust::{HandleValue, MutableHandleValue};
use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL}; use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL};
@ -2568,15 +2569,22 @@ impl GlobalScope {
let options = let options =
unsafe { CompileOptionsWrapper::new(*cx, filename.as_ptr(), line_number) }; unsafe { CompileOptionsWrapper::new(*cx, filename.as_ptr(), line_number) };
debug!("evaluating Dom string"); rooted!(in(*cx) let compiled_script = unsafe {
let result = unsafe { Compile1(
Evaluate2(
*cx, *cx,
options.ptr, options.ptr,
&mut transform_str_to_source_text(code), &mut transform_str_to_source_text(code),
rval,
) )
}; });
if compiled_script.is_null() {
debug!("error compiling Dom string");
report_pending_exception(*cx, true, InRealm::Entered(&ar));
return false;
}
debug!("evaluating Dom string");
let result = unsafe { JS_ExecuteScript(*cx, compiled_script.handle(), rval) };
if !result { if !result {
debug!("error evaluating Dom string"); debug!("error evaluating Dom string");