@@ -3750,6 +3750,34 @@ bool Parser::rName(irept &name)
37503750 return true ;
37513751 break ;
37523752
3753+ case TOK_DECLTYPE:
3754+ #ifdef DEBUG
3755+ std::cout << std::string (__indent, ' ' ) << " Parser::rName 9\n " ;
3756+ #endif
3757+ lex.get_token (tk);
3758+ {
3759+ components.push_back (typet{ID_decltype});
3760+ set_location (components.back (), tk);
3761+
3762+ if (lex.get_token (tk)!=' (' )
3763+ return false ;
3764+
3765+ // the argument is always an expression
3766+
3767+ exprt expr;
3768+ if (!rCommaExpression (expr))
3769+ return false ;
3770+
3771+ if (lex.get_token (tk)!=' )' )
3772+ return false ;
3773+
3774+ components.back ().add (ID_expr_arg).swap (expr);
3775+
3776+ if (lex.LookAhead (0 ) != TOK_SCOPE)
3777+ return false ;
3778+ }
3779+ break ;
3780+
37533781 default :
37543782 return false ;
37553783 }
@@ -7215,14 +7243,6 @@ bool Parser::rPrimaryExpr(exprt &exp)
72157243 if (!rVarName (exp))
72167244 return false ;
72177245
7218- if (lex.LookAhead (0 )==TOK_SCOPE)
7219- {
7220- lex.get_token (tk);
7221-
7222- // exp=new PtreeStaticUserStatementExpr(exp,
7223- // Ptree::Cons(new Leaf(tk), exp2));
7224- // TODO
7225- }
72267246#ifdef DEBUG
72277247 std::cout << std::string (__indent, ' ' ) << " Parser::rPrimaryExpr 17\n " ;
72287248#endif
@@ -7385,6 +7405,34 @@ bool Parser::rVarNameCore(exprt &name)
73857405 }
73867406 return true ;
73877407
7408+ case TOK_DECLTYPE:
7409+ #ifdef DEBUG
7410+ std::cout << std::string (__indent, ' ' ) << " Parser::rVarNameCore 8\n " ;
7411+ #endif
7412+ lex.get_token (tk);
7413+ {
7414+ components.push_back (typet{ID_decltype});
7415+ set_location (components.back (), tk);
7416+
7417+ if (lex.get_token (tk)!=' (' )
7418+ return false ;
7419+
7420+ // the argument is always an expression
7421+
7422+ exprt expr;
7423+ if (!rCommaExpression (expr))
7424+ return false ;
7425+
7426+ if (lex.get_token (tk)!=' )' )
7427+ return false ;
7428+
7429+ components.back ().add (ID_expr_arg).swap (expr);
7430+
7431+ if (lex.LookAhead (0 ) != TOK_SCOPE)
7432+ return false ;
7433+ }
7434+ break ;
7435+
73887436 default :
73897437 return false ;
73907438 }
0 commit comments