diff options
Diffstat (limited to 'gcc/rust/expand/rust-macro-builtins.cc')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.cc | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index bc5bc94..3d64f1d 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -62,7 +62,8 @@ const BiMap<std::string, BuiltinMacro> MacroBuiltin::builtins = {{ {"concat_idents", BuiltinMacro::ConcatIdents}, {"module_path", BuiltinMacro::ModulePath}, {"asm", BuiltinMacro::Asm}, - {"llvm_asm", BuiltinMacro::LlvmAsm}, + // FIXME: Is that okay + {"llvm_asm", BuiltinMacro::Asm}, {"global_asm", BuiltinMacro::GlobalAsm}, {"log_syntax", BuiltinMacro::LogSyntax}, {"trace_macros", BuiltinMacro::TraceMacros}, @@ -82,14 +83,32 @@ const BiMap<std::string, BuiltinMacro> MacroBuiltin::builtins = {{ {"Ord", BuiltinMacro::Ord}, {"PartialOrd", BuiltinMacro::PartialOrd}, {"Hash", BuiltinMacro::Hash}, - }}; AST::MacroTranscriberFunc format_args_maker (AST::FormatArgs::Newline nl) { - return [nl] (location_t loc, AST::MacroInvocData &invoc) { - return MacroBuiltin::format_args_handler (loc, invoc, nl); + return [nl] (location_t loc, AST::MacroInvocData &invoc, + AST::InvocKind semicolon) { + return MacroBuiltin::format_args_handler (loc, invoc, semicolon, nl); + }; +} + +AST::MacroTranscriberFunc +inline_asm_maker (AST::AsmKind global_asm) +{ + return [global_asm] (location_t loc, AST::MacroInvocData &invoc, + AST::InvocKind semicolon) { + return MacroBuiltin::asm_handler (loc, invoc, semicolon, global_asm); + }; +} + +AST::MacroTranscriberFunc +inline_llvm_asm_maker (AST::AsmKind global_asm) +{ + return [global_asm] (location_t loc, AST::MacroInvocData &invoc, + AST::InvocKind semicolon) { + return MacroBuiltin::llvm_asm_handler (loc, invoc, semicolon, global_asm); }; } @@ -109,13 +128,14 @@ std::unordered_map<std::string, AST::MacroTranscriberFunc> {"include", MacroBuiltin::include_handler}, {"format_args", format_args_maker (AST::FormatArgs::Newline::No)}, {"format_args_nl", format_args_maker (AST::FormatArgs::Newline::Yes)}, + {"asm", inline_asm_maker (AST::AsmKind::Inline)}, + // FIXME: Is that okay? + {"llvm_asm", inline_llvm_asm_maker (AST::AsmKind::Inline)}, + {"global_asm", inline_asm_maker (AST::AsmKind::Global)}, + {"option_env", MacroBuiltin::option_env_handler}, /* Unimplemented macro builtins */ - {"option_env", MacroBuiltin::sorry}, {"concat_idents", MacroBuiltin::sorry}, {"module_path", MacroBuiltin::sorry}, - {"asm", MacroBuiltin::sorry}, - {"llvm_asm", MacroBuiltin::sorry}, - {"global_asm", MacroBuiltin::sorry}, {"log_syntax", MacroBuiltin::sorry}, {"trace_macros", MacroBuiltin::sorry}, {"test", MacroBuiltin::sorry}, @@ -123,6 +143,9 @@ std::unordered_map<std::string, AST::MacroTranscriberFunc> {"test_case", MacroBuiltin::sorry}, {"global_allocator", MacroBuiltin::sorry}, {"cfg_accessible", MacroBuiltin::sorry}, + {"rustc_const_stable", MacroBuiltin::sorry}, + {"rustc_const_unstable", MacroBuiltin::sorry}, + {"track_caller", MacroBuiltin::sorry}, /* Derive builtins do not need a real transcriber, but still need one. It should however never be called since builtin derive macros get expanded differently, and benefit from knowing on what kind of items they are @@ -151,7 +174,8 @@ builtin_macro_from_string (const std::string &identifier) } tl::optional<AST::Fragment> -MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc) +MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc, + AST::InvocKind semicolon) { rust_sorry_at (invoc_locus, "unimplemented builtin macro: %qs", invoc.get_path ().as_string ().c_str ()); @@ -161,7 +185,8 @@ MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc) tl::optional<AST::Fragment> MacroBuiltin::proc_macro_builtin (location_t invoc_locus, - AST::MacroInvocData &invoc) + AST::MacroInvocData &invoc, + AST::InvocKind semicolon) { rust_error_at (invoc_locus, "cannot invoke derive macro: %qs", invoc.get_path ().as_string ().c_str ()); |