FreeBSD/contrib/gcc/cp/parser.c
/* Parse an assignment-expression.

   assignment-expression:
     conditional-expression
     logical-or-expression assignment-operator assignment_expression
     throw-expression

   CAST_P is true if this expression is the target of a cast.

   Returns a representation for the expression.  */
Parse an assignment-expression.

CAST_P is true if this expression is the target of a cast.

Returns a representation for the expression.
Parse an assignment - expression . CAST_P is true if this expression is the target of a cast . Returns a representation for the expression .
static tree
cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
{
  tree expr;
  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
    expr = cp_parser_throw_expression (parser);
  else
    {
      expr = cp_parser_binary_expression (parser, cast_p);
      if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
	return cp_parser_question_colon_clause (parser, expr);
      else
	{
	  enum tree_code assignment_operator;
	  assignment_operator
	    = cp_parser_assignment_operator_opt (parser);
	  if (assignment_operator != ERROR_MARK)
	    {
	      tree rhs;
	      rhs = cp_parser_assignment_expression (parser, cast_p);
	      if (cp_parser_non_integral_constant_expression (parser,
							      "an assignment"))
		return error_mark_node;
	      expr = build_x_modify_expr (expr,
					  assignment_operator,
					  rhs);
	    }
	}
    }
  return expr;
}
static tree cp_parser_assignment_expression ( cp_parser * parser , bool cast_p ) { tree expr ; if ( cp_lexer_next_token_is_keyword ( parser -> lexer , RID_THROW ) ) expr = cp_parser_throw_expression ( parser ) ; else { expr = cp_parser_binary_expression ( parser , cast_p ) ; if ( cp_lexer_next_token_is ( parser -> lexer , CPP_QUERY ) ) return cp_parser_question_colon_clause ( parser , expr ) ; else { enum tree_code assignment_operator ; assignment_operator = cp_parser_assignment_operator_opt ( parser ) ; if ( assignment_operator != ERROR_MARK ) { tree rhs ; rhs = cp_parser_assignment_expression ( parser , cast_p ) ; if ( cp_parser_non_integral_constant_expression ( parser , " " ) ) return error_mark_node ; expr = build_x_modify_expr ( expr , assignment_operator , rhs ) ; } } } return expr ; }
Parse an assignment-expression.
Parse an assignment - expression .
/* If the next token is the `throw' keyword, then we're looking at
     a throw-expression.  */ /* Otherwise, it must be that we are looking at a
     logical-or-expression.  */ /* Parse the binary expressions (logical-or-expression).  */ /* If the next token is a `?' then we're actually looking at a
	 conditional-expression.  */ /* If it's an assignment-operator, we're using the second
	     production.  */ /* Parse the right-hand side of the assignment.  */ /* An assignment may not appear in a
		 constant-expression.  */ /* Build the assignment expression.  */