From 4102f7b86e415b2a254521a1fc52e11bdc932864 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 20 Feb 2018 21:52:39 +0000 Subject: [formcalc] Split literal parsing to its own method This Cl moves the code to create literals in the AST from ParsePrimaryExpression to ParseLiteral. Change-Id: I41ba20f28f1cb1d76d753c5baec790872acdf1da Reviewed-on: https://pdfium-review.googlesource.com/27411 Reviewed-by: Ryan Harrison Commit-Queue: dsinclair --- xfa/fxfa/fm2js/cxfa_fmparser.cpp | 39 +++++++++++++++++++++------------------ xfa/fxfa/fm2js/cxfa_fmparser.h | 1 + 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.cpp b/xfa/fxfa/fm2js/cxfa_fmparser.cpp index 93fa44fedd..1805c119b6 100644 --- a/xfa/fxfa/fm2js/cxfa_fmparser.cpp +++ b/xfa/fxfa/fm2js/cxfa_fmparser.cpp @@ -592,21 +592,12 @@ CXFA_FMParser::ParsePrimaryExpression() { if (HasError() || !IncrementParseDepthAndCheck()) return nullptr; - std::unique_ptr expr; + std::unique_ptr expr = ParseLiteral(); + if (expr) + return NextToken() ? std::move(expr) : nullptr; + uint32_t line = m_lexer->GetCurrentLine(); switch (m_token.m_type) { - case TOKnumber: - expr = - pdfium::MakeUnique(line, m_token.m_string); - if (!NextToken()) - return nullptr; - break; - case TOKstring: - expr = - pdfium::MakeUnique(line, m_token.m_string); - if (!NextToken()) - return nullptr; - break; case TOKidentifier: { WideStringView wsIdentifier(m_token.m_string); if (!NextToken()) @@ -628,11 +619,6 @@ CXFA_FMParser::ParsePrimaryExpression() { } break; } - case TOKnull: - expr = pdfium::MakeUnique(line); - if (!expr || !NextToken()) - return nullptr; - break; case TOKlparen: expr = ParseParenExpression(); if (!expr) @@ -648,6 +634,23 @@ CXFA_FMParser::ParsePrimaryExpression() { return expr; } +// Literal := String | Number | Null +std::unique_ptr CXFA_FMParser::ParseLiteral() { + uint32_t line = m_lexer->GetCurrentLine(); + switch (m_token.m_type) { + case TOKnumber: + return pdfium::MakeUnique(line, + m_token.m_string); + case TOKstring: + return pdfium::MakeUnique(line, + m_token.m_string); + case TOKnull: + return pdfium::MakeUnique(line); + default: + return nullptr; + } +} + std::unique_ptr CXFA_FMParser::ParsePostExpression( std::unique_ptr expr) { AutoRestorer restorer(&m_parse_depth); diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.h b/xfa/fxfa/fm2js/cxfa_fmparser.h index c2da48496f..e78495309e 100644 --- a/xfa/fxfa/fm2js/cxfa_fmparser.h +++ b/xfa/fxfa/fm2js/cxfa_fmparser.h @@ -55,6 +55,7 @@ class CXFA_FMParser { std::unique_ptr ParsePostExpression( std::unique_ptr e); std::unique_ptr ParseIndexExpression(); + std::unique_ptr ParseLiteral(); std::unique_ptr m_lexer; CXFA_FMToken m_token; -- cgit v1.2.3