Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: xfa/fxfa/fm2js/xfa_fmparse.cpp

Issue 2534143003: Use unique_ptr in CFXA_FM expressions (Closed)
Patch Set: Nits Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/fm2js/xfa_expression.cpp ('k') | xfa/fxfa/fm2js/xfa_simpleexpression.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_fmparse.h" 7 #include "xfa/fxfa/fm2js/xfa_fmparse.h"
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 CFX_WideString ws_TempString(m_pToken->m_wstring); 185 CFX_WideString ws_TempString(m_pToken->m_wstring);
186 Error(m_pToken->m_uLinenum, kFMErrUnexpectedExpression, 186 Error(m_pToken->m_uLinenum, kFMErrUnexpectedExpression,
187 ws_TempString.c_str()); 187 ws_TempString.c_str());
188 NextToken(); 188 NextToken();
189 break; 189 break;
190 } 190 }
191 return expr; 191 return expr;
192 } 192 }
193 193
194 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseVarExpression() { 194 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseVarExpression() {
195 std::unique_ptr<CXFA_FMExpression> expr; 195 std::unique_ptr<CXFA_FMExpression> expr;
Tom Sepez 2016/11/29 17:39:46 nit: can this move to line 207?
npm 2016/11/29 18:22:34 Done.
196 CFX_WideStringC ident; 196 CFX_WideStringC ident;
197 uint32_t line = m_pToken->m_uLinenum; 197 uint32_t line = m_pToken->m_uLinenum;
198 NextToken(); 198 NextToken();
199 if (m_pToken->m_type != TOKidentifier) { 199 if (m_pToken->m_type != TOKidentifier) {
200 CFX_WideString ws_TempString(m_pToken->m_wstring); 200 CFX_WideString ws_TempString(m_pToken->m_wstring);
201 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, 201 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
202 ws_TempString.c_str()); 202 ws_TempString.c_str());
203 } else { 203 } else {
204 ident = m_pToken->m_wstring; 204 ident = m_pToken->m_wstring;
205 NextToken(); 205 NextToken();
206 } 206 }
207 if (m_pToken->m_type == TOKassign) { 207 if (m_pToken->m_type == TOKassign) {
208 NextToken(); 208 NextToken();
209 expr = ParseExpExpression(); 209 expr = ParseExpExpression();
210 } 210 }
211 if (m_pErrorInfo->message.IsEmpty()) { 211 if (m_pErrorInfo->message.IsEmpty()) {
Tom Sepez 2016/11/29 17:39:46 nit: I was having a hard time reading this. I thi
npm 2016/11/29 18:22:34 Done.
212 expr = 212 expr =
213 pdfium::MakeUnique<CXFA_FMVarExpression>(line, ident, expr.release()); 213 pdfium::MakeUnique<CXFA_FMVarExpression>(line, ident, std::move(expr));
214 } else { 214 } else {
215 expr.reset(); 215 expr.reset();
216 } 216 }
217 return expr; 217 return expr;
218 } 218 }
219 219
220 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseSimpleExpression() { 220 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseSimpleExpression() {
221 uint32_t line = m_pToken->m_uLinenum; 221 uint32_t line = m_pToken->m_uLinenum;
222 std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseLogicalOrExpression(); 222 std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseLogicalOrExpression();
223 while (m_pToken->m_type == TOKassign) { 223 while (m_pToken->m_type == TOKassign) {
224 NextToken(); 224 NextToken();
225 std::unique_ptr<CXFA_FMSimpleExpression> pExp2 = ParseLogicalOrExpression(); 225 std::unique_ptr<CXFA_FMSimpleExpression> pExp2 = ParseLogicalOrExpression();
226 if (m_pErrorInfo->message.IsEmpty()) { 226 if (m_pErrorInfo->message.IsEmpty()) {
227 pExp1 = pdfium::MakeUnique<CXFA_FMAssignExpression>( 227 pExp1 = pdfium::MakeUnique<CXFA_FMAssignExpression>(
228 line, TOKassign, pExp1.release(), pExp2.release()); 228 line, TOKassign, std::move(pExp1), std::move(pExp2));
229 } else { 229 } else {
230 pExp1.reset(); 230 pExp1.reset();
231 } 231 }
232 } 232 }
233 return pExp1; 233 return pExp1;
234 } 234 }
235 235
236 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseExpExpression() { 236 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseExpExpression() {
237 uint32_t line = m_pToken->m_uLinenum; 237 uint32_t line = m_pToken->m_uLinenum;
238 std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseSimpleExpression(); 238 std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseSimpleExpression();
239 std::unique_ptr<CXFA_FMExpression> expr; 239 std::unique_ptr<CXFA_FMExpression> expr;
240 if (m_pErrorInfo->message.IsEmpty()) { 240 if (m_pErrorInfo->message.IsEmpty())
Tom Sepez 2016/11/29 17:39:46 nit: same trick here as above.
npm 2016/11/29 18:22:34 Done.
241 expr = pdfium::MakeUnique<CXFA_FMExpExpression>(line, pExp1.release()); 241 expr = pdfium::MakeUnique<CXFA_FMExpExpression>(line, std::move(pExp1));
242 } else { 242 else
243 expr.reset(); 243 expr.reset();
244 }
245 return expr; 244 return expr;
246 } 245 }
247 246
248 std::unique_ptr<CXFA_FMSimpleExpression> 247 std::unique_ptr<CXFA_FMSimpleExpression>
249 CXFA_FMParse::ParseLogicalOrExpression() { 248 CXFA_FMParse::ParseLogicalOrExpression() {
250 uint32_t line = m_pToken->m_uLinenum; 249 uint32_t line = m_pToken->m_uLinenum;
251 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseLogicalAndExpression(); 250 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseLogicalAndExpression();
252 for (;;) { 251 for (;;) {
253 switch (m_pToken->m_type) { 252 switch (m_pToken->m_type) {
254 case TOKor: 253 case TOKor:
255 case TOKksor: { 254 case TOKksor: {
256 NextToken(); 255 NextToken();
257 std::unique_ptr<CXFA_FMSimpleExpression> e2( 256 std::unique_ptr<CXFA_FMSimpleExpression> e2(
258 ParseLogicalAndExpression()); 257 ParseLogicalAndExpression());
259 if (m_pErrorInfo->message.IsEmpty()) { 258 if (m_pErrorInfo->message.IsEmpty()) {
260 e1 = pdfium::MakeUnique<CXFA_FMLogicalOrExpression>( 259 e1 = pdfium::MakeUnique<CXFA_FMLogicalOrExpression>(
261 line, TOKor, e1.release(), e2.release()); 260 line, TOKor, std::move(e1), std::move(e2));
262 } else { 261 } else {
263 e1.reset(); 262 e1.reset();
264 } 263 }
265 continue; 264 continue;
266 } 265 }
267 default: 266 default:
268 break; 267 break;
269 } 268 }
270 break; 269 break;
271 } 270 }
272 return e1; 271 return e1;
273 } 272 }
274 273
275 std::unique_ptr<CXFA_FMSimpleExpression> 274 std::unique_ptr<CXFA_FMSimpleExpression>
276 CXFA_FMParse::ParseLogicalAndExpression() { 275 CXFA_FMParse::ParseLogicalAndExpression() {
277 uint32_t line = m_pToken->m_uLinenum; 276 uint32_t line = m_pToken->m_uLinenum;
278 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseEqualityExpression(); 277 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseEqualityExpression();
279 for (;;) { 278 for (;;) {
280 switch (m_pToken->m_type) { 279 switch (m_pToken->m_type) {
281 case TOKand: 280 case TOKand:
282 case TOKksand: { 281 case TOKksand: {
283 NextToken(); 282 NextToken();
284 std::unique_ptr<CXFA_FMSimpleExpression> e2 = ParseEqualityExpression(); 283 std::unique_ptr<CXFA_FMSimpleExpression> e2 = ParseEqualityExpression();
285 if (m_pErrorInfo->message.IsEmpty()) { 284 if (m_pErrorInfo->message.IsEmpty()) {
286 e1 = pdfium::MakeUnique<CXFA_FMLogicalAndExpression>( 285 e1 = pdfium::MakeUnique<CXFA_FMLogicalAndExpression>(
287 line, TOKand, e1.release(), e2.release()); 286 line, TOKand, std::move(e1), std::move(e2));
288 } else { 287 } else {
289 e1.reset(); 288 e1.reset();
290 } 289 }
291 continue; 290 continue;
292 } 291 }
293 default: 292 default:
294 break; 293 break;
295 } 294 }
296 break; 295 break;
297 } 296 }
298 return e1; 297 return e1;
299 } 298 }
300 299
301 std::unique_ptr<CXFA_FMSimpleExpression> 300 std::unique_ptr<CXFA_FMSimpleExpression>
302 CXFA_FMParse::ParseEqualityExpression() { 301 CXFA_FMParse::ParseEqualityExpression() {
303 uint32_t line = m_pToken->m_uLinenum; 302 uint32_t line = m_pToken->m_uLinenum;
304 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseRelationalExpression(); 303 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseRelationalExpression();
305 for (;;) { 304 for (;;) {
306 std::unique_ptr<CXFA_FMSimpleExpression> e2; 305 std::unique_ptr<CXFA_FMSimpleExpression> e2;
307 switch (m_pToken->m_type) { 306 switch (m_pToken->m_type) {
308 case TOKeq: 307 case TOKeq:
309 case TOKkseq: 308 case TOKkseq:
310 NextToken(); 309 NextToken();
311 e2 = ParseRelationalExpression(); 310 e2 = ParseRelationalExpression();
312 if (m_pErrorInfo->message.IsEmpty()) { 311 if (m_pErrorInfo->message.IsEmpty()) {
313 e1 = pdfium::MakeUnique<CXFA_FMEqualityExpression>( 312 e1 = pdfium::MakeUnique<CXFA_FMEqualityExpression>(
314 line, TOKeq, e1.release(), e2.release()); 313 line, TOKeq, std::move(e1), std::move(e2));
315 } else { 314 } else {
316 e1.reset(); 315 e1.reset();
317 } 316 }
318 continue; 317 continue;
319 case TOKne: 318 case TOKne:
320 case TOKksne: 319 case TOKksne:
321 NextToken(); 320 NextToken();
322 e2 = ParseRelationalExpression(); 321 e2 = ParseRelationalExpression();
323 if (m_pErrorInfo->message.IsEmpty()) { 322 if (m_pErrorInfo->message.IsEmpty()) {
324 e1 = pdfium::MakeUnique<CXFA_FMEqualityExpression>( 323 e1 = pdfium::MakeUnique<CXFA_FMEqualityExpression>(
325 line, TOKne, e1.release(), e2.release()); 324 line, TOKne, std::move(e1), std::move(e2));
326 } else { 325 } else {
327 e1.reset(); 326 e1.reset();
328 } 327 }
329 continue; 328 continue;
330 default: 329 default:
331 break; 330 break;
332 } 331 }
333 break; 332 break;
334 } 333 }
335 return e1; 334 return e1;
336 } 335 }
337 336
338 std::unique_ptr<CXFA_FMSimpleExpression> 337 std::unique_ptr<CXFA_FMSimpleExpression>
339 CXFA_FMParse::ParseRelationalExpression() { 338 CXFA_FMParse::ParseRelationalExpression() {
340 uint32_t line = m_pToken->m_uLinenum; 339 uint32_t line = m_pToken->m_uLinenum;
341 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseAddtiveExpression(); 340 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseAddtiveExpression();
342 for (;;) { 341 for (;;) {
343 std::unique_ptr<CXFA_FMSimpleExpression> e2; 342 std::unique_ptr<CXFA_FMSimpleExpression> e2;
344 switch (m_pToken->m_type) { 343 switch (m_pToken->m_type) {
345 case TOKlt: 344 case TOKlt:
346 case TOKkslt: 345 case TOKkslt:
347 NextToken(); 346 NextToken();
348 e2 = ParseAddtiveExpression(); 347 e2 = ParseAddtiveExpression();
349 if (m_pErrorInfo->message.IsEmpty()) { 348 if (m_pErrorInfo->message.IsEmpty()) {
350 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( 349 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>(
351 line, TOKlt, e1.release(), e2.release()); 350 line, TOKlt, std::move(e1), std::move(e2));
352 } else { 351 } else {
353 e1.reset(); 352 e1.reset();
354 } 353 }
355 continue; 354 continue;
356 case TOKgt: 355 case TOKgt:
357 case TOKksgt: 356 case TOKksgt:
358 NextToken(); 357 NextToken();
359 e2 = ParseAddtiveExpression(); 358 e2 = ParseAddtiveExpression();
360 if (m_pErrorInfo->message.IsEmpty()) { 359 if (m_pErrorInfo->message.IsEmpty()) {
361 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( 360 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>(
362 line, TOKgt, e1.release(), e2.release()); 361 line, TOKgt, std::move(e1), std::move(e2));
363 } else { 362 } else {
364 e1.reset(); 363 e1.reset();
365 } 364 }
366 continue; 365 continue;
367 case TOKle: 366 case TOKle:
368 case TOKksle: 367 case TOKksle:
369 NextToken(); 368 NextToken();
370 e2 = ParseAddtiveExpression(); 369 e2 = ParseAddtiveExpression();
371 if (m_pErrorInfo->message.IsEmpty()) { 370 if (m_pErrorInfo->message.IsEmpty()) {
372 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( 371 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>(
373 line, TOKle, e1.release(), e2.release()); 372 line, TOKle, std::move(e1), std::move(e2));
374 } else { 373 } else {
375 e1.reset(); 374 e1.reset();
376 } 375 }
377 continue; 376 continue;
378 case TOKge: 377 case TOKge:
379 case TOKksge: 378 case TOKksge:
380 NextToken(); 379 NextToken();
381 e2 = ParseAddtiveExpression(); 380 e2 = ParseAddtiveExpression();
382 if (m_pErrorInfo->message.IsEmpty()) { 381 if (m_pErrorInfo->message.IsEmpty()) {
383 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( 382 e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>(
384 line, TOKge, e1.release(), e2.release()); 383 line, TOKge, std::move(e1), std::move(e2));
385 } else { 384 } else {
386 e1.reset(); 385 e1.reset();
387 } 386 }
388 continue; 387 continue;
389 default: 388 default:
390 break; 389 break;
391 } 390 }
392 break; 391 break;
393 } 392 }
394 return e1; 393 return e1;
395 } 394 }
396 395
397 std::unique_ptr<CXFA_FMSimpleExpression> 396 std::unique_ptr<CXFA_FMSimpleExpression>
398 CXFA_FMParse::ParseAddtiveExpression() { 397 CXFA_FMParse::ParseAddtiveExpression() {
399 uint32_t line = m_pToken->m_uLinenum; 398 uint32_t line = m_pToken->m_uLinenum;
400 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseMultiplicativeExpression(); 399 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseMultiplicativeExpression();
401 for (;;) { 400 for (;;) {
402 std::unique_ptr<CXFA_FMSimpleExpression> e2; 401 std::unique_ptr<CXFA_FMSimpleExpression> e2;
403 switch (m_pToken->m_type) { 402 switch (m_pToken->m_type) {
404 case TOKplus: 403 case TOKplus:
405 NextToken(); 404 NextToken();
406 e2 = ParseMultiplicativeExpression(); 405 e2 = ParseMultiplicativeExpression();
407 if (m_pErrorInfo->message.IsEmpty()) { 406 if (m_pErrorInfo->message.IsEmpty()) {
408 e1 = pdfium::MakeUnique<CXFA_FMAdditiveExpression>( 407 e1 = pdfium::MakeUnique<CXFA_FMAdditiveExpression>(
409 line, TOKplus, e1.release(), e2.release()); 408 line, TOKplus, std::move(e1), std::move(e2));
410 } else { 409 } else {
411 e1.reset(); 410 e1.reset();
412 } 411 }
413 continue; 412 continue;
414 case TOKminus: 413 case TOKminus:
415 NextToken(); 414 NextToken();
416 e2 = ParseMultiplicativeExpression(); 415 e2 = ParseMultiplicativeExpression();
417 if (m_pErrorInfo->message.IsEmpty()) { 416 if (m_pErrorInfo->message.IsEmpty()) {
418 e1 = pdfium::MakeUnique<CXFA_FMAdditiveExpression>( 417 e1 = pdfium::MakeUnique<CXFA_FMAdditiveExpression>(
419 line, TOKminus, e1.release(), e2.release()); 418 line, TOKminus, std::move(e1), std::move(e2));
420 } else { 419 } else {
421 e1.reset(); 420 e1.reset();
422 } 421 }
423 continue; 422 continue;
424 default: 423 default:
425 break; 424 break;
426 } 425 }
427 break; 426 break;
428 } 427 }
429 return e1; 428 return e1;
430 } 429 }
431 430
432 std::unique_ptr<CXFA_FMSimpleExpression> 431 std::unique_ptr<CXFA_FMSimpleExpression>
433 CXFA_FMParse::ParseMultiplicativeExpression() { 432 CXFA_FMParse::ParseMultiplicativeExpression() {
434 uint32_t line = m_pToken->m_uLinenum; 433 uint32_t line = m_pToken->m_uLinenum;
435 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseUnaryExpression(); 434 std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseUnaryExpression();
436 for (;;) { 435 for (;;) {
437 std::unique_ptr<CXFA_FMSimpleExpression> e2; 436 std::unique_ptr<CXFA_FMSimpleExpression> e2;
438 switch (m_pToken->m_type) { 437 switch (m_pToken->m_type) {
439 case TOKmul: 438 case TOKmul:
440 NextToken(); 439 NextToken();
441 e2 = ParseUnaryExpression(); 440 e2 = ParseUnaryExpression();
442 if (m_pErrorInfo->message.IsEmpty()) { 441 if (m_pErrorInfo->message.IsEmpty()) {
443 e1 = pdfium::MakeUnique<CXFA_FMMultiplicativeExpression>( 442 e1 = pdfium::MakeUnique<CXFA_FMMultiplicativeExpression>(
444 line, TOKmul, e1.release(), e2.release()); 443 line, TOKmul, std::move(e1), std::move(e2));
445 } else { 444 } else {
446 e1.reset(); 445 e1.reset();
447 } 446 }
448 continue; 447 continue;
449 case TOKdiv: 448 case TOKdiv:
450 NextToken(); 449 NextToken();
451 e2 = ParseUnaryExpression(); 450 e2 = ParseUnaryExpression();
452 if (m_pErrorInfo->message.IsEmpty()) { 451 if (m_pErrorInfo->message.IsEmpty()) {
453 e1 = pdfium::MakeUnique<CXFA_FMMultiplicativeExpression>( 452 e1 = pdfium::MakeUnique<CXFA_FMMultiplicativeExpression>(
454 line, TOKdiv, e1.release(), e2.release()); 453 line, TOKdiv, std::move(e1), std::move(e2));
455 } else { 454 } else {
456 e1.reset(); 455 e1.reset();
457 } 456 }
458 continue; 457 continue;
459 default: 458 default:
460 break; 459 break;
461 } 460 }
462 break; 461 break;
463 } 462 }
464 return e1; 463 return e1;
465 } 464 }
466 465
467 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseUnaryExpression() { 466 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseUnaryExpression() {
468 std::unique_ptr<CXFA_FMSimpleExpression> expr; 467 std::unique_ptr<CXFA_FMSimpleExpression> expr;
469 uint32_t line = m_pToken->m_uLinenum; 468 uint32_t line = m_pToken->m_uLinenum;
470 switch (m_pToken->m_type) { 469 switch (m_pToken->m_type) {
471 case TOKplus: 470 case TOKplus:
472 NextToken(); 471 NextToken();
473 expr = ParseUnaryExpression(); 472 expr = ParseUnaryExpression();
474 if (m_pErrorInfo->message.IsEmpty()) { 473 if (m_pErrorInfo->message.IsEmpty())
475 expr = pdfium::MakeUnique<CXFA_FMPosExpression>(line, expr.release()); 474 expr = pdfium::MakeUnique<CXFA_FMPosExpression>(line, std::move(expr));
476 } else { 475 else
477 expr.reset(); 476 expr.reset();
478 }
479 break; 477 break;
480 case TOKminus: 478 case TOKminus:
481 NextToken(); 479 NextToken();
482 expr = ParseUnaryExpression(); 480 expr = ParseUnaryExpression();
483 if (m_pErrorInfo->message.IsEmpty()) { 481 if (m_pErrorInfo->message.IsEmpty())
484 expr = pdfium::MakeUnique<CXFA_FMNegExpression>(line, expr.release()); 482 expr = pdfium::MakeUnique<CXFA_FMNegExpression>(line, std::move(expr));
485 } else { 483 else
486 expr.reset(); 484 expr.reset();
487 }
488 break; 485 break;
489 case TOKksnot: 486 case TOKksnot:
490 NextToken(); 487 NextToken();
491 expr = ParseUnaryExpression(); 488 expr = ParseUnaryExpression();
492 if (m_pErrorInfo->message.IsEmpty()) { 489 if (m_pErrorInfo->message.IsEmpty())
493 expr = pdfium::MakeUnique<CXFA_FMNotExpression>(line, expr.release()); 490 expr = pdfium::MakeUnique<CXFA_FMNotExpression>(line, std::move(expr));
494 } else { 491 else
495 expr.reset(); 492 expr.reset();
496 }
497 break; 493 break;
498 default: 494 default:
499 expr = ParsePrimaryExpression(); 495 expr = ParsePrimaryExpression();
500 break; 496 break;
501 } 497 }
502 return expr; 498 return expr;
503 } 499 }
504 500
505 std::unique_ptr<CXFA_FMSimpleExpression> 501 std::unique_ptr<CXFA_FMSimpleExpression>
506 CXFA_FMParse::ParsePrimaryExpression() { 502 CXFA_FMParse::ParsePrimaryExpression() {
(...skipping 10 matching lines...) Expand all
517 m_pToken->m_wstring); 513 m_pToken->m_wstring);
518 NextToken(); 514 NextToken();
519 break; 515 break;
520 case TOKidentifier: { 516 case TOKidentifier: {
521 CFX_WideStringC wsIdentifier(m_pToken->m_wstring); 517 CFX_WideStringC wsIdentifier(m_pToken->m_wstring);
522 NextToken(); 518 NextToken();
523 if (m_pToken->m_type == TOKlbracket) { 519 if (m_pToken->m_type == TOKlbracket) {
524 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); 520 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression();
525 if (s) { 521 if (s) {
526 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 522 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
527 line, nullptr, TOKdot, wsIdentifier, s.release()); 523 line, nullptr, TOKdot, wsIdentifier, std::move(s));
528 } 524 }
529 NextToken(); 525 NextToken();
530 } else { 526 } else {
531 expr = 527 expr =
532 pdfium::MakeUnique<CXFA_FMIdentifierExpression>(line, wsIdentifier); 528 pdfium::MakeUnique<CXFA_FMIdentifierExpression>(line, wsIdentifier);
533 } 529 }
534 } break; 530 } break;
535 case TOKif: 531 case TOKif:
536 expr = pdfium::MakeUnique<CXFA_FMIdentifierExpression>( 532 expr = pdfium::MakeUnique<CXFA_FMIdentifierExpression>(
537 line, m_pToken->m_wstring); 533 line, m_pToken->m_wstring);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 } 574 }
579 } 575 }
580 if (m_pToken->m_type != TOKrparen) { 576 if (m_pToken->m_type != TOKrparen) {
581 CFX_WideString ws_TempString(m_pToken->m_wstring); 577 CFX_WideString ws_TempString(m_pToken->m_wstring);
582 Error(m_pToken->m_uLinenum, kFMErrExpectedToken, 578 Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
583 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); 579 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
584 } 580 }
585 } 581 }
586 if (m_pErrorInfo->message.IsEmpty()) { 582 if (m_pErrorInfo->message.IsEmpty()) {
587 expr = pdfium::MakeUnique<CXFA_FMCallExpression>( 583 expr = pdfium::MakeUnique<CXFA_FMCallExpression>(
588 line, expr.release(), std::move(expressions), false); 584 line, std::move(expr), std::move(expressions), false);
589 NextToken(); 585 NextToken();
590 if (m_pToken->m_type != TOKlbracket) 586 if (m_pToken->m_type != TOKlbracket)
591 continue; 587 continue;
592 588
593 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); 589 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression();
594 if (s) { 590 if (s) {
595 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 591 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
596 line, expr.release(), TOKcall, FX_WSTRC(L""), s.release()); 592 line, std::move(expr), TOKcall, L"", std::move(s));
597 } else { 593 } else {
598 expr.reset(); 594 expr.reset();
599 } 595 }
600 } else { 596 } else {
601 expr.reset(); 597 expr.reset();
602 } 598 }
603 } break; 599 } break;
604 case TOKdot: 600 case TOKdot:
605 NextToken(); 601 NextToken();
606 if (m_pToken->m_type == TOKidentifier) { 602 if (m_pToken->m_type == TOKidentifier) {
(...skipping 20 matching lines...) Expand all
627 CFX_WideString ws_TempString(m_pToken->m_wstring); 623 CFX_WideString ws_TempString(m_pToken->m_wstring);
628 Error(m_pToken->m_uLinenum, kFMErrExpectedToken, 624 Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
629 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); 625 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
630 } 626 }
631 } 627 }
632 if (m_pErrorInfo->message.IsEmpty()) { 628 if (m_pErrorInfo->message.IsEmpty()) {
633 std::unique_ptr<CXFA_FMSimpleExpression> pIdentifier = 629 std::unique_ptr<CXFA_FMSimpleExpression> pIdentifier =
634 pdfium::MakeUnique<CXFA_FMIdentifierExpression>(tempLine, 630 pdfium::MakeUnique<CXFA_FMIdentifierExpression>(tempLine,
635 tempStr); 631 tempStr);
636 pExpCall = pdfium::MakeUnique<CXFA_FMCallExpression>( 632 pExpCall = pdfium::MakeUnique<CXFA_FMCallExpression>(
637 line, pIdentifier.release(), std::move(expressions), true); 633 line, std::move(pIdentifier), std::move(expressions), true);
638 expr = pdfium::MakeUnique<CXFA_FMMethodCallExpression>( 634 expr = pdfium::MakeUnique<CXFA_FMMethodCallExpression>(
639 line, expr.release(), pExpCall.release()); 635 line, std::move(expr), std::move(pExpCall));
640 NextToken(); 636 NextToken();
641 if (m_pToken->m_type != TOKlbracket) 637 if (m_pToken->m_type != TOKlbracket)
642 continue; 638 continue;
643 639
644 std::unique_ptr<CXFA_FMSimpleExpression> s = 640 std::unique_ptr<CXFA_FMSimpleExpression> s =
645 ParseIndexExpression(); 641 ParseIndexExpression();
646 if (s) { 642 if (s) {
647 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 643 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
648 line, expr.release(), TOKcall, FX_WSTRC(L""), s.release()); 644 line, std::move(expr), TOKcall, L"", std::move(s));
649 } else { 645 } else {
650 expr.reset(); 646 expr.reset();
651 } 647 }
652 } else { 648 } else {
653 expr.reset(); 649 expr.reset();
654 } 650 }
655 } else if (m_pToken->m_type == TOKlbracket) { 651 } else if (m_pToken->m_type == TOKlbracket) {
656 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); 652 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression();
657 if (!(m_pErrorInfo->message.IsEmpty())) 653 if (!(m_pErrorInfo->message.IsEmpty()))
658 return nullptr; 654 return nullptr;
659 655
660 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 656 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
661 tempLine, expr.release(), TOKdot, tempStr, s.release()); 657 tempLine, std::move(expr), TOKdot, tempStr, std::move(s));
662 } else { 658 } else {
663 std::unique_ptr<CXFA_FMSimpleExpression> s = 659 std::unique_ptr<CXFA_FMSimpleExpression> s =
664 pdfium::MakeUnique<CXFA_FMIndexExpression>( 660 pdfium::MakeUnique<CXFA_FMIndexExpression>(
665 tempLine, ACCESSOR_NO_INDEX, nullptr, false); 661 tempLine, ACCESSOR_NO_INDEX, nullptr, false);
666 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 662 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
667 line, expr.release(), TOKdot, tempStr, s.release()); 663 line, std::move(expr), TOKdot, tempStr, std::move(s));
668 continue; 664 continue;
669 } 665 }
670 } else { 666 } else {
671 CFX_WideString ws_TempString(m_pToken->m_wstring); 667 CFX_WideString ws_TempString(m_pToken->m_wstring);
672 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, 668 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
673 ws_TempString.c_str()); 669 ws_TempString.c_str());
674 return expr; 670 return expr;
675 } 671 }
676 break; 672 break;
677 case TOKdotdot: 673 case TOKdotdot:
678 NextToken(); 674 NextToken();
679 if (m_pToken->m_type == TOKidentifier) { 675 if (m_pToken->m_type == TOKidentifier) {
680 CFX_WideStringC tempStr = m_pToken->m_wstring; 676 CFX_WideStringC tempStr = m_pToken->m_wstring;
681 uint32_t tempLine = m_pToken->m_uLinenum; 677 uint32_t tempLine = m_pToken->m_uLinenum;
682 NextToken(); 678 NextToken();
683 if (m_pToken->m_type == TOKlbracket) { 679 if (m_pToken->m_type == TOKlbracket) {
684 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); 680 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression();
685 if (!(m_pErrorInfo->message.IsEmpty())) { 681 if (!(m_pErrorInfo->message.IsEmpty())) {
686 return nullptr; 682 return nullptr;
687 } 683 }
688 expr = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>( 684 expr = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>(
689 tempLine, expr.release(), TOKdotdot, tempStr, s.release()); 685 tempLine, std::move(expr), TOKdotdot, tempStr, std::move(s));
690 } else { 686 } else {
691 std::unique_ptr<CXFA_FMSimpleExpression> s = 687 std::unique_ptr<CXFA_FMSimpleExpression> s =
692 pdfium::MakeUnique<CXFA_FMIndexExpression>( 688 pdfium::MakeUnique<CXFA_FMIndexExpression>(
693 tempLine, ACCESSOR_NO_INDEX, nullptr, false); 689 tempLine, ACCESSOR_NO_INDEX, nullptr, false);
694 expr = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>( 690 expr = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>(
695 line, expr.release(), TOKdotdot, tempStr, s.release()); 691 line, std::move(expr), TOKdotdot, tempStr, std::move(s));
696 continue; 692 continue;
697 } 693 }
698 } else { 694 } else {
699 CFX_WideString ws_TempString(m_pToken->m_wstring); 695 CFX_WideString ws_TempString(m_pToken->m_wstring);
700 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, 696 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
701 ws_TempString.c_str()); 697 ws_TempString.c_str());
702 return expr; 698 return expr;
703 } 699 }
704 break; 700 break;
705 case TOKdotscream: 701 case TOKdotscream:
706 NextToken(); 702 NextToken();
707 if (m_pToken->m_type == TOKidentifier) { 703 if (m_pToken->m_type == TOKidentifier) {
708 CFX_WideStringC tempStr = m_pToken->m_wstring; 704 CFX_WideStringC tempStr = m_pToken->m_wstring;
709 uint32_t tempLine = m_pToken->m_uLinenum; 705 uint32_t tempLine = m_pToken->m_uLinenum;
710 NextToken(); 706 NextToken();
711 if (m_pToken->m_type == TOKlbracket) { 707 if (m_pToken->m_type == TOKlbracket) {
712 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); 708 std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression();
713 if (!(m_pErrorInfo->message.IsEmpty())) 709 if (!(m_pErrorInfo->message.IsEmpty()))
714 return nullptr; 710 return nullptr;
715 711
716 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 712 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
717 tempLine, expr.release(), TOKdotscream, tempStr, s.release()); 713 tempLine, std::move(expr), TOKdotscream, tempStr, std::move(s));
718 } else { 714 } else {
719 std::unique_ptr<CXFA_FMSimpleExpression> s = 715 std::unique_ptr<CXFA_FMSimpleExpression> s =
720 pdfium::MakeUnique<CXFA_FMIndexExpression>( 716 pdfium::MakeUnique<CXFA_FMIndexExpression>(
721 tempLine, ACCESSOR_NO_INDEX, nullptr, false); 717 tempLine, ACCESSOR_NO_INDEX, nullptr, false);
722 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 718 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
723 line, expr.release(), TOKdotscream, tempStr, s.release()); 719 line, std::move(expr), TOKdotscream, tempStr, std::move(s));
724 continue; 720 continue;
725 } 721 }
726 } else { 722 } else {
727 CFX_WideString ws_TempString(m_pToken->m_wstring); 723 CFX_WideString ws_TempString(m_pToken->m_wstring);
728 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, 724 Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier,
729 ws_TempString.c_str()); 725 ws_TempString.c_str());
730 return expr; 726 return expr;
731 } 727 }
732 break; 728 break;
733 case TOKdotstar: { 729 case TOKdotstar: {
734 std::unique_ptr<CXFA_FMSimpleExpression> s = 730 std::unique_ptr<CXFA_FMSimpleExpression> s =
735 pdfium::MakeUnique<CXFA_FMIndexExpression>(line, ACCESSOR_NO_INDEX, 731 pdfium::MakeUnique<CXFA_FMIndexExpression>(line, ACCESSOR_NO_INDEX,
736 nullptr, false); 732 nullptr, false);
737 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( 733 expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>(
738 line, expr.release(), TOKdotstar, FX_WSTRC(L"*"), s.release()); 734 line, std::move(expr), TOKdotstar, L"*", std::move(s));
739 } break; 735 } break;
740 default: 736 default:
741 return expr; 737 return expr;
742 } 738 }
743 NextToken(); 739 NextToken();
744 } 740 }
745 return expr; 741 return expr;
746 } 742 }
747 743
748 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseIndexExpression() { 744 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseIndexExpression() {
749 std::unique_ptr<CXFA_FMSimpleExpression> pExp; 745 std::unique_ptr<CXFA_FMSimpleExpression> pExp;
750 uint32_t line = m_pToken->m_uLinenum; 746 uint32_t line = m_pToken->m_uLinenum;
751 NextToken(); 747 NextToken();
752 std::unique_ptr<CXFA_FMSimpleExpression> s; 748 std::unique_ptr<CXFA_FMSimpleExpression> s;
753 XFA_FM_AccessorIndex accessorIndex = ACCESSOR_NO_RELATIVEINDEX; 749 XFA_FM_AccessorIndex accessorIndex = ACCESSOR_NO_RELATIVEINDEX;
754 if (m_pToken->m_type == TOKmul) { 750 if (m_pToken->m_type == TOKmul) {
755 pExp = pdfium::MakeUnique<CXFA_FMIndexExpression>(line, accessorIndex, 751 pExp = pdfium::MakeUnique<CXFA_FMIndexExpression>(line, accessorIndex,
756 s.release(), true); 752 std::move(s), true);
757 NextToken(); 753 NextToken();
758 if (m_pToken->m_type != TOKrbracket) { 754 if (m_pToken->m_type != TOKrbracket) {
759 CFX_WideString ws_TempString(m_pToken->m_wstring); 755 CFX_WideString ws_TempString(m_pToken->m_wstring);
760 Error(m_pToken->m_uLinenum, kFMErrExpectedToken, 756 Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
761 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); 757 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
762 pExp.reset(); 758 pExp.reset();
763 } 759 }
764 return pExp; 760 return pExp;
765 } 761 }
766 if (m_pToken->m_type == TOKplus) { 762 if (m_pToken->m_type == TOKplus) {
767 accessorIndex = ACCESSOR_POSITIVE_INDEX; 763 accessorIndex = ACCESSOR_POSITIVE_INDEX;
768 NextToken(); 764 NextToken();
769 } else if (m_pToken->m_type == TOKminus) { 765 } else if (m_pToken->m_type == TOKminus) {
770 accessorIndex = ACCESSOR_NEGATIVE_INDEX; 766 accessorIndex = ACCESSOR_NEGATIVE_INDEX;
771 NextToken(); 767 NextToken();
772 } 768 }
773 s = ParseSimpleExpression(); 769 s = ParseSimpleExpression();
774 if (m_pToken->m_type != TOKrbracket) { 770 if (m_pToken->m_type != TOKrbracket) {
775 CFX_WideString ws_TempString(m_pToken->m_wstring); 771 CFX_WideString ws_TempString(m_pToken->m_wstring);
776 Error(m_pToken->m_uLinenum, kFMErrExpectedToken, 772 Error(m_pToken->m_uLinenum, kFMErrExpectedToken,
777 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); 773 XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str());
778 } else { 774 } else {
779 pExp = pdfium::MakeUnique<CXFA_FMIndexExpression>(line, accessorIndex, 775 pExp = pdfium::MakeUnique<CXFA_FMIndexExpression>(line, accessorIndex,
780 s.release(), false); 776 std::move(s), false);
781 } 777 }
782 return pExp; 778 return pExp;
783 } 779 }
784 780
785 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseParenExpression() { 781 std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseParenExpression() {
786 Check(TOKlparen); 782 Check(TOKlparen);
787 783
788 if (m_pToken->m_type == TOKrparen) { 784 if (m_pToken->m_type == TOKrparen) {
789 Error(m_pToken->m_uLinenum, kFMErrExpectedNonEmptyExpression); 785 Error(m_pToken->m_uLinenum, kFMErrExpectedNonEmptyExpression);
790 NextToken(); 786 NextToken();
791 return nullptr; 787 return nullptr;
792 } 788 }
793 789
794 uint32_t line = m_pToken->m_uLinenum; 790 uint32_t line = m_pToken->m_uLinenum;
795 std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseLogicalOrExpression(); 791 std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseLogicalOrExpression();
796 792
797 while (m_pToken->m_type == TOKassign) { 793 while (m_pToken->m_type == TOKassign) {
798 NextToken(); 794 NextToken();
799 std::unique_ptr<CXFA_FMSimpleExpression> pExp2 = ParseLogicalOrExpression(); 795 std::unique_ptr<CXFA_FMSimpleExpression> pExp2 = ParseLogicalOrExpression();
800 if (m_pErrorInfo->message.IsEmpty()) { 796 if (m_pErrorInfo->message.IsEmpty()) {
801 pExp1 = pdfium::MakeUnique<CXFA_FMAssignExpression>( 797 pExp1 = pdfium::MakeUnique<CXFA_FMAssignExpression>(
802 line, TOKassign, pExp1.release(), pExp2.release()); 798 line, TOKassign, std::move(pExp1), std::move(pExp2));
803 } else { 799 } else {
804 pExp1.reset(); 800 pExp1.reset();
805 } 801 }
806 } 802 }
807 Check(TOKrparen); 803 Check(TOKrparen);
808 return pExp1; 804 return pExp1;
809 } 805 }
810 806
811 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseBlockExpression() { 807 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseBlockExpression() {
812 uint32_t line = m_pToken->m_uLinenum; 808 uint32_t line = m_pToken->m_uLinenum;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 Check(TOKendif); 887 Check(TOKendif);
892 break; 888 break;
893 default: 889 default:
894 CFX_WideString ws_TempString(m_pToken->m_wstring); 890 CFX_WideString ws_TempString(m_pToken->m_wstring);
895 Error(m_pToken->m_uLinenum, kFMErrExpectedEndIf, ws_TempString.c_str()); 891 Error(m_pToken->m_uLinenum, kFMErrExpectedEndIf, ws_TempString.c_str());
896 NextToken(); 892 NextToken();
897 break; 893 break;
898 } 894 }
899 std::unique_ptr<CXFA_FMIfExpression> pExp; 895 std::unique_ptr<CXFA_FMIfExpression> pExp;
900 if (m_pErrorInfo->message.IsEmpty()) { 896 if (m_pErrorInfo->message.IsEmpty()) {
901 pExp = pdfium::MakeUnique<CXFA_FMIfExpression>(line, pExpression.release(), 897 pExp = pdfium::MakeUnique<CXFA_FMIfExpression>(line, std::move(pExpression),
902 pIfExpression.release(), 898 std::move(pIfExpression),
903 pElseExpression.release()); 899 std::move(pElseExpression));
904 } 900 }
905 return pExp; 901 return pExp;
906 } 902 }
907 903
908 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseWhileExpression() { 904 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseWhileExpression() {
909 uint32_t line = m_pToken->m_uLinenum; 905 uint32_t line = m_pToken->m_uLinenum;
910 NextToken(); 906 NextToken();
911 std::unique_ptr<CXFA_FMSimpleExpression> pCondition = ParseParenExpression(); 907 std::unique_ptr<CXFA_FMSimpleExpression> pCondition = ParseParenExpression();
912 Check(TOKdo); 908 Check(TOKdo);
913 std::unique_ptr<CXFA_FMExpression> pExpression = ParseBlockExpression(); 909 std::unique_ptr<CXFA_FMExpression> pExpression = ParseBlockExpression();
914 Check(TOKendwhile); 910 Check(TOKendwhile);
915 std::unique_ptr<CXFA_FMExpression> expr; 911 std::unique_ptr<CXFA_FMExpression> expr;
916 if (m_pErrorInfo->message.IsEmpty()) { 912 if (m_pErrorInfo->message.IsEmpty()) {
917 expr = pdfium::MakeUnique<CXFA_FMWhileExpression>( 913 expr = pdfium::MakeUnique<CXFA_FMWhileExpression>(
918 line, pCondition.release(), pExpression.release()); 914 line, std::move(pCondition), std::move(pExpression));
919 } 915 }
920 return expr; 916 return expr;
921 } 917 }
922 918
923 std::unique_ptr<CXFA_FMSimpleExpression> 919 std::unique_ptr<CXFA_FMSimpleExpression>
924 CXFA_FMParse::ParseSubassignmentInForExpression() { 920 CXFA_FMParse::ParseSubassignmentInForExpression() {
925 std::unique_ptr<CXFA_FMSimpleExpression> expr; 921 std::unique_ptr<CXFA_FMSimpleExpression> expr;
926 switch (m_pToken->m_type) { 922 switch (m_pToken->m_type) {
927 case TOKidentifier: 923 case TOKidentifier:
928 expr = ParseSimpleExpression(); 924 expr = ParseSimpleExpression();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
973 if (m_pToken->m_type == TOKstep) { 969 if (m_pToken->m_type == TOKstep) {
974 NextToken(); 970 NextToken();
975 pStep = ParseSimpleExpression(); 971 pStep = ParseSimpleExpression();
976 } 972 }
977 Check(TOKdo); 973 Check(TOKdo);
978 std::unique_ptr<CXFA_FMExpression> pList = ParseBlockExpression(); 974 std::unique_ptr<CXFA_FMExpression> pList = ParseBlockExpression();
979 Check(TOKendfor); 975 Check(TOKendfor);
980 std::unique_ptr<CXFA_FMExpression> expr; 976 std::unique_ptr<CXFA_FMExpression> expr;
981 if (m_pErrorInfo->message.IsEmpty()) { 977 if (m_pErrorInfo->message.IsEmpty()) {
982 expr = pdfium::MakeUnique<CXFA_FMForExpression>( 978 expr = pdfium::MakeUnique<CXFA_FMForExpression>(
983 line, wsVariant, pAssignment.release(), pAccessor.release(), iDirection, 979 line, wsVariant, std::move(pAssignment), std::move(pAccessor),
984 pStep.release(), pList.release()); 980 iDirection, std::move(pStep), std::move(pList));
985 } 981 }
986 return expr; 982 return expr;
987 } 983 }
988 984
989 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseForeachExpression() { 985 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseForeachExpression() {
990 std::unique_ptr<CXFA_FMExpression> expr; 986 std::unique_ptr<CXFA_FMExpression> expr;
991 CFX_WideStringC wsIdentifier; 987 CFX_WideStringC wsIdentifier;
992 std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> pAccessors; 988 std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> pAccessors;
993 std::unique_ptr<CXFA_FMExpression> pList; 989 std::unique_ptr<CXFA_FMExpression> pList;
994 uint32_t line = m_pToken->m_uLinenum; 990 uint32_t line = m_pToken->m_uLinenum;
(...skipping 21 matching lines...) Expand all
1016 break; 1012 break;
1017 NextToken(); 1013 NextToken();
1018 } 1014 }
1019 Check(TOKrparen); 1015 Check(TOKrparen);
1020 } 1016 }
1021 Check(TOKdo); 1017 Check(TOKdo);
1022 pList = ParseBlockExpression(); 1018 pList = ParseBlockExpression();
1023 Check(TOKendfor); 1019 Check(TOKendfor);
1024 if (m_pErrorInfo->message.IsEmpty()) { 1020 if (m_pErrorInfo->message.IsEmpty()) {
1025 expr = pdfium::MakeUnique<CXFA_FMForeachExpression>( 1021 expr = pdfium::MakeUnique<CXFA_FMForeachExpression>(
1026 line, wsIdentifier, std::move(pAccessors), pList.release()); 1022 line, wsIdentifier, std::move(pAccessors), std::move(pList));
1027 } 1023 }
1028 return expr; 1024 return expr;
1029 } 1025 }
1030 1026
1031 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseDoExpression() { 1027 std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseDoExpression() {
1032 uint32_t line = m_pToken->m_uLinenum; 1028 uint32_t line = m_pToken->m_uLinenum;
1033 NextToken(); 1029 NextToken();
1034 std::unique_ptr<CXFA_FMExpression> expr = ParseBlockExpression(); 1030 std::unique_ptr<CXFA_FMExpression> expr = ParseBlockExpression();
1035 Check(TOKend); 1031 Check(TOKend);
1036 if (m_pErrorInfo->message.IsEmpty()) { 1032 if (m_pErrorInfo->message.IsEmpty()) {
1037 expr = pdfium::MakeUnique<CXFA_FMDoExpression>(line, expr.release()); 1033 expr = pdfium::MakeUnique<CXFA_FMDoExpression>(line, std::move(expr));
1038 } else { 1034 } else {
1039 expr.reset(); 1035 expr.reset();
1040 } 1036 }
1041 return expr; 1037 return expr;
1042 } 1038 }
OLDNEW
« no previous file with comments | « xfa/fxfa/fm2js/xfa_expression.cpp ('k') | xfa/fxfa/fm2js/xfa_simpleexpression.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698