WebWorkers: Extract evaluateScript logic to JSCHelpers
Reviewed By: lexs Differential Revision: D2779277 fb-gh-sync-id: ab9a040193f36f40a4a34229a4a90199537253aa
This commit is contained in:
parent
a68f8f4224
commit
690eb08e63
|
@ -70,31 +70,6 @@ static JSValueRef nativePerformanceNow(
|
|||
const JSValueRef arguments[],
|
||||
JSValueRef *exception);
|
||||
|
||||
static JSValueRef evaluateScriptWithJSC(
|
||||
JSGlobalContextRef ctx,
|
||||
JSStringRef script,
|
||||
JSStringRef sourceURL) {
|
||||
JSValueRef exn;
|
||||
auto result = JSEvaluateScript(ctx, script, nullptr, sourceURL, 0, &exn);
|
||||
if (result == nullptr) {
|
||||
JSValueProtect(ctx, exn);
|
||||
std::string exceptionText = Value(ctx, exn).toString().str();
|
||||
FBLOGE("Got JS Exception: %s", exceptionText.c_str());
|
||||
auto line = Value(ctx, JSObjectGetProperty(ctx,
|
||||
JSValueToObject(ctx, exn, nullptr),
|
||||
JSStringCreateWithUTF8CString("line"), nullptr
|
||||
));
|
||||
std::ostringstream lineInfo;
|
||||
if (line != nullptr && line.isNumber()) {
|
||||
lineInfo << " (line " << line.asInteger() << " in the generated bundle)";
|
||||
} else {
|
||||
lineInfo << " (no line info)";
|
||||
}
|
||||
throwNewJavaException("com/facebook/react/bridge/JSExecutionException", (exceptionText + lineInfo.str()).c_str());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static std::string executeJSCallWithJSC(
|
||||
JSGlobalContextRef ctx,
|
||||
const std::string& methodName,
|
||||
|
@ -110,7 +85,7 @@ static std::string executeJSCallWithJSC(
|
|||
auto js = folly::to<folly::fbstring>(
|
||||
"__fbBatchedBridge.", methodName, ".apply(null, ",
|
||||
folly::toJson(jsonArgs), ")");
|
||||
auto result = evaluateScriptWithJSC(ctx, String(js.c_str()), nullptr);
|
||||
auto result = evaluateScript(ctx, String(js.c_str()), nullptr);
|
||||
JSValueProtect(ctx, result);
|
||||
return Value(ctx, result).toJSONString();
|
||||
}
|
||||
|
@ -167,7 +142,7 @@ void JSCExecutor::executeApplicationScript(
|
|||
FbSystraceSection s(TRACE_TAG_REACT_CXX_BRIDGE, "JSCExecutor::executeApplicationScript",
|
||||
"sourceURL", sourceURL);
|
||||
#endif
|
||||
evaluateScriptWithJSC(m_context, jsScript, jsSourceURL);
|
||||
evaluateScript(m_context, jsScript, jsSourceURL);
|
||||
}
|
||||
|
||||
std::string JSCExecutor::flush() {
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
#include "JSCHelpers.h"
|
||||
|
||||
#include <JavaScriptCore/JSStringRef.h>
|
||||
#include <fb/log.h>
|
||||
#include <jni/fbjni/Exceptions.h>
|
||||
|
||||
#include "Value.h"
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
@ -28,4 +32,24 @@ JSValueRef makeJSCException(
|
|||
return JSValueToObject(ctx, exceptionString, NULL);
|
||||
}
|
||||
|
||||
JSValueRef evaluateScript(JSContextRef context, JSStringRef script, JSStringRef source) {
|
||||
JSValueRef exn;
|
||||
auto result = JSEvaluateScript(context, script, NULL, source, 0, &exn);
|
||||
if (result == nullptr) {
|
||||
Value exception = Value(context, exn);
|
||||
std::string exceptionText = exception.toString().str();
|
||||
FBLOGE("Got JS Exception: %s", exceptionText.c_str());
|
||||
auto line = exception.asObject().getProperty("line");
|
||||
|
||||
std::ostringstream lineInfo;
|
||||
if (line != nullptr && line.isNumber()) {
|
||||
lineInfo << " (line " << line.asInteger() << " in the generated bundle)";
|
||||
} else {
|
||||
lineInfo << " (no line info)";
|
||||
}
|
||||
throwJSExecutionException("%s%s", exceptionText.c_str(), lineInfo.str().c_str());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
} }
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <JavaScriptCore/JSContextRef.h>
|
||||
#include <JavaScriptCore/JSObjectRef.h>
|
||||
#include <JavaScriptCore/JSValueRef.h>
|
||||
|
||||
#define throwJSExecutionException(...) jni::throwNewJavaException("com/facebook/react/bridge/JSExecutionException", __VA_ARGS__)
|
||||
|
||||
|
@ -19,4 +20,6 @@ JSValueRef makeJSCException(
|
|||
JSContextRef ctx,
|
||||
const char* exception_text);
|
||||
|
||||
JSValueRef evaluateScript(JSContextRef context, JSStringRef script, JSStringRef source);
|
||||
|
||||
} }
|
||||
|
|
Loading…
Reference in New Issue