diff options
Diffstat (limited to 'fxjs/cfxjse_context.cpp')
-rw-r--r-- | fxjs/cfxjse_context.cpp | 94 |
1 files changed, 46 insertions, 48 deletions
diff --git a/fxjs/cfxjse_context.cpp b/fxjs/cfxjse_context.cpp index ad37ca2c0a..bf9bee8652 100644 --- a/fxjs/cfxjse_context.cpp +++ b/fxjs/cfxjse_context.cpp @@ -43,6 +43,48 @@ const char szCompatibleModeScript[] = wchar_t g_FXJSETagString[] = L"FXJSE_HostObject"; +v8::Local<v8::Object> CreateReturnValue(v8::Isolate* pIsolate, + v8::TryCatch& trycatch) { + v8::Local<v8::Object> hReturnValue = v8::Object::New(pIsolate); + if (trycatch.HasCaught()) { + v8::Local<v8::Value> hException = trycatch.Exception(); + v8::Local<v8::Message> hMessage = trycatch.Message(); + if (hException->IsObject()) { + v8::Local<v8::Value> hValue; + hValue = hException.As<v8::Object>()->Get( + v8::String::NewFromUtf8(pIsolate, "name")); + if (hValue->IsString() || hValue->IsStringObject()) + hReturnValue->Set(0, hValue); + else + hReturnValue->Set(0, v8::String::NewFromUtf8(pIsolate, "Error")); + + hValue = hException.As<v8::Object>()->Get( + v8::String::NewFromUtf8(pIsolate, "message")); + if (hValue->IsString() || hValue->IsStringObject()) + hReturnValue->Set(1, hValue); + else + hReturnValue->Set(1, hMessage->Get()); + } else { + hReturnValue->Set(0, v8::String::NewFromUtf8(pIsolate, "Error")); + hReturnValue->Set(1, hMessage->Get()); + } + hReturnValue->Set(2, hException); + hReturnValue->Set(3, v8::Integer::New(pIsolate, hMessage->GetLineNumber())); + hReturnValue->Set(4, hMessage->GetSourceLine()); + v8::Maybe<int32_t> maybe_int = + hMessage->GetStartColumn(pIsolate->GetCurrentContext()); + hReturnValue->Set(5, v8::Integer::New(pIsolate, maybe_int.FromMaybe(0))); + maybe_int = hMessage->GetEndColumn(pIsolate->GetCurrentContext()); + hReturnValue->Set(6, v8::Integer::New(pIsolate, maybe_int.FromMaybe(0))); + } + return hReturnValue; +} + +v8::Local<v8::Object> GetGlobalObjectFromContext( + v8::Local<v8::Context> hContext) { + return hContext->Global()->GetPrototype().As<v8::Object>(); +} + } // namespace // Note, not in the anonymous namespace due to the friend call @@ -73,11 +115,6 @@ class CFXJSE_ScopeUtil_IsolateHandleContext { v8::Context::Scope m_cscope; }; -v8::Local<v8::Object> FXJSE_GetGlobalObjectFromContext( - v8::Local<v8::Context> hContext) { - return hContext->Global()->GetPrototype().As<v8::Object>(); -} - void FXJSE_UpdateObjectBinding(v8::Local<v8::Object>& hObject, CFXJSE_HostObject* lpNewBinding) { ASSERT(!hObject.IsEmpty()); @@ -115,43 +152,6 @@ CFXJSE_HostObject* FXJSE_RetrieveObjectBinding(v8::Local<v8::Object> hJSObject, hObject->GetAlignedPointerFromInternalField(1)); } -v8::Local<v8::Object> FXJSE_CreateReturnValue(v8::Isolate* pIsolate, - v8::TryCatch& trycatch) { - v8::Local<v8::Object> hReturnValue = v8::Object::New(pIsolate); - if (trycatch.HasCaught()) { - v8::Local<v8::Value> hException = trycatch.Exception(); - v8::Local<v8::Message> hMessage = trycatch.Message(); - if (hException->IsObject()) { - v8::Local<v8::Value> hValue; - hValue = hException.As<v8::Object>()->Get( - v8::String::NewFromUtf8(pIsolate, "name")); - if (hValue->IsString() || hValue->IsStringObject()) - hReturnValue->Set(0, hValue); - else - hReturnValue->Set(0, v8::String::NewFromUtf8(pIsolate, "Error")); - - hValue = hException.As<v8::Object>()->Get( - v8::String::NewFromUtf8(pIsolate, "message")); - if (hValue->IsString() || hValue->IsStringObject()) - hReturnValue->Set(1, hValue); - else - hReturnValue->Set(1, hMessage->Get()); - } else { - hReturnValue->Set(0, v8::String::NewFromUtf8(pIsolate, "Error")); - hReturnValue->Set(1, hMessage->Get()); - } - hReturnValue->Set(2, hException); - hReturnValue->Set(3, v8::Integer::New(pIsolate, hMessage->GetLineNumber())); - hReturnValue->Set(4, hMessage->GetSourceLine()); - v8::Maybe<int32_t> maybe_int = - hMessage->GetStartColumn(pIsolate->GetCurrentContext()); - hReturnValue->Set(5, v8::Integer::New(pIsolate, maybe_int.FromMaybe(0))); - maybe_int = hMessage->GetEndColumn(pIsolate->GetCurrentContext()); - hReturnValue->Set(6, v8::Integer::New(pIsolate, maybe_int.FromMaybe(0))); - } - return hReturnValue; -} - // static std::unique_ptr<CFXJSE_Context> CFXJSE_Context::Create( v8::Isolate* pIsolate, @@ -182,8 +182,7 @@ std::unique_ptr<CFXJSE_Context> CFXJSE_Context::Create( v8::Local<v8::Context> hRootContext = v8::Local<v8::Context>::New( pIsolate, CFXJSE_RuntimeData::Get(pIsolate)->m_hRootContext); hNewContext->SetSecurityToken(hRootContext->GetSecurityToken()); - v8::Local<v8::Object> hGlobalObject = - FXJSE_GetGlobalObjectFromContext(hNewContext); + v8::Local<v8::Object> hGlobalObject = GetGlobalObjectFromContext(hNewContext); FXJSE_UpdateObjectBinding(hGlobalObject, pGlobalObject); pContext->m_hContext.Reset(pIsolate, hNewContext); return pContext; @@ -198,8 +197,7 @@ std::unique_ptr<CFXJSE_Value> CFXJSE_Context::GetGlobalObject() { CFXJSE_ScopeUtil_IsolateHandleContext scope(this); v8::Local<v8::Context> hContext = v8::Local<v8::Context>::New(m_pIsolate, m_hContext); - v8::Local<v8::Object> hGlobalObject = - FXJSE_GetGlobalObjectFromContext(hContext); + v8::Local<v8::Object> hGlobalObject = GetGlobalObjectFromContext(hContext); pValue->ForceSetValue(hGlobalObject); return pValue; } @@ -245,7 +243,7 @@ bool CFXJSE_Context::ExecuteScript(const char* szScript, } if (lpRetValue) { lpRetValue->m_hValue.Reset(m_pIsolate, - FXJSE_CreateReturnValue(m_pIsolate, trycatch)); + CreateReturnValue(m_pIsolate, trycatch)); } return false; } @@ -270,7 +268,7 @@ bool CFXJSE_Context::ExecuteScript(const char* szScript, } if (lpRetValue) { lpRetValue->m_hValue.Reset(m_pIsolate, - FXJSE_CreateReturnValue(m_pIsolate, trycatch)); + CreateReturnValue(m_pIsolate, trycatch)); } return false; } |