diff options
-rw-r--r-- | fxjs/cfxjse_formcalc_context.cpp | 4 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmexpression.cpp | 160 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmexpression.h | 26 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp | 16 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp | 203 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h | 28 | ||||
-rw-r--r-- | xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp | 13 |
7 files changed, 226 insertions, 224 deletions
diff --git a/fxjs/cfxjse_formcalc_context.cpp b/fxjs/cfxjse_formcalc_context.cpp index a6d151b468..6a938a5da7 100644 --- a/fxjs/cfxjse_formcalc_context.cpp +++ b/fxjs/cfxjse_formcalc_context.cpp @@ -6185,12 +6185,12 @@ bool CFXJSE_FormCalcContext::Translate(const WideStringView& wsFormcalc, return false; CXFA_FMToJavaScriptDepth::Reset(); - if (!ast->ToJavaScript(*wsJavascript)) + if (!ast->ToJavaScript(wsJavascript)) return false; wsJavascript->AppendChar(0); - return !CXFA_IsTooBig(*wsJavascript); + return !CXFA_IsTooBig(wsJavascript); } CFXJSE_FormCalcContext::CFXJSE_FormCalcContext(v8::Isolate* pScriptIsolate, diff --git a/xfa/fxfa/fm2js/cxfa_fmexpression.cpp b/xfa/fxfa/fm2js/cxfa_fmexpression.cpp index ef2153d6be..9ff043a1ab 100644 --- a/xfa/fxfa/fm2js/cxfa_fmexpression.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmexpression.cpp @@ -44,7 +44,7 @@ CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition( CXFA_FMFunctionDefinition::~CXFA_FMFunctionDefinition() = default; -bool CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) @@ -53,16 +53,16 @@ bool CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& js, if (m_wsName.IsEmpty()) return false; - js << L"function " << IdentifierToName(m_wsName) << L"("; + *js << L"function " << IdentifierToName(m_wsName) << L"("; for (const auto& identifier : m_pArguments) { if (identifier != m_pArguments.front()) - js << L", "; + *js << L", "; - js << IdentifierToName(identifier); + *js << IdentifierToName(identifier); } - js << L") {\n"; + *js << L") {\n"; - js << L"var pfm_ret = null;\n"; + *js << L"var pfm_ret = null;\n"; for (const auto& expr : m_pExpressions) { ReturnType ret_type = expr == m_pExpressions.back() ? ReturnType::kImplied : ReturnType::kInfered; @@ -70,8 +70,8 @@ bool CXFA_FMFunctionDefinition::ToJavaScript(CFX_WideTextBuf& js, return false; } - js << L"return pfm_ret;\n"; - js << L"}\n"; + *js << L"return pfm_ret;\n"; + *js << L"}\n"; return !CXFA_IsTooBig(js); } @@ -82,24 +82,24 @@ CXFA_FMAST::CXFA_FMAST( CXFA_FMAST::~CXFA_FMAST() = default; -bool CXFA_FMAST::ToJavaScript(CFX_WideTextBuf& js) { +bool CXFA_FMAST::ToJavaScript(CFX_WideTextBuf* js) { if (expressions_.empty()) { - js << L"// comments only"; + *js << L"// comments only"; return !CXFA_IsTooBig(js); } - js << L"(function() {\n"; - js << L"let pfm_method_runner = function(obj, cb) {\n"; - js << L" if (pfm_rt.is_ary(obj)) {\n"; - js << L" let pfm_method_return = null;\n"; - js << L" for (var idx = obj.length -1; idx > 1; idx--) {\n"; - js << L" pfm_method_return = cb(obj[idx]);\n"; - js << L" }\n"; - js << L" return pfm_method_return;\n"; - js << L" }\n"; - js << L" return cb(obj);\n"; - js << L"};\n"; - js << L"var pfm_ret = null;\n"; + *js << L"(function() {\n"; + *js << L"let pfm_method_runner = function(obj, cb) {\n"; + *js << L" if (pfm_rt.is_ary(obj)) {\n"; + *js << L" let pfm_method_return = null;\n"; + *js << L" for (var idx = obj.length -1; idx > 1; idx--) {\n"; + *js << L" pfm_method_return = cb(obj[idx]);\n"; + *js << L" }\n"; + *js << L" return pfm_method_return;\n"; + *js << L" }\n"; + *js << L" return cb(obj);\n"; + *js << L"};\n"; + *js << L"var pfm_ret = null;\n"; for (const auto& expr : expressions_) { ReturnType ret_type = expr == expressions_.back() ? ReturnType::kImplied @@ -108,8 +108,8 @@ bool CXFA_FMAST::ToJavaScript(CFX_WideTextBuf& js) { return false; } - js << L"return pfm_rt.get_val(pfm_ret);\n"; - js << L"}).call(this);"; + *js << L"return pfm_rt.get_val(pfm_ret);\n"; + *js << L"}).call(this);"; return !CXFA_IsTooBig(js); } @@ -120,24 +120,24 @@ CXFA_FMVarExpression::CXFA_FMVarExpression( CXFA_FMVarExpression::~CXFA_FMVarExpression() = default; -bool CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; WideString tempName = IdentifierToName(m_wsName); - js << L"var " << tempName << L" = "; + *js << L"var " << tempName << L" = "; if (m_pInit) { if (!m_pInit->ToJavaScript(js, ReturnType::kInfered)) return false; - js << tempName << L" = pfm_rt.var_filter(" << tempName << L");\n"; + *js << tempName << L" = pfm_rt.var_filter(" << tempName << L");\n"; } else { - js << L"\"\";\n"; + *js << L"\"\";\n"; } if (type == ReturnType::kImplied) - js << L"pfm_ret = " << tempName << L";\n"; + *js << L"pfm_ret = " << tempName << L";\n"; return !CXFA_IsTooBig(js); } @@ -148,7 +148,7 @@ CXFA_FMExpExpression::CXFA_FMExpExpression( CXFA_FMExpExpression::~CXFA_FMExpExpression() = default; -bool CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; @@ -156,7 +156,7 @@ bool CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { if (type == ReturnType::kInfered) { bool ret = m_pExpression->ToJavaScript(js, ReturnType::kInfered); if (m_pExpression->GetOperatorToken() != TOKassign) - js << L";\n"; + *js << L";\n"; return ret; } @@ -169,19 +169,19 @@ bool CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { m_pExpression->GetOperatorToken() == TOKdotscream || m_pExpression->GetOperatorToken() == TOKdotdot || m_pExpression->GetOperatorToken() == TOKdot) { - js << L"pfm_ret = pfm_rt.get_val("; + *js << L"pfm_ret = pfm_rt.get_val("; if (!m_pExpression->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L");\n"; + *js << L");\n"; return !CXFA_IsTooBig(js); } - js << L"pfm_ret = "; + *js << L"pfm_ret = "; if (!m_pExpression->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L";\n"; + *js << L";\n"; return !CXFA_IsTooBig(js); } @@ -191,13 +191,13 @@ CXFA_FMBlockExpression::CXFA_FMBlockExpression( CXFA_FMBlockExpression::~CXFA_FMBlockExpression() = default; -bool CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"{\n"; + *js << L"{\n"; for (const auto& expr : m_ExpressionList) { if (type == ReturnType::kInfered) { if (!expr->ToJavaScript(js, ReturnType::kInfered)) @@ -210,7 +210,7 @@ bool CXFA_FMBlockExpression::ToJavaScript(CFX_WideTextBuf& js, return false; } } - js << L"}\n"; + *js << L"}\n"; return !CXFA_IsTooBig(js); } @@ -221,7 +221,7 @@ CXFA_FMDoExpression::CXFA_FMDoExpression( CXFA_FMDoExpression::~CXFA_FMDoExpression() = default; -bool CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; @@ -244,18 +244,18 @@ CXFA_FMIfExpression::CXFA_FMIfExpression( CXFA_FMIfExpression::~CXFA_FMIfExpression() = default; -bool CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; if (type == ReturnType::kImplied) - js << L"pfm_ret = 0;\n"; + *js << L"pfm_ret = 0;\n"; - js << L"if (pfm_rt.get_val("; + *js << L"if (pfm_rt.get_val("; if (!m_pExpression->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L"))\n"; + *js << L"))\n"; if (CXFA_IsTooBig(js)) return false; @@ -268,13 +268,13 @@ bool CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { } for (auto& expr : m_pElseIfExpressions) { - js << L"else "; + *js << L"else "; if (!expr->ToJavaScript(js, ReturnType::kInfered)) return false; } if (m_pElseExpression) { - js << L"else "; + *js << L"else "; if (!m_pElseExpression->ToJavaScript(js, type)) return false; } @@ -290,20 +290,20 @@ CXFA_FMWhileExpression::CXFA_FMWhileExpression( CXFA_FMWhileExpression::~CXFA_FMWhileExpression() = default; -bool CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; if (type == ReturnType::kImplied) - js << L"pfm_ret = 0;\n"; + *js << L"pfm_ret = 0;\n"; - js << L"while ("; + *js << L"while ("; if (!m_pCondition->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")\n"; + *js << L")\n"; if (CXFA_IsTooBig(js)) return false; @@ -317,13 +317,13 @@ CXFA_FMBreakExpression::CXFA_FMBreakExpression() : CXFA_FMExpression() {} CXFA_FMBreakExpression::~CXFA_FMBreakExpression() = default; -bool CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMBreakExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"pfm_ret = 0;\nbreak;\n"; + *js << L"pfm_ret = 0;\nbreak;\n"; return !CXFA_IsTooBig(js); } @@ -331,13 +331,13 @@ CXFA_FMContinueExpression::CXFA_FMContinueExpression() : CXFA_FMExpression() {} CXFA_FMContinueExpression::~CXFA_FMContinueExpression() = default; -bool CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMContinueExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"pfm_ret = 0;\ncontinue;\n"; + *js << L"pfm_ret = 0;\ncontinue;\n"; return !CXFA_IsTooBig(js); } @@ -358,47 +358,47 @@ CXFA_FMForExpression::CXFA_FMForExpression( CXFA_FMForExpression::~CXFA_FMForExpression() = default; -bool CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; if (type == ReturnType::kImplied) - js << L"pfm_ret = 0;\n"; + *js << L"pfm_ret = 0;\n"; - js << L"{\n"; + *js << L"{\n"; WideString tmpName = IdentifierToName(m_wsVariant); - js << L"var " << tmpName << L" = null;\n"; + *js << L"var " << tmpName << L" = null;\n"; - js << L"for (" << tmpName << L" = pfm_rt.get_val("; + *js << L"for (" << tmpName << L" = pfm_rt.get_val("; if (!m_pAssignment->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L"); "; + *js << L"); "; - js << tmpName << (m_bDirection ? kLessEqual : kGreaterEqual); - js << L"pfm_rt.get_val("; + *js << tmpName << (m_bDirection ? kLessEqual : kGreaterEqual); + *js << L"pfm_rt.get_val("; if (!m_pAccessor->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L"); "; + *js << L"); "; - js << tmpName << (m_bDirection ? kPlusEqual : kMinusEqual); + *js << tmpName << (m_bDirection ? kPlusEqual : kMinusEqual); if (m_pStep) { - js << L"pfm_rt.get_val("; + *js << L"pfm_rt.get_val("; if (!m_pStep->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; } else { - js << L"1"; + *js << L"1"; } - js << L")\n"; + *js << L")\n"; if (CXFA_IsTooBig(js)) return false; if (!m_pList->ToJavaScript(js, type)) return false; - js << L"}\n"; + *js << L"}\n"; return !CXFA_IsTooBig(js); } @@ -413,35 +413,35 @@ CXFA_FMForeachExpression::CXFA_FMForeachExpression( CXFA_FMForeachExpression::~CXFA_FMForeachExpression() = default; -bool CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; if (type == ReturnType::kImplied) - js << L"pfm_ret = 0;\n"; + *js << L"pfm_ret = 0;\n"; - js << L"{\n"; + *js << L"{\n"; WideString tmpName = IdentifierToName(m_wsIdentifier); - js << L"var " << tmpName << L" = null;\n"; - js << L"var pfm_ary = pfm_rt.concat_obj("; + *js << L"var " << tmpName << L" = null;\n"; + *js << L"var pfm_ary = pfm_rt.concat_obj("; for (const auto& expr : m_pAccessors) { if (!expr->ToJavaScript(js, ReturnType::kInfered)) return false; if (expr != m_pAccessors.back()) - js << L", "; + *js << L", "; } - js << L");\n"; + *js << L");\n"; - js << L"var pfm_ary_idx = 0;\n"; - js << L"while(pfm_ary_idx < pfm_ary.length)\n{\n"; - js << tmpName << L" = pfm_ary[pfm_ary_idx++];\n"; + *js << L"var pfm_ary_idx = 0;\n"; + *js << L"while(pfm_ary_idx < pfm_ary.length)\n{\n"; + *js << tmpName << L" = pfm_ary[pfm_ary_idx++];\n"; if (!m_pList->ToJavaScript(js, type)) return false; - js << L"}\n"; // while + *js << L"}\n"; // while - js << L"}\n"; // block + *js << L"}\n"; // block return !CXFA_IsTooBig(js); } diff --git a/xfa/fxfa/fm2js/cxfa_fmexpression.h b/xfa/fxfa/fm2js/cxfa_fmexpression.h index 32cbf96c95..bff62c185b 100644 --- a/xfa/fxfa/fm2js/cxfa_fmexpression.h +++ b/xfa/fxfa/fm2js/cxfa_fmexpression.h @@ -17,7 +17,7 @@ class CFX_WideTextBuf; class CXFA_FMExpression { public: virtual ~CXFA_FMExpression() {} - virtual bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) = 0; + virtual bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) = 0; protected: CXFA_FMExpression(); @@ -31,7 +31,7 @@ class CXFA_FMFunctionDefinition : public CXFA_FMExpression { std::vector<std::unique_ptr<CXFA_FMExpression>>&& expressions); ~CXFA_FMFunctionDefinition() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsName; @@ -45,7 +45,7 @@ class CXFA_FMAST { std::vector<std::unique_ptr<CXFA_FMExpression>> expressions); ~CXFA_FMAST(); - bool ToJavaScript(CFX_WideTextBuf& javascript); + bool ToJavaScript(CFX_WideTextBuf* js); private: std::vector<std::unique_ptr<CXFA_FMExpression>> expressions_; @@ -57,7 +57,7 @@ class CXFA_FMVarExpression : public CXFA_FMExpression { std::unique_ptr<CXFA_FMSimpleExpression> pInit); ~CXFA_FMVarExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsName; @@ -70,7 +70,7 @@ class CXFA_FMExpExpression : public CXFA_FMExpression { std::unique_ptr<CXFA_FMSimpleExpression> pExpression); ~CXFA_FMExpExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression; @@ -82,7 +82,7 @@ class CXFA_FMBlockExpression : public CXFA_FMExpression { std::vector<std::unique_ptr<CXFA_FMExpression>>&& pExpressionList); ~CXFA_FMBlockExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::vector<std::unique_ptr<CXFA_FMExpression>> m_ExpressionList; @@ -93,7 +93,7 @@ class CXFA_FMDoExpression : public CXFA_FMExpression { explicit CXFA_FMDoExpression(std::unique_ptr<CXFA_FMExpression> pList); ~CXFA_FMDoExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMExpression> m_pList; @@ -108,7 +108,7 @@ class CXFA_FMIfExpression : public CXFA_FMExpression { std::unique_ptr<CXFA_FMExpression> pElseExpression); ~CXFA_FMIfExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pExpression; @@ -123,7 +123,7 @@ class CXFA_FMWhileExpression : public CXFA_FMExpression { std::unique_ptr<CXFA_FMExpression> pExpression); ~CXFA_FMWhileExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pCondition; @@ -135,7 +135,7 @@ class CXFA_FMBreakExpression : public CXFA_FMExpression { CXFA_FMBreakExpression(); ~CXFA_FMBreakExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; }; class CXFA_FMContinueExpression : public CXFA_FMExpression { @@ -143,7 +143,7 @@ class CXFA_FMContinueExpression : public CXFA_FMExpression { CXFA_FMContinueExpression(); ~CXFA_FMContinueExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; }; class CXFA_FMForExpression : public CXFA_FMExpression { @@ -156,7 +156,7 @@ class CXFA_FMForExpression : public CXFA_FMExpression { std::unique_ptr<CXFA_FMExpression> pList); ~CXFA_FMForExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsVariant; @@ -176,7 +176,7 @@ class CXFA_FMForeachExpression : public CXFA_FMExpression { std::unique_ptr<CXFA_FMExpression> pList); ~CXFA_FMForeachExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsIdentifier; diff --git a/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp b/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp index 81fae08384..9a9db21875 100644 --- a/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp @@ -20,7 +20,7 @@ TEST(CXFA_FMParserTest, Empty) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); // TODO(dsinclair): This is a little weird ..... EXPECT_EQ(L"// comments only", buf.AsStringView()); } @@ -35,7 +35,7 @@ TEST(CXFA_FMParserTest, CommentOnlyIsError) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(L"// comments only", buf.AsStringView()); } @@ -64,7 +64,7 @@ TEST(CXFA_FMParserTest, CommentThenValue) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(ret, buf.AsStringView()); } @@ -143,7 +143,7 @@ TEST(CXFA_FMParserTest, Parse) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(ret, buf.AsStringView()); } @@ -205,7 +205,7 @@ TEST(CXFA_FMParserTest, ParseFuncWithParams) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(ret, buf.AsStringView()); } @@ -243,7 +243,7 @@ TEST(CXFA_FMParserTest, ParseFuncWithoutParams) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(ret, buf.AsStringView()); } @@ -327,7 +327,7 @@ TEST(CXFA_FMParserTest, ParseCallSmall) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(ret, buf.AsStringView()); } @@ -368,6 +368,6 @@ TEST(CXFA_FMParserTest, ParseCallBig) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf buf; - EXPECT_TRUE(ast->ToJavaScript(buf)); + EXPECT_TRUE(ast->ToJavaScript(&buf)); EXPECT_EQ(ret, buf.AsStringView()); } diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp index e34d4ba127..63d3d6a23b 100644 --- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp @@ -80,12 +80,12 @@ XFA_FM_TOKEN CXFA_FMSimpleExpression::GetOperatorToken() const { CXFA_FMNullExpression::CXFA_FMNullExpression() : CXFA_FMSimpleExpression(TOKnull) {} -bool CXFA_FMNullExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMNullExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"null"; + *js << L"null"; return !CXFA_IsTooBig(js); } @@ -94,13 +94,13 @@ CXFA_FMNumberExpression::CXFA_FMNumberExpression(WideStringView wsNumber) CXFA_FMNumberExpression::~CXFA_FMNumberExpression() = default; -bool CXFA_FMNumberExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMNumberExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << m_wsNumber; + *js << m_wsNumber; return !CXFA_IsTooBig(js); } @@ -109,7 +109,7 @@ CXFA_FMStringExpression::CXFA_FMStringExpression(WideStringView wsString) CXFA_FMStringExpression::~CXFA_FMStringExpression() = default; -bool CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) @@ -117,29 +117,29 @@ bool CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& js, WideString tempStr(m_wsString); if (tempStr.GetLength() <= 2) { - js << tempStr; + *js << tempStr; return !CXFA_IsTooBig(js); } - js << L"\""; + *js << L"\""; for (size_t i = 1; i < tempStr.GetLength() - 1; i++) { wchar_t oneChar = tempStr[i]; switch (oneChar) { case L'\"': ++i; - js << L"\\\""; + *js << L"\\\""; break; case 0x0d: break; case 0x0a: - js << L"\\n"; + *js << L"\\n"; break; default: - js.AppendChar(oneChar); + js->AppendChar(oneChar); break; } } - js << L"\""; + *js << L"\""; return !CXFA_IsTooBig(js); } @@ -149,32 +149,33 @@ CXFA_FMIdentifierExpression::CXFA_FMIdentifierExpression( CXFA_FMIdentifierExpression::~CXFA_FMIdentifierExpression() = default; -bool CXFA_FMIdentifierExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMIdentifierExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; if (m_wsIdentifier == L"$") - js << L"this"; + *js << L"this"; else if (m_wsIdentifier == L"!") - js << L"xfa.datasets"; + *js << L"xfa.datasets"; else if (m_wsIdentifier == L"$data") - js << L"xfa.datasets.data"; + *js << L"xfa.datasets.data"; else if (m_wsIdentifier == L"$event") - js << L"xfa.event"; + *js << L"xfa.event"; else if (m_wsIdentifier == L"$form") - js << L"xfa.form"; + *js << L"xfa.form"; else if (m_wsIdentifier == L"$host") - js << L"xfa.host"; + *js << L"xfa.host"; else if (m_wsIdentifier == L"$layout") - js << L"xfa.layout"; + *js << L"xfa.layout"; else if (m_wsIdentifier == L"$template") - js << L"xfa.template"; + *js << L"xfa.template"; else if (m_wsIdentifier[0] == L'!') - js << L"pfm__excl__" + m_wsIdentifier.Right(m_wsIdentifier.GetLength() - 1); + *js << L"pfm__excl__" + + m_wsIdentifier.Right(m_wsIdentifier.GetLength() - 1); else - js << m_wsIdentifier; + *js << m_wsIdentifier; return !CXFA_IsTooBig(js); } @@ -189,35 +190,35 @@ CXFA_FMAssignExpression::CXFA_FMAssignExpression( CXFA_FMAssignExpression::~CXFA_FMAssignExpression() = default; -bool CXFA_FMAssignExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMAssignExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; CFX_WideTextBuf tempExp1; - if (!m_pExp1->ToJavaScript(tempExp1, ReturnType::kInfered)) + if (!m_pExp1->ToJavaScript(&tempExp1, ReturnType::kInfered)) return false; - js << L"if (pfm_rt.is_obj(" << tempExp1 << L"))\n{\n"; + *js << L"if (pfm_rt.is_obj(" << tempExp1 << L"))\n{\n"; if (type == ReturnType::kImplied) - js << L"pfm_ret = "; + *js << L"pfm_ret = "; CFX_WideTextBuf tempExp2; - if (!m_pExp2->ToJavaScript(tempExp2, ReturnType::kInfered)) + if (!m_pExp2->ToJavaScript(&tempExp2, ReturnType::kInfered)) return false; - js << L"pfm_rt.asgn_val_op(" << tempExp1 << L", " << tempExp2 << L");\n}\n"; + *js << L"pfm_rt.asgn_val_op(" << tempExp1 << L", " << tempExp2 << L");\n}\n"; if (m_pExp1->GetOperatorToken() == TOKidentifier && tempExp1.AsStringView() != L"this") { - js << L"else\n{\n"; + *js << L"else\n{\n"; if (type == ReturnType::kImplied) - js << L"pfm_ret = "; + *js << L"pfm_ret = "; - js << tempExp1 << L" = pfm_rt.asgn_val_op"; - js << L"(" << tempExp1 << L", " << tempExp2 << L");\n"; - js << L"}\n"; + *js << tempExp1 << L" = pfm_rt.asgn_val_op"; + *js << L"(" << tempExp1 << L", " << tempExp2 << L");\n"; + *js << L"}\n"; } return !CXFA_IsTooBig(js); } @@ -234,18 +235,18 @@ CXFA_FMBinExpression::CXFA_FMBinExpression( CXFA_FMBinExpression::~CXFA_FMBinExpression() = default; -bool CXFA_FMBinExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMBinExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"pfm_rt." << m_OpName << L"("; + *js << L"pfm_rt." << m_OpName << L"("; if (!m_pExp1->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L", "; + *js << L", "; if (!m_pExp2->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; return !CXFA_IsTooBig(js); } @@ -365,16 +366,16 @@ CXFA_FMUnaryExpression::CXFA_FMUnaryExpression( CXFA_FMUnaryExpression::~CXFA_FMUnaryExpression() = default; -bool CXFA_FMUnaryExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMUnaryExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"pfm_rt." << m_OpName.c_str() << L"("; + *js << L"pfm_rt." << m_OpName.c_str() << L"("; if (!m_pExp->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; return !CXFA_IsTooBig(js); } @@ -434,47 +435,47 @@ uint32_t CXFA_FMCallExpression::IsMethodWithObjParam( return 0; } -bool CXFA_FMCallExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { +bool CXFA_FMCallExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; CFX_WideTextBuf funcName; - if (!m_pExp->ToJavaScript(funcName, ReturnType::kInfered)) + if (!m_pExp->ToJavaScript(&funcName, ReturnType::kInfered)) return false; if (m_bIsSomMethod) { - js << funcName << L"("; + *js << funcName << L"("; uint32_t methodPara = IsMethodWithObjParam(funcName.MakeString()); if (methodPara > 0) { for (size_t i = 0; i < m_Arguments.size(); ++i) { // Currently none of our expressions use objects for a parameter over // the 6th. Make sure we don't overflow the shift when doing this // check. If we ever need more the 32 object params we can revisit. - js << L"pfm_rt.get_"; + *js << L"pfm_rt.get_"; if (i < 32 && (methodPara & (0x01 << i)) > 0) - js << L"jsobj"; + *js << L"jsobj"; else - js << L"val"; + *js << L"val"; - js << L"("; + *js << L"("; if (!m_Arguments[i]->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; if (i + 1 < m_Arguments.size()) - js << L", "; + *js << L", "; } } else { for (const auto& expr : m_Arguments) { - js << L"pfm_rt.get_val("; + *js << L"pfm_rt.get_val("; if (!expr->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; if (expr != m_Arguments.back()) - js << L", "; + *js << L", "; } } - js << L")"; + *js << L")"; return !CXFA_IsTooBig(js); } @@ -490,38 +491,38 @@ bool CXFA_FMCallExpression::ToJavaScript(CFX_WideTextBuf& js, ReturnType type) { if (funcName.AsStringView() == L"Eval") { isEvalFunc = true; - js << L"eval.call(this, pfm_rt.Translate"; + *js << L"eval.call(this, pfm_rt.Translate"; } else { if (funcName.AsStringView() == L"Exists") isExistsFunc = true; - js << L"pfm_rt." << funcName; + *js << L"pfm_rt." << funcName; } - js << L"("; + *js << L"("; if (isExistsFunc) { - js << L"\n(\nfunction ()\n{\ntry\n{\n"; + *js << L"\n(\nfunction ()\n{\ntry\n{\n"; if (!m_Arguments.empty()) { - js << L"return "; + *js << L"return "; if (!m_Arguments[0]->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L";\n}\n"; + *js << L";\n}\n"; } else { - js << L"return 0;\n}\n"; + *js << L"return 0;\n}\n"; } - js << L"catch(accessExceptions)\n"; - js << L"{\nreturn 0;\n}\n}\n).call(this)\n"; + *js << L"catch(accessExceptions)\n"; + *js << L"{\nreturn 0;\n}\n}\n).call(this)\n"; } else { for (const auto& expr : m_Arguments) { if (!expr->ToJavaScript(js, ReturnType::kInfered)) return false; if (expr != m_Arguments.back()) - js << L", "; + *js << L", "; } } - js << L")"; + *js << L")"; if (isEvalFunc) - js << L")"; + *js << L")"; return !CXFA_IsTooBig(js); } @@ -538,42 +539,42 @@ CXFA_FMDotAccessorExpression::CXFA_FMDotAccessorExpression( CXFA_FMDotAccessorExpression::~CXFA_FMDotAccessorExpression() = default; -bool CXFA_FMDotAccessorExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMDotAccessorExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"pfm_rt.dot_acc("; + *js << L"pfm_rt.dot_acc("; CFX_WideTextBuf tempExp1; if (m_pExp1) { - if (!m_pExp1->ToJavaScript(tempExp1, ReturnType::kInfered)) + if (!m_pExp1->ToJavaScript(&tempExp1, ReturnType::kInfered)) return false; - js << tempExp1; + *js << tempExp1; } else { - js << L"null"; + *js << L"null"; } - js << L", \""; + *js << L", \""; if (m_pExp1 && m_pExp1->GetOperatorToken() == TOKidentifier) - js << tempExp1; + *js << tempExp1; - js << L"\", "; + *js << L"\", "; if (m_op == TOKdotscream) - js << L"\"#" << m_wsIdentifier << L"\", "; + *js << L"\"#" << m_wsIdentifier << L"\", "; else if (m_op == TOKdotstar) - js << L"\"*\", "; + *js << L"\"*\", "; else if (m_op == TOKcall) - js << L"\"\", "; + *js << L"\"\", "; else - js << L"\"" << m_wsIdentifier << L"\", "; + *js << L"\"" << m_wsIdentifier << L"\", "; if (!m_pExp2->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; return !CXFA_IsTooBig(js); } @@ -588,7 +589,7 @@ CXFA_FMIndexExpression::CXFA_FMIndexExpression( CXFA_FMIndexExpression::~CXFA_FMIndexExpression() = default; -bool CXFA_FMIndexExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMIndexExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) @@ -596,29 +597,29 @@ bool CXFA_FMIndexExpression::ToJavaScript(CFX_WideTextBuf& js, switch (m_accessorIndex) { case ACCESSOR_NO_INDEX: - js << L"0"; + *js << L"0"; break; case ACCESSOR_NO_RELATIVEINDEX: - js << L"1"; + *js << L"1"; break; case ACCESSOR_POSITIVE_INDEX: - js << L"2"; + *js << L"2"; break; case ACCESSOR_NEGATIVE_INDEX: - js << L"3"; + *js << L"3"; break; default: - js << L"0"; + *js << L"0"; } if (m_bIsStarIndex) return !CXFA_IsTooBig(js); - js << L", "; + *js << L", "; if (m_pExp) { if (!m_pExp->ToJavaScript(js, ReturnType::kInfered)) return false; } else { - js << L"0"; + *js << L"0"; } return !CXFA_IsTooBig(js); } @@ -635,25 +636,25 @@ CXFA_FMDotDotAccessorExpression::CXFA_FMDotDotAccessorExpression( CXFA_FMDotDotAccessorExpression::~CXFA_FMDotDotAccessorExpression() = default; -bool CXFA_FMDotDotAccessorExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMDotDotAccessorExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; - js << L"pfm_rt.dotdot_acc("; + *js << L"pfm_rt.dotdot_acc("; if (!m_pExp1->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L", " << L"\""; + *js << L", " << L"\""; if (m_pExp1->GetOperatorToken() == TOKidentifier) { if (!m_pExp1->ToJavaScript(js, ReturnType::kInfered)) return false; } - js << L"\", \"" << m_wsIdentifier << L"\", "; + *js << L"\", \"" << m_wsIdentifier << L"\", "; if (!m_pExp2->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L")"; + *js << L")"; return !CXFA_IsTooBig(js); } @@ -666,27 +667,27 @@ CXFA_FMMethodCallExpression::CXFA_FMMethodCallExpression( CXFA_FMMethodCallExpression::~CXFA_FMMethodCallExpression() = default; -bool CXFA_FMMethodCallExpression::ToJavaScript(CFX_WideTextBuf& js, +bool CXFA_FMMethodCallExpression::ToJavaScript(CFX_WideTextBuf* js, ReturnType type) { CXFA_FMToJavaScriptDepth depthManager; if (CXFA_IsTooBig(js) || !depthManager.IsWithinMaxDepth()) return false; CFX_WideTextBuf buf; - if (!m_pExp1->ToJavaScript(buf, ReturnType::kInfered)) + if (!m_pExp1->ToJavaScript(&buf, ReturnType::kInfered)) return false; - js << L"(function() {\n"; - js << L" return pfm_method_runner(" << buf << L", function(obj) {\n"; - js << L" return obj."; + *js << L"(function() {\n"; + *js << L" return pfm_method_runner(" << buf << L", function(obj) {\n"; + *js << L" return obj."; if (!m_pExp2->ToJavaScript(js, ReturnType::kInfered)) return false; - js << L";\n"; - js << L" });\n"; - js << L"}).call(this)"; + *js << L";\n"; + *js << L" });\n"; + *js << L"}).call(this)"; return !CXFA_IsTooBig(js); } -bool CXFA_IsTooBig(const CFX_WideTextBuf& javascript) { - return javascript.GetSize() >= 256 * 1024 * 1024; +bool CXFA_IsTooBig(const CFX_WideTextBuf* js) { + return js->GetSize() >= 256 * 1024 * 1024; } diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h index ede48ec2b6..0f3df31081 100644 --- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h +++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h @@ -26,7 +26,7 @@ class CFX_WideTextBuf; class CXFA_FMSimpleExpression { public: virtual ~CXFA_FMSimpleExpression() {} - virtual bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) = 0; + virtual bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) = 0; XFA_FM_TOKEN GetOperatorToken() const; @@ -41,7 +41,7 @@ class CXFA_FMNullExpression : public CXFA_FMSimpleExpression { CXFA_FMNullExpression(); ~CXFA_FMNullExpression() override {} - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; }; class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression { @@ -49,7 +49,7 @@ class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression { explicit CXFA_FMNumberExpression(WideStringView wsNumber); ~CXFA_FMNumberExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsNumber; @@ -60,7 +60,7 @@ class CXFA_FMStringExpression : public CXFA_FMSimpleExpression { explicit CXFA_FMStringExpression(WideStringView wsString); ~CXFA_FMStringExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsString; @@ -71,7 +71,7 @@ class CXFA_FMIdentifierExpression : public CXFA_FMSimpleExpression { explicit CXFA_FMIdentifierExpression(WideStringView wsIdentifier); ~CXFA_FMIdentifierExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsIdentifier; @@ -84,7 +84,7 @@ class CXFA_FMAssignExpression : public CXFA_FMSimpleExpression { std::unique_ptr<CXFA_FMSimpleExpression> pExp2); ~CXFA_FMAssignExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pExp1; @@ -95,7 +95,7 @@ class CXFA_FMBinExpression : public CXFA_FMSimpleExpression { public: ~CXFA_FMBinExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; protected: CXFA_FMBinExpression(const WideString& opName, @@ -209,7 +209,7 @@ class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression { public: ~CXFA_FMUnaryExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; protected: CXFA_FMUnaryExpression(const WideString& opName, @@ -249,7 +249,7 @@ class CXFA_FMCallExpression : public CXFA_FMSimpleExpression { bool IsBuiltInFunc(CFX_WideTextBuf* funcName); uint32_t IsMethodWithObjParam(const WideString& methodName); - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pExp; @@ -266,7 +266,7 @@ class CXFA_FMDotAccessorExpression : public CXFA_FMSimpleExpression { std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp); ~CXFA_FMDotAccessorExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsIdentifier; @@ -281,7 +281,7 @@ class CXFA_FMIndexExpression : public CXFA_FMSimpleExpression { bool bIsStarIndex); ~CXFA_FMIndexExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pExp; @@ -298,7 +298,7 @@ class CXFA_FMDotDotAccessorExpression : public CXFA_FMSimpleExpression { std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp); ~CXFA_FMDotDotAccessorExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: WideStringView m_wsIdentifier; @@ -313,13 +313,13 @@ class CXFA_FMMethodCallExpression : public CXFA_FMSimpleExpression { std::unique_ptr<CXFA_FMSimpleExpression> pCallExp); ~CXFA_FMMethodCallExpression() override; - bool ToJavaScript(CFX_WideTextBuf& javascript, ReturnType type) override; + bool ToJavaScript(CFX_WideTextBuf* js, ReturnType type) override; private: std::unique_ptr<CXFA_FMSimpleExpression> m_pExp1; std::unique_ptr<CXFA_FMSimpleExpression> m_pExp2; }; -bool CXFA_IsTooBig(const CFX_WideTextBuf& javascript); +bool CXFA_IsTooBig(const CFX_WideTextBuf* js); #endif // XFA_FXFA_FM2JS_CXFA_FMSIMPLEEXPRESSION_H_ diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp index 3ff2b411f9..e5f78aaa56 100644 --- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp @@ -27,7 +27,7 @@ TEST(FMCallExpressionTest, more_than_32_arguments) { CXFA_FMCallExpression callExp(std::move(exp), std::move(args), true); CFX_WideTextBuf js; - callExp.ToJavaScript(js, ReturnType::kInfered); + callExp.ToJavaScript(&js, ReturnType::kInfered); // Generate the result javascript string. WideString result = L"sign("; @@ -50,21 +50,22 @@ TEST(FMCallExpressionTest, more_than_32_arguments) { TEST(FMStringExpressionTest, Empty) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf accumulator; - CXFA_FMStringExpression(L"").ToJavaScript(accumulator, ReturnType::kInfered); + CXFA_FMStringExpression(L"").ToJavaScript(&accumulator, ReturnType::kInfered); EXPECT_EQ(L"", accumulator.AsStringView()); } TEST(FMStringExpressionTest, Short) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf accumulator; - CXFA_FMStringExpression(L"a").ToJavaScript(accumulator, ReturnType::kInfered); + CXFA_FMStringExpression(L"a").ToJavaScript(&accumulator, + ReturnType::kInfered); EXPECT_EQ(L"a", accumulator.AsStringView()); } TEST(FMStringExpressionTest, Medium) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf accumulator; - CXFA_FMStringExpression(L".abcd.").ToJavaScript(accumulator, + CXFA_FMStringExpression(L".abcd.").ToJavaScript(&accumulator, ReturnType::kInfered); EXPECT_EQ(L"\"abcd\"", accumulator.AsStringView()); } @@ -74,7 +75,7 @@ TEST(FMStringExpressionTest, Long) { CFX_WideTextBuf accumulator; std::vector<WideStringView::UnsignedType> vec(140000, L'A'); CXFA_FMStringExpression(WideStringView(vec)) - .ToJavaScript(accumulator, ReturnType::kInfered); + .ToJavaScript(&accumulator, ReturnType::kInfered); EXPECT_EQ(140000u, accumulator.GetLength()); } @@ -82,6 +83,6 @@ TEST(FMStringExpressionTest, Quoted) { CXFA_FMToJavaScriptDepth::Reset(); CFX_WideTextBuf accumulator; CXFA_FMStringExpression(L".Simon says \"\"run\"\".") - .ToJavaScript(accumulator, ReturnType::kInfered); + .ToJavaScript(&accumulator, ReturnType::kInfered); EXPECT_EQ(L"\"Simon says \\\"run\\\"\"", accumulator.AsStringView()); } |