Like this?

// Parse a requires clause.
//
//    requires-clause:
//      'requires' logical-or-expression
//
// The required logical-or-expression must be a constant expression.
static tree
cp_parser_requires_clause (cp_parser *parser)
{
  // Parse the constant expression.
  tree expr =
    cp_parser_binary_expression (parser, false, false, PREC_NOT_OPERATOR, NULL);
  if (!require_potential_rvalue_constant_expression (expr))
    return error_mark_node;
  return expr;
}

Okay to commit?

On Sat, Jun 22, 2013 at 9:41 AM, Gabriel Dos Reis <g...@axiomatics.org> wrote:
> Andrew Sutton <andrew.n.sut...@gmail.com> writes:
>
> | > | +  // Concept extensions
> | > | +  case RID_REQUIRES:
> | > | +    return cp_parser_requires_expression (parser);
> | > | +
> | >
> | > I think you meant here "nested requirements", not "extensions" as in
> | > "GNU extensions" or "vendor lock-ins".  We should continue with "nested
> | > requirements" then.
> |
> | This denotes a primary expression, not a nested requirement. I was
> | trying to subset the requirement like the "Objective-C++ expressions"
> | comment just below it.
> |
> | I changed the comment to just "C++ concepts". We may get other primary
> | expressions related to concepts, although I don't have any planned.
>
> OK.
>
> | > | +static inline tree
> | > | +cp_parser_requires_clause (cp_parser *parser)
> | > | +{
> | > | +  // Parse the constant expression.
> | > | +  tree expr =
> | > | +    cp_parser_binary_expression (parser, false, false, 
> PREC_NOT_OPERATOR, NULL);
> | > | +  if (!require_potential_rvalue_constant_expression (expr))
> | > | +    return error_mark_node;
> | > | +  return expr;
> | >
> | > The grammar says "constant-expression".  You should use
> | > cp_parser_constant_expression.
> |
> | When we started talking about requirements, we didn't want the full
> | breadth of an expression, so I limited it to a logical-or-expression
> | that is also a constant expression. Commas, assignments, and
> | conditions at the top-level seemed counter-intuitive.
>
> I guess what I was saying earlier was that the comment preceding the
> function said "constant-expression", and we want the code to match that.
>
> I am not sure it is less counter-intuitive to allow non-toplevel comma
> constant expression  but disallow toplevel ones; they will all end up
> being logical literal terms anyway.  We shouldn't worry about
> assignments, for we are enforcing the semantics constraints of constant
> expressions.
>
> | Do we want to allow any constant expression, or should we just change
> | the docs to logical-or-expression that is also a constant expression?
>
> Yes; and change the comments to say the grammar term is
> logical-or-expression,  with additional semantics constraint that they
> must be constant expressions.
>
> -- Gaby



-- 
Andrew Sutton
andrew.n.sut...@gmail.com

Reply via email to