diff options
Diffstat (limited to 'gcc/rust/expand/rust-macro-builtins.cc')
-rw-r--r-- | gcc/rust/expand/rust-macro-builtins.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index b7bbd32..2678fe4 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -18,6 +18,8 @@ #include "rust-macro-builtins.h" #include "rust-diagnostics.h" +#include "rust-expr.h" +#include "rust-session-manager.h" namespace Rust { AST::ASTFragment @@ -27,4 +29,17 @@ MacroBuiltin::assert (Location invoc_locus, AST::MacroInvocData &invoc) return AST::ASTFragment::create_empty (); } + +AST::ASTFragment +MacroBuiltin::file (Location invoc_locus, AST::MacroInvocData &invoc) +{ + auto current_file + = Session::get_instance ().linemap->location_file (invoc_locus); + auto file_str = AST::SingleASTNode (std::unique_ptr<AST::Expr> ( + new AST::LiteralExpr (current_file, AST::Literal::STRING, + PrimitiveCoreType::CORETYPE_STR, + std::vector<AST::Attribute> (), invoc_locus))); + + return AST::ASTFragment ({file_str}); +} } // namespace Rust |