diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/expand/mod.cpp | 4 | ||||
| -rw-r--r-- | src/parse/common.hpp | 1 | ||||
| -rw-r--r-- | src/parse/expr.cpp | 8 | 
3 files changed, 10 insertions, 3 deletions
| diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index 8060d104..962e49de 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -309,7 +309,9 @@ struct CExpandExpr:              {                  SET_MODULE( (*ttl), mod );                  // Reparse as expression / item -                auto newexpr = Parse_Expr0(*ttl); +                bool    add_silence_if_end = false; +                auto newexpr = Parse_ExprBlockLine(*ttl, &add_silence_if_end); +                // TODO: use add_silence_if_end - Applies if this node is the last node in the block.                  // Then call visit on it again                  DEBUG("--- Visiting new node");                  this->visit(newexpr); diff --git a/src/parse/common.hpp b/src/parse/common.hpp index 49a0bdf8..12d56eb3 100644 --- a/src/parse/common.hpp +++ b/src/parse/common.hpp @@ -54,6 +54,7 @@ extern AST::Expr   Parse_ExprBlock(TokenStream& lex);  extern AST::ExprNodeP   Parse_Expr0(TokenStream& lex);
  extern AST::ExprNodeP   Parse_ExprVal(TokenStream& lex);
  extern AST::ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe=false);
 +extern AST::ExprNodeP Parse_ExprBlockLine(TokenStream& lex, bool *add_silence);
  extern AST::ExprNodeP Parse_Stmt(TokenStream& lex);
 diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp index 56b28546..ffc2fa19 100644 --- a/src/parse/expr.cpp +++ b/src/parse/expr.cpp @@ -23,7 +23,7 @@ static inline ExprNodeP mk_exprnodep(const TokenStream& lex, AST::ExprNode* en){  #define NEWNODE(type, ...)  mk_exprnodep(lex, new type(__VA_ARGS__))
  //ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe=false);    // common.hpp
 -ExprNodeP Parse_ExprBlockLine(TokenStream& lex, bool *add_silence);
 +//ExprNodeP Parse_ExprBlockLine(TokenStream& lex, bool *add_silence);
  ExprNodeP Parse_ExprBlockLine_Stmt(TokenStream& lex, bool *add_silence);
  //ExprNodeP Parse_Stmt(TokenStream& lex);   // common.hpp
  ExprNodeP Parse_Expr0(TokenStream& lex);
 @@ -256,7 +256,11 @@ ExprNodeP Parse_ExprBlockLine_Stmt(TokenStream& lex, bool *add_silence)      // If this expression statement wasn't followed by a semicolon, then it's yielding its value out of the block.
      // - I.e. The block should be ending
      if( GET_TOK(tok, lex) != TOK_SEMICOLON ) {
 -        CHECK_TOK(tok, TOK_BRACE_CLOSE);
 +        // - Allow TOK_EOF for macro expansion.
 +        if( tok.type() == TOK_EOF )
 +            ;
 +        else
 +            CHECK_TOK(tok, TOK_BRACE_CLOSE);
          PUTBACK(tok, lex);
      }
      else {
 | 
