ExprResult DataStmtEngine::getAndCheckValue(QualType LHSType, const Expr *LHS) { if(!HasValues(LHS)) return ExprResult(true); auto Value = Values.getValue(); Values.advance(); return Sem.CheckAndApplyAssignmentConstraints(Value->getLocation(), LHSType, Value, Sema::AssignmentAction::Initializing, LHS); }
/// ParseFunctionCallArgumentList - Parses an argument list to a call expression. ExprResult Parser::ParseFunctionCallArgumentList(SmallVectorImpl<Expr*> &Args, SourceLocation &RParenLoc) { if(!ExpectAndConsume(tok::l_paren)) return ExprError(); RParenLoc = getExpectedLoc(); if(ConsumeIfPresent(tok::r_paren)) return ExprResult(); auto PunctuationTok = "("; do { if(Tok.isAtStartOfStatement()) break; auto E = ParseExpectedFollowupExpression(PunctuationTok); if(E.isInvalid()) SkipUntil(tok::comma, tok::r_paren, true, true); else Args.push_back(E.get()); PunctuationTok = ","; } while (ConsumeIfPresent(tok::comma)); RParenLoc = getExpectedLoc(); ExpectAndConsume(tok::r_paren, 0, "", tok::r_paren); return ExprResult(); }
/// ParseStopStmt /// [R840]: /// stop-stmt := /// STOP [ stop-code ] /// [R841]: /// stop-code := /// scalar-char-constant or /// digit [ digit [ digit [ digit [ digit ] ] ] ] Parser::StmtResult Parser::ParseStopStmt() { auto Loc = ConsumeToken(); //FIXME: parse optional stop-code. return Actions.ActOnStopStmt(Context, Loc, ExprResult(), StmtLabel); }