Index: xfa/fxfa/parser/xfa_script_imp.cpp |
diff --git a/xfa/fxfa/parser/xfa_script_imp.cpp b/xfa/fxfa/parser/xfa_script_imp.cpp |
index e682c9ad8536b86c2cd063a34682acc267f45e0d..245ea8bca49c462d78960679f8ee5d961fb0f04b 100644 |
--- a/xfa/fxfa/parser/xfa_script_imp.cpp |
+++ b/xfa/fxfa/parser/xfa_script_imp.cpp |
@@ -18,6 +18,7 @@ |
#include "xfa/fxfa/parser/xfa_script_resolveprocessor.h" |
#include "xfa/fxfa/parser/xfa_utils.h" |
#include "xfa/fxjse/cfxjse_arguments.h" |
+#include "xfa/fxjse/class.h" |
#include "xfa/fxjse/value.h" |
namespace { |
@@ -104,11 +105,8 @@ CXFA_ScriptContext::~CXFA_ScriptContext() { |
ReleaseVariablesMap(); |
delete m_hFM2JSContext; |
+ delete m_pJsContext; |
- if (m_pJsContext) { |
- FXJSE_Context_Release(m_pJsContext); |
- m_pJsContext = NULL; |
- } |
delete m_pResolveProcessor; |
m_upObjectArray.RemoveAll(); |
for (int32_t i = 0; i < m_CacheListArray.GetSize(); i++) |
@@ -149,7 +147,7 @@ FX_BOOL CXFA_ScriptContext::RunScript(XFA_SCRIPTLANGTYPE eScriptType, |
m_pThisObject = pThisObject; |
CFXJSE_Value* pValue = pThisObject ? GetJSValueFromMap(pThisObject) : NULL; |
FX_BOOL bRet = |
- FXJSE_ExecuteScript(m_pJsContext, btScript.c_str(), hRetValue, pValue); |
+ m_pJsContext->ExecuteScript(btScript.c_str(), hRetValue, pValue); |
m_pThisObject = pOriginalObject; |
m_eScriptType = eSaveType; |
return bRet; |
@@ -174,7 +172,7 @@ void CXFA_ScriptContext::GlobalPropertySetter(CFXJSE_Value* pObject, |
return; |
} |
if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { |
- if (FXJSE_Value_IsUndefined(pValue)) { |
+ if (pValue && pValue->IsUndefined()) { |
pObject->SetObjectOwnProperty(szPropName, pValue); |
return; |
} |
@@ -422,10 +420,10 @@ XFA_SCRIPTLANGTYPE CXFA_ScriptContext::GetType() { |
return m_eScriptType; |
} |
void CXFA_ScriptContext::DefineJsContext() { |
- m_pJsContext = FXJSE_Context_Create(m_pIsolate, &GlobalClassDescriptor, |
- m_pDocument->GetRoot()); |
+ m_pJsContext = CFXJSE_Context::Create(m_pIsolate, &GlobalClassDescriptor, |
+ m_pDocument->GetRoot()); |
RemoveBuiltInObjs(m_pJsContext); |
- FXJSE_Context_EnableCompatibleMode(m_pJsContext); |
+ m_pJsContext->EnableCompatibleMode(); |
} |
CFXJSE_Context* CXFA_ScriptContext::CreateVariablesContext( |
CXFA_Node* pScriptNode, |
@@ -434,10 +432,10 @@ CFXJSE_Context* CXFA_ScriptContext::CreateVariablesContext( |
return nullptr; |
CFXJSE_Context* pVariablesContext = |
- FXJSE_Context_Create(m_pIsolate, &VariablesClassDescriptor, |
- new CXFA_ThisProxy(pSubform, pScriptNode)); |
+ CFXJSE_Context::Create(m_pIsolate, &VariablesClassDescriptor, |
+ new CXFA_ThisProxy(pSubform, pScriptNode)); |
RemoveBuiltInObjs(pVariablesContext); |
- FXJSE_Context_EnableCompatibleMode(pVariablesContext); |
+ pVariablesContext->EnableCompatibleMode(); |
m_mapVariableToContext.SetAt(pScriptNode, pVariablesContext); |
return pVariablesContext; |
} |
@@ -481,7 +479,7 @@ FX_BOOL CXFA_ScriptContext::RunVariablesScript(CXFA_Node* pScriptNode) { |
CXFA_Object* pOriginalObject = m_pThisObject; |
m_pThisObject = pThisObject; |
FX_BOOL bRet = |
- FXJSE_ExecuteScript(pVariablesContext, btScript.c_str(), hRetValue.get()); |
+ pVariablesContext->ExecuteScript(btScript.c_str(), hRetValue.get()); |
m_pThisObject = pOriginalObject; |
return bRet; |
} |
@@ -505,14 +503,16 @@ FX_BOOL CXFA_ScriptContext::QueryVariableValue( |
FX_BOOL bRes = FALSE; |
CFXJSE_Context* pVariableContext = static_cast<CFXJSE_Context*>(lpVariables); |
std::unique_ptr<CFXJSE_Value> pObject( |
- FXJSE_Context_GetGlobalObject(pVariableContext)); |
+ new CFXJSE_Value(pVariableContext->GetRuntime())); |
+ pVariableContext->GetGlobalObject(pObject.get()); |
+ |
std::unique_ptr<CFXJSE_Value> hVariableValue(new CFXJSE_Value(m_pIsolate)); |
if (!bGetter) { |
pObject->SetObjectOwnProperty(szPropName, pValue); |
bRes = TRUE; |
} else if (pObject->HasObjectOwnProperty(szPropName, FALSE)) { |
pObject->GetObjectProperty(szPropName, hVariableValue.get()); |
- if (FXJSE_Value_IsFunction(hVariableValue.get())) |
+ if (hVariableValue->IsFunction()) |
pValue->SetFunctionBind(hVariableValue.get(), pObject.get()); |
else if (bGetter) |
pValue->Assign(hVariableValue.get()); |
@@ -530,21 +530,25 @@ void CXFA_ScriptContext::ReleaseVariablesMap() { |
CFXJSE_Context* pVariableContext = nullptr; |
m_mapVariableToContext.GetNextAssoc(ps, pScriptNode, pVariableContext); |
std::unique_ptr<CFXJSE_Value> pObject( |
- FXJSE_Context_GetGlobalObject(pVariableContext)); |
+ new CFXJSE_Value(pVariableContext->GetRuntime())); |
+ pVariableContext->GetGlobalObject(pObject.get()); |
+ |
delete ToThisProxy(pObject.get(), nullptr); |
- FXJSE_Context_Release(pVariableContext); |
+ delete pVariableContext; |
} |
m_mapVariableToContext.RemoveAll(); |
} |
void CXFA_ScriptContext::DefineJsClass() { |
- m_pJsClass = FXJSE_DefineClass(m_pJsContext, &NormalClassDescriptor); |
+ m_pJsClass = CFXJSE_Class::Create(m_pJsContext, &NormalClassDescriptor); |
} |
void CXFA_ScriptContext::RemoveBuiltInObjs(CFXJSE_Context* pContext) const { |
static const CFX_ByteStringC OBJ_NAME[2] = {"Number", "Date"}; |
std::unique_ptr<CFXJSE_Value> pObject( |
- FXJSE_Context_GetGlobalObject(pContext)); |
+ new CFXJSE_Value(pContext->GetRuntime())); |
+ pContext->GetGlobalObject(pObject.get()); |
+ |
std::unique_ptr<CFXJSE_Value> hProp(new CFXJSE_Value(m_pIsolate)); |
for (int i = 0; i < 2; ++i) { |
if (pObject->GetObjectProperty(OBJ_NAME[i], hProp.get())) |