OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/fm2js/xfa_expression.h" | 7 #include "xfa/fxfa/fm2js/xfa_expression.h" |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 96 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
97 } | 97 } |
98 javascript << FX_WSTRC(L";\n}\n"); | 98 javascript << FX_WSTRC(L";\n}\n"); |
99 if (m_isGlobal) { | 99 if (m_isGlobal) { |
100 javascript << FX_WSTRC(L").call(this);\n"); | 100 javascript << FX_WSTRC(L").call(this);\n"); |
101 } | 101 } |
102 } | 102 } |
103 | 103 |
104 void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {} | 104 void CXFA_FMFunctionDefinition::ToImpliedReturnJS(CFX_WideTextBuf&) {} |
105 | 105 |
106 CXFA_FMVarExpression::CXFA_FMVarExpression(uint32_t line, | 106 CXFA_FMVarExpression::CXFA_FMVarExpression( |
107 const CFX_WideStringC& wsName, | 107 uint32_t line, |
108 CXFA_FMExpression* pInit) | 108 const CFX_WideStringC& wsName, |
| 109 std::unique_ptr<CXFA_FMExpression> pInit) |
109 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR), | 110 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR), |
110 m_wsName(wsName), | 111 m_wsName(wsName), |
111 m_pInit(pInit) {} | 112 m_pInit(std::move(pInit)) {} |
112 | 113 |
113 CXFA_FMVarExpression::~CXFA_FMVarExpression() {} | 114 CXFA_FMVarExpression::~CXFA_FMVarExpression() {} |
114 | 115 |
115 void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 116 void CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
116 javascript << FX_WSTRC(L"var "); | 117 javascript << FX_WSTRC(L"var "); |
117 CFX_WideString tempName(m_wsName); | 118 CFX_WideString tempName(m_wsName); |
118 if (m_wsName.GetAt(0) == L'!') { | 119 if (m_wsName.GetAt(0) == L'!') { |
119 tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); | 120 tempName = EXCLAMATION_IN_IDENTIFIER + m_wsName.Mid(1); |
120 } | 121 } |
121 javascript << tempName; | 122 javascript << tempName; |
(...skipping 29 matching lines...) Expand all Loading... |
151 javascript << FX_WSTRC(L");\n"); | 152 javascript << FX_WSTRC(L");\n"); |
152 } else { | 153 } else { |
153 javascript << FX_WSTRC(L"\"\";\n"); | 154 javascript << FX_WSTRC(L"\"\";\n"); |
154 } | 155 } |
155 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 156 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
156 javascript << FX_WSTRC(L" = "); | 157 javascript << FX_WSTRC(L" = "); |
157 javascript << tempName; | 158 javascript << tempName; |
158 javascript << FX_WSTRC(L";\n"); | 159 javascript << FX_WSTRC(L";\n"); |
159 } | 160 } |
160 | 161 |
161 CXFA_FMExpExpression::CXFA_FMExpExpression(uint32_t line, | 162 CXFA_FMExpExpression::CXFA_FMExpExpression( |
162 CXFA_FMSimpleExpression* pExpression) | 163 uint32_t line, |
163 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), m_pExpression(pExpression) {} | 164 std::unique_ptr<CXFA_FMSimpleExpression> pExpression) |
| 165 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_EXP), |
| 166 m_pExpression(std::move(pExpression)) {} |
164 | 167 |
165 CXFA_FMExpExpression::~CXFA_FMExpExpression() {} | 168 CXFA_FMExpExpression::~CXFA_FMExpExpression() {} |
166 | 169 |
167 void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 170 void CXFA_FMExpExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
168 if (m_pExpression->GetOperatorToken() == TOKassign) { | 171 if (m_pExpression->GetOperatorToken() == TOKassign) { |
169 m_pExpression->ToJavaScript(javascript); | 172 m_pExpression->ToJavaScript(javascript); |
170 } else { | 173 } else { |
171 m_pExpression->ToJavaScript(javascript); | 174 m_pExpression->ToJavaScript(javascript); |
172 javascript << FX_WSTRC(L";\n"); | 175 javascript << FX_WSTRC(L";\n"); |
173 } | 176 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 javascript << FX_WSTRC(L"{\n"); | 219 javascript << FX_WSTRC(L"{\n"); |
217 for (const auto& expr : m_ExpressionList) { | 220 for (const auto& expr : m_ExpressionList) { |
218 if (expr == m_ExpressionList.back()) | 221 if (expr == m_ExpressionList.back()) |
219 expr->ToImpliedReturnJS(javascript); | 222 expr->ToImpliedReturnJS(javascript); |
220 else | 223 else |
221 expr->ToJavaScript(javascript); | 224 expr->ToJavaScript(javascript); |
222 } | 225 } |
223 javascript << FX_WSTRC(L"}\n"); | 226 javascript << FX_WSTRC(L"}\n"); |
224 } | 227 } |
225 | 228 |
226 CXFA_FMDoExpression::CXFA_FMDoExpression(uint32_t line, | 229 CXFA_FMDoExpression::CXFA_FMDoExpression( |
227 CXFA_FMExpression* pList) | 230 uint32_t line, |
228 : CXFA_FMExpression(line), m_pList(pList) {} | 231 std::unique_ptr<CXFA_FMExpression> pList) |
| 232 : CXFA_FMExpression(line), m_pList(std::move(pList)) {} |
229 | 233 |
230 CXFA_FMDoExpression::~CXFA_FMDoExpression() {} | 234 CXFA_FMDoExpression::~CXFA_FMDoExpression() {} |
231 | 235 |
232 void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 236 void CXFA_FMDoExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
233 m_pList->ToJavaScript(javascript); | 237 m_pList->ToJavaScript(javascript); |
234 } | 238 } |
235 | 239 |
236 void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 240 void CXFA_FMDoExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
237 m_pList->ToImpliedReturnJS(javascript); | 241 m_pList->ToImpliedReturnJS(javascript); |
238 } | 242 } |
239 | 243 |
240 CXFA_FMIfExpression::CXFA_FMIfExpression(uint32_t line, | 244 CXFA_FMIfExpression::CXFA_FMIfExpression( |
241 CXFA_FMSimpleExpression* pExpression, | 245 uint32_t line, |
242 CXFA_FMExpression* pIfExpression, | 246 std::unique_ptr<CXFA_FMSimpleExpression> pExpression, |
243 CXFA_FMExpression* pElseExpression) | 247 std::unique_ptr<CXFA_FMExpression> pIfExpression, |
| 248 std::unique_ptr<CXFA_FMExpression> pElseExpression) |
244 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF), | 249 : CXFA_FMExpression(line, XFA_FM_EXPTYPE_IF), |
245 m_pExpression(pExpression), | 250 m_pExpression(std::move(pExpression)), |
246 m_pIfExpression(pIfExpression), | 251 m_pIfExpression(std::move(pIfExpression)), |
247 m_pElseExpression(pElseExpression) {} | 252 m_pElseExpression(std::move(pElseExpression)) {} |
248 | 253 |
249 CXFA_FMIfExpression::~CXFA_FMIfExpression() {} | 254 CXFA_FMIfExpression::~CXFA_FMIfExpression() {} |
250 | 255 |
251 void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 256 void CXFA_FMIfExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
252 javascript << FX_WSTRC(L"if ("); | 257 javascript << FX_WSTRC(L"if ("); |
253 if (m_pExpression) { | 258 if (m_pExpression) { |
254 javascript << XFA_FM_EXPTypeToString(GETFMVALUE); | 259 javascript << XFA_FM_EXPTypeToString(GETFMVALUE); |
255 javascript << FX_WSTRC(L"("); | 260 javascript << FX_WSTRC(L"("); |
256 m_pExpression->ToJavaScript(javascript); | 261 m_pExpression->ToJavaScript(javascript); |
257 javascript << FX_WSTRC(L")"); | 262 javascript << FX_WSTRC(L")"); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 } | 306 } |
302 | 307 |
303 CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {} | 308 CXFA_FMLoopExpression::~CXFA_FMLoopExpression() {} |
304 | 309 |
305 void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} | 310 void CXFA_FMLoopExpression::ToJavaScript(CFX_WideTextBuf& javascript) {} |
306 | 311 |
307 void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {} | 312 void CXFA_FMLoopExpression::ToImpliedReturnJS(CFX_WideTextBuf&) {} |
308 | 313 |
309 CXFA_FMWhileExpression::CXFA_FMWhileExpression( | 314 CXFA_FMWhileExpression::CXFA_FMWhileExpression( |
310 uint32_t line, | 315 uint32_t line, |
311 CXFA_FMSimpleExpression* pCondition, | 316 std::unique_ptr<CXFA_FMSimpleExpression> pCondition, |
312 CXFA_FMExpression* pExpression) | 317 std::unique_ptr<CXFA_FMExpression> pExpression) |
313 : CXFA_FMLoopExpression(line), | 318 : CXFA_FMLoopExpression(line), |
314 m_pCondition(pCondition), | 319 m_pCondition(std::move(pCondition)), |
315 m_pExpression(pExpression) {} | 320 m_pExpression(std::move(pExpression)) {} |
316 | 321 |
317 CXFA_FMWhileExpression::~CXFA_FMWhileExpression() {} | 322 CXFA_FMWhileExpression::~CXFA_FMWhileExpression() {} |
318 | 323 |
319 void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 324 void CXFA_FMWhileExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
320 javascript << FX_WSTRC(L"while ("); | 325 javascript << FX_WSTRC(L"while ("); |
321 m_pCondition->ToJavaScript(javascript); | 326 m_pCondition->ToJavaScript(javascript); |
322 javascript << FX_WSTRC(L")\n"); | 327 javascript << FX_WSTRC(L")\n"); |
323 m_pExpression->ToJavaScript(javascript); | 328 m_pExpression->ToJavaScript(javascript); |
324 } | 329 } |
325 | 330 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 javascript << FX_WSTRC(L" = 0;\n"); | 364 javascript << FX_WSTRC(L" = 0;\n"); |
360 javascript << FX_WSTRC(L"continue;\n"); | 365 javascript << FX_WSTRC(L"continue;\n"); |
361 } | 366 } |
362 | 367 |
363 void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { | 368 void CXFA_FMContinueExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) { |
364 javascript << RUNTIMEFUNCTIONRETURNVALUE; | 369 javascript << RUNTIMEFUNCTIONRETURNVALUE; |
365 javascript << FX_WSTRC(L" = 0;\n"); | 370 javascript << FX_WSTRC(L" = 0;\n"); |
366 javascript << FX_WSTRC(L"continue;\n"); | 371 javascript << FX_WSTRC(L"continue;\n"); |
367 } | 372 } |
368 | 373 |
369 CXFA_FMForExpression::CXFA_FMForExpression(uint32_t line, | 374 CXFA_FMForExpression::CXFA_FMForExpression( |
370 const CFX_WideStringC& wsVariant, | 375 uint32_t line, |
371 CXFA_FMSimpleExpression* pAssignment, | 376 const CFX_WideStringC& wsVariant, |
372 CXFA_FMSimpleExpression* pAccessor, | 377 std::unique_ptr<CXFA_FMSimpleExpression> pAssignment, |
373 int32_t iDirection, | 378 std::unique_ptr<CXFA_FMSimpleExpression> pAccessor, |
374 CXFA_FMSimpleExpression* pStep, | 379 int32_t iDirection, |
375 CXFA_FMExpression* pList) | 380 std::unique_ptr<CXFA_FMSimpleExpression> pStep, |
| 381 std::unique_ptr<CXFA_FMExpression> pList) |
376 : CXFA_FMLoopExpression(line), | 382 : CXFA_FMLoopExpression(line), |
377 m_wsVariant(wsVariant), | 383 m_wsVariant(wsVariant), |
378 m_pAssignment(pAssignment), | 384 m_pAssignment(std::move(pAssignment)), |
379 m_pAccessor(pAccessor), | 385 m_pAccessor(std::move(pAccessor)), |
380 m_iDirection(iDirection), | 386 m_iDirection(iDirection), |
381 m_pStep(pStep), | 387 m_pStep(std::move(pStep)), |
382 m_pList(pList) {} | 388 m_pList(std::move(pList)) {} |
383 | 389 |
384 CXFA_FMForExpression::~CXFA_FMForExpression() {} | 390 CXFA_FMForExpression::~CXFA_FMForExpression() {} |
385 | 391 |
386 void CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 392 void CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
387 javascript << FX_WSTRC(L"{\nvar "); | 393 javascript << FX_WSTRC(L"{\nvar "); |
388 CFX_WideString tempVariant; | 394 CFX_WideString tempVariant; |
389 if (m_wsVariant.GetAt(0) == L'!') { | 395 if (m_wsVariant.GetAt(0) == L'!') { |
390 tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1); | 396 tempVariant = EXCLAMATION_IN_IDENTIFIER + m_wsVariant.Mid(1); |
391 javascript << tempVariant; | 397 javascript << tempVariant; |
392 } else { | 398 } else { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 } | 486 } |
481 javascript << FX_WSTRC(L")\n"); | 487 javascript << FX_WSTRC(L")\n"); |
482 m_pList->ToImpliedReturnJS(javascript); | 488 m_pList->ToImpliedReturnJS(javascript); |
483 javascript << FX_WSTRC(L"}\n"); | 489 javascript << FX_WSTRC(L"}\n"); |
484 } | 490 } |
485 | 491 |
486 CXFA_FMForeachExpression::CXFA_FMForeachExpression( | 492 CXFA_FMForeachExpression::CXFA_FMForeachExpression( |
487 uint32_t line, | 493 uint32_t line, |
488 const CFX_WideStringC& wsIdentifier, | 494 const CFX_WideStringC& wsIdentifier, |
489 std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pAccessors, | 495 std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pAccessors, |
490 CXFA_FMExpression* pList) | 496 std::unique_ptr<CXFA_FMExpression> pList) |
491 : CXFA_FMLoopExpression(line), | 497 : CXFA_FMLoopExpression(line), |
492 m_wsIdentifier(wsIdentifier), | 498 m_wsIdentifier(wsIdentifier), |
493 m_pAccessors(std::move(pAccessors)), | 499 m_pAccessors(std::move(pAccessors)), |
494 m_pList(pList) {} | 500 m_pList(std::move(pList)) {} |
495 | 501 |
496 CXFA_FMForeachExpression::~CXFA_FMForeachExpression() {} | 502 CXFA_FMForeachExpression::~CXFA_FMForeachExpression() {} |
497 | 503 |
498 void CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf& javascript) { | 504 void CXFA_FMForeachExpression::ToJavaScript(CFX_WideTextBuf& javascript) { |
499 javascript << FX_WSTRC(L"{\n"); | 505 javascript << FX_WSTRC(L"{\n"); |
500 javascript << FX_WSTRC(L"var "); | 506 javascript << FX_WSTRC(L"var "); |
501 if (m_wsIdentifier.GetAt(0) == L'!') { | 507 if (m_wsIdentifier.GetAt(0) == L'!') { |
502 CFX_WideString tempIdentifier = | 508 CFX_WideString tempIdentifier = |
503 EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); | 509 EXCLAMATION_IN_IDENTIFIER + m_wsIdentifier.Mid(1); |
504 javascript << tempIdentifier; | 510 javascript << tempIdentifier; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 } | 590 } |
585 javascript << FX_WSTRC(L" = "); | 591 javascript << FX_WSTRC(L" = "); |
586 javascript << RUNTIMEBLOCKTEMPARRAY; | 592 javascript << RUNTIMEBLOCKTEMPARRAY; |
587 javascript << FX_WSTRC(L"["); | 593 javascript << FX_WSTRC(L"["); |
588 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; | 594 javascript << RUNTIMEBLOCKTEMPARRAYINDEX; |
589 javascript << FX_WSTRC(L"++];\n"); | 595 javascript << FX_WSTRC(L"++];\n"); |
590 m_pList->ToImpliedReturnJS(javascript); | 596 m_pList->ToImpliedReturnJS(javascript); |
591 javascript << FX_WSTRC(L"}\n"); | 597 javascript << FX_WSTRC(L"}\n"); |
592 javascript << FX_WSTRC(L"}\n"); | 598 javascript << FX_WSTRC(L"}\n"); |
593 } | 599 } |
OLD | NEW |