gccrs: Implement declarative macro 2.0 parser
authorRaiki Tamura <tamaron1203@gmail.com>
Sun, 18 Dec 2022 16:48:54 +0000 (01:48 +0900)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 6 Apr 2023 08:47:17 +0000 (10:47 +0200)
commite1394230b3fde0efa8afb53961764991f5fd0e7e
tree32589dce361e497559d5c615ed39468eba36d4f8
parentef792b9658d6bde0001d7340b10d2d3193ecbc09
gccrs: Implement declarative macro 2.0 parser

gcc/rust/ChangeLog:

* ast/rust-ast-full-decls.h (class MacroItem): Remove forward declaration.
* ast/rust-ast-full-test.cc (MacroRulesDefinition):
Rework MacroRulesDefinition class
* ast/rust-ast.h (class MacroItem): Remove abstract class.
* ast/rust-item.h (class MacroItem): Remove forward declaration.
* ast/rust-macro.h (class MacroItem): Likewise.
(class MacroRulesDefinition): Add MacroKind enum.
(class MacroInvocation): Fix inheritance.
* lex/rust-token.h: Token "macro" is now used.
* parse/rust-parse-impl.h (Parser::parse_item): Add handling for MACRO.
(Parser::parse_vis_item): Call into parse_decl_macro_def.
(Parser::parse_macro_item): Delete function.
(Parser::parse_macro_rules_def): Return MBE macros only.
(Parser::parse_decl_macro_def): New function.
(Parser::parse_stmt): Handle MACRO token.
(Parser::parse_stmt_or_expr_without_block): Call into parse_macro_rules_def.
* parse/rust-parse.h: Declare new function.

gcc/testsuite/ChangeLog:

* rust/compile/decl_macro1.rs: New test.
* rust/compile/decl_macro2.rs: New test.
* rust/compile/decl_macro3.rs: New test.
* rust/compile/decl_macro4.rs: New test.
* rust/compile/decl_macro5.rs: New test.
* rust/compile/decl_macro6.rs: New test.
* rust/compile/decl_macro7.rs: New test.
* rust/execute/torture/decl_macro1.rs: New test.
* rust/execute/torture/decl_macro2.rs: New test.
* rust/execute/torture/decl_macro3.rs: New test.
* rust/execute/torture/decl_macro4.rs: New test.

Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
19 files changed:
gcc/rust/ast/rust-ast-full-decls.h
gcc/rust/ast/rust-ast-full-test.cc
gcc/rust/ast/rust-ast.h
gcc/rust/ast/rust-item.h
gcc/rust/ast/rust-macro.h
gcc/rust/lex/rust-token.h
gcc/rust/parse/rust-parse-impl.h
gcc/rust/parse/rust-parse.h
gcc/testsuite/rust/compile/decl_macro1.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/decl_macro2.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/decl_macro3.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/decl_macro4.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/decl_macro5.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/decl_macro6.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/decl_macro7.rs [new file with mode: 0644]
gcc/testsuite/rust/execute/torture/decl_macro1.rs [new file with mode: 0644]
gcc/testsuite/rust/execute/torture/decl_macro2.rs [new file with mode: 0644]
gcc/testsuite/rust/execute/torture/decl_macro3.rs [new file with mode: 0644]
gcc/testsuite/rust/execute/torture/decl_macro4.rs [new file with mode: 0644]