Skip to content

Commit 986b8c3

Browse files
committed
builtins: Add file!() macro
1 parent bf92a10 commit 986b8c3

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

gcc/rust/expand/rust-macro-builtins.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
#include "rust-macro-builtins.h"
2020
#include "rust-diagnostics.h"
21+
#include "rust-expr.h"
22+
#include "rust-session-manager.h"
2123

2224
namespace Rust {
2325
AST::ASTFragment
@@ -27,4 +29,17 @@ MacroBuiltin::assert (Location invoc_locus, AST::MacroInvocData &invoc)
2729

2830
return AST::ASTFragment::create_empty ();
2931
}
32+
33+
AST::ASTFragment
34+
MacroBuiltin::file (Location invoc_locus, AST::MacroInvocData &invoc)
35+
{
36+
auto current_file
37+
= Session::get_instance ().linemap->location_file (invoc_locus);
38+
auto file_str = AST::SingleASTNode (std::unique_ptr<AST::Expr> (
39+
new AST::LiteralExpr (current_file, AST::Literal::STRING,
40+
PrimitiveCoreType::CORETYPE_STR,
41+
std::vector<AST::Attribute> (), invoc_locus)));
42+
43+
return AST::ASTFragment ({file_str});
44+
}
3045
} // namespace Rust

gcc/rust/expand/rust-macro-builtins.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ class MacroBuiltin
2828
public:
2929
static AST::ASTFragment assert (Location invoc_locus,
3030
AST::MacroInvocData &invoc);
31+
32+
static AST::ASTFragment file (Location invoc_locus,
33+
AST::MacroInvocData &invoc);
3134
};
3235
} // namespace Rust
3336

gcc/rust/util/rust-hir-map.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,7 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition *macro)
746746
Location, AST::MacroInvocData &)>>
747747
builtin_macros = {
748748
{"assert", MacroBuiltin::assert},
749+
{"file", MacroBuiltin::file},
749750
};
750751

751752
auto builtin = builtin_macros.find (macro->get_rule_name ());

0 commit comments

Comments
 (0)