aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util/rust-hir-map.cc
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-02-23 13:37:07 +0000
committerGitHub <noreply@github.com>2022-02-23 13:37:07 +0000
commitbf92a1012264f2544e73a7a8dd0ac1e473c7f658 (patch)
treef7a3fd3afb0c2e2b2678d80dcd742da23c1b8f9a /gcc/rust/util/rust-hir-map.cc
parent10de9cf4f3765526a1a82a4a7d14908b58c6538c (diff)
parent48b3fe622e9a582b076c6f4b19b5e8b69891ac31 (diff)
downloadgcc-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.cc11
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 ());