diff options
Diffstat (limited to 'gcc/rust/expand/rust-macro-builtins.cc')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.cc | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index dc2482a..617202f 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -92,6 +92,22 @@ format_args_maker (AST::FormatArgs::Newline nl) }; } +enum class isGlobalAsm +{ + Yes, + No, +}; + +AST::MacroTranscriberFunc +inline_asm_maker (isGlobalAsm is_global_asm) +{ + bool global_asm = is_global_asm == isGlobalAsm::Yes ? true : false; + + return [global_asm] (location_t loc, AST::MacroInvocData &invoc) { + return MacroBuiltin::asm_handler (loc, invoc, global_asm); + }; +} + std::unordered_map<std::string, AST::MacroTranscriberFunc> MacroBuiltin::builtin_transcribers = { {"assert", MacroBuiltin::assert_handler}, @@ -108,8 +124,8 @@ 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", MacroBuiltin::nonglobal_asm_handler}, - {"global_asm", MacroBuiltin::global_asm_handler}, + {"asm", inline_asm_maker (isGlobalAsm::No)}, + {"global_asm", inline_asm_maker (isGlobalAsm::Yes)}, /* Unimplemented macro builtins */ {"option_env", MacroBuiltin::sorry}, {"concat_idents", MacroBuiltin::sorry}, |