@@ -3750,6 +3750,34 @@ bool Parser::rName(irept &name)
3750
3750
return true ;
3751
3751
break ;
3752
3752
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
+
3753
3781
default :
3754
3782
return false ;
3755
3783
}
@@ -7215,14 +7243,6 @@ bool Parser::rPrimaryExpr(exprt &exp)
7215
7243
if (!rVarName (exp ))
7216
7244
return false ;
7217
7245
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
- }
7226
7246
#ifdef DEBUG
7227
7247
std::cout << std::string (__indent, ' ' ) << " Parser::rPrimaryExpr 17\n " ;
7228
7248
#endif
@@ -7385,6 +7405,34 @@ bool Parser::rVarNameCore(exprt &name)
7385
7405
}
7386
7406
return true ;
7387
7407
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
+
7388
7436
default :
7389
7437
return false ;
7390
7438
}
0 commit comments