diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-02-23 13:37:07 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-23 13:37:07 +0000 |
commit | bf92a1012264f2544e73a7a8dd0ac1e473c7f658 (patch) | |
tree | f7a3fd3afb0c2e2b2678d80dcd742da23c1b8f9a /gcc/rust/util/rust-hir-map.cc | |
parent | 10de9cf4f3765526a1a82a4a7d14908b58c6538c (diff) | |
parent | 48b3fe622e9a582b076c6f4b19b5e8b69891ac31 (diff) | |
download | gcc-bf92a1012264f2544e73a7a8dd0ac1e473c7f658.zip gcc-bf92a1012264f2544e73a7a8dd0ac1e473c7f658.tar.gz gcc-bf92a1012264f2544e73a7a8dd0ac1e473c7f658.tar.bz2 |
Merge #969
969: Add builtin macros framework r=CohenArthur a=CohenArthur
This PR adds bases to define new builtin macro functions.
Since we operate at the `insert_macro_def` level, this requires builtin macros to be defined, as is the case in the rust standard library:
```rust
macro_rules! assert {
($cond:expr $(,)?) => {{ /* compiler built-in */ }};
($cond:expr, $($arg:tt)+) => {{ /* compiler built-in */ }};
}
```
Co-authored-by: Arthur Cohen <arthur.cohen@embecosm.com>
Diffstat (limited to 'gcc/rust/util/rust-hir-map.cc')
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 1348e29..1c0e8fc 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -19,6 +19,7 @@ #include "rust-hir-map.h" #include "rust-ast-full.h" #include "rust-hir-full.h" +#include "rust-macro-builtins.h" namespace Rust { namespace Analysis { @@ -741,6 +742,16 @@ Mappings::iterate_trait_items ( void Mappings::insert_macro_def (AST::MacroRulesDefinition *macro) { + static std::map<std::string, std::function<AST::ASTFragment ( + Location, AST::MacroInvocData &)>> + builtin_macros = { + {"assert", MacroBuiltin::assert}, + }; + + auto builtin = builtin_macros.find (macro->get_rule_name ()); + if (builtin != builtin_macros.end ()) + macro->set_builtin_transcriber (builtin->second); + auto it = macroMappings.find (macro->get_node_id ()); rust_assert (it == macroMappings.end ()); |