diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-03-25 11:46:24 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-25 11:46:24 +0000 |
commit | 5a15694ee22500458a17f064b42fc7b8051984db (patch) | |
tree | 66c80ed740780967291dd45cc94709c33f643ddf /gcc/rust/parse | |
parent | a7e723469220b6765463d27b3e19ffd27f1baadd (diff) | |
parent | 7fa6e72b1a1a18a8b511a796514bc32591b26e2f (diff) | |
download | gcc-5a15694ee22500458a17f064b42fc7b8051984db.zip gcc-5a15694ee22500458a17f064b42fc7b8051984db.tar.gz gcc-5a15694ee22500458a17f064b42fc7b8051984db.tar.bz2 |
Merge #1063
1063: Handle :meta fragments properly r=CohenArthur a=CohenArthur
This expands :meta fragments properly and allows us to strip assignment expressions
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Diffstat (limited to 'gcc/rust/parse')
-rw-r--r-- | gcc/rust/parse/rust-parse-impl.h | 17 | ||||
-rw-r--r-- | gcc/rust/parse/rust-parse.h | 2 |
2 files changed, 10 insertions, 9 deletions
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index bcf4eca..48c39de 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -11719,7 +11719,7 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr_without_block () { // should be expr without block std::unique_ptr<AST::ExprWithoutBlock> expr - = parse_expr_without_block (); + = parse_expr_without_block (std::move (outer_attrs)); if (lexer.peek_token ()->get_id () == SEMICOLON) { @@ -11764,7 +11764,7 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr_without_block () // FIXME: old code was good until composability was required // return parse_path_based_stmt_or_expr(std::move(outer_attrs)); std::unique_ptr<AST::ExprWithoutBlock> expr - = parse_expr_without_block (); + = parse_expr_without_block (std::move (outer_attrs)); if (lexer.peek_token ()->get_id () == SEMICOLON) { @@ -11787,7 +11787,7 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr_without_block () * expression then make it statement if semi afterwards */ std::unique_ptr<AST::ExprWithoutBlock> expr - = parse_expr_without_block (); + = parse_expr_without_block (std::move (outer_attrs)); if (lexer.peek_token ()->get_id () == SEMICOLON) { @@ -12462,7 +12462,7 @@ Parser<ManagedTokenSource>::parse_expr (int right_binding_power, // parse null denotation (unary part of expression) std::unique_ptr<AST::Expr> expr - = null_denotation (current_token, std::move (outer_attrs), restrictions); + = null_denotation (current_token, {}, restrictions); if (expr == nullptr) { @@ -12477,8 +12477,8 @@ Parser<ManagedTokenSource>::parse_expr (int right_binding_power, current_token = lexer.peek_token (); lexer.skip_token (); - expr = left_denotation (current_token, std::move (expr), AST::AttrVec (), - restrictions); + expr = left_denotation (current_token, std::move (expr), + std::move (outer_attrs), restrictions); if (expr == nullptr) { @@ -13811,7 +13811,7 @@ template <typename ManagedTokenSource> std::unique_ptr<AST::AssignmentExpr> Parser<ManagedTokenSource>::parse_assig_expr ( const_TokenPtr tok ATTRIBUTE_UNUSED, std::unique_ptr<AST::Expr> left, - AST::AttrVec outer_attrs ATTRIBUTE_UNUSED, ParseRestrictions restrictions) + AST::AttrVec outer_attrs, ParseRestrictions restrictions) { // parse RHS (as tok has already been consumed in parse_expression) std::unique_ptr<AST::Expr> right @@ -13824,7 +13824,8 @@ Parser<ManagedTokenSource>::parse_assig_expr ( Location locus = left->get_locus (); return std::unique_ptr<AST::AssignmentExpr> ( - new AST::AssignmentExpr (std::move (left), std::move (right), locus)); + new AST::AssignmentExpr (std::move (left), std::move (right), + std::move (outer_attrs), locus)); } /* Returns the left binding power for the given CompoundAssignmentExpr type. diff --git a/gcc/rust/parse/rust-parse.h b/gcc/rust/parse/rust-parse.h index 5653293..945bce7 100644 --- a/gcc/rust/parse/rust-parse.h +++ b/gcc/rust/parse/rust-parse.h @@ -143,6 +143,7 @@ public: AST::Visibility parse_visibility (); std::unique_ptr<AST::IdentifierPattern> parse_identifier_pattern (); std::unique_ptr<AST::TokenTree> parse_token_tree (); + AST::Attribute parse_attribute_body (); private: void skip_after_semicolon (); @@ -162,7 +163,6 @@ private: AST::Attribute parse_inner_attribute (); AST::AttrVec parse_outer_attributes (); AST::Attribute parse_outer_attribute (); - AST::Attribute parse_attribute_body (); std::unique_ptr<AST::AttrInput> parse_attr_input (); AST::Attribute parse_doc_comment (); |