1 // Copyright (C) 2020-2024 Free Software Foundation, Inc.
3 // This file is part of GCC.
5 // GCC is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation; either version 3, or (at your option) any later
10 // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 // You should have received a copy of the GNU General Public License
16 // along with GCC; see the file COPYING3. If not see
17 // <http://www.gnu.org/licenses/>.
19 #include "rust-macro-builtins.h"
20 #include "rust-macro-builtins-helpers.h"
23 tl::optional
<AST::Fragment
>
24 MacroBuiltin::file_handler (location_t invoc_locus
, AST::MacroInvocData
&)
26 auto current_file
= LOCATION_FILE (invoc_locus
);
27 auto file_str
= AST::SingleASTNode (make_string (invoc_locus
, current_file
));
29 = make_token (Token::make_string (invoc_locus
, std::move (current_file
)));
31 return AST::Fragment ({file_str
}, std::move (str_token
));
34 tl::optional
<AST::Fragment
>
35 MacroBuiltin::column_handler (location_t invoc_locus
, AST::MacroInvocData
&)
37 auto current_column
= LOCATION_COLUMN (invoc_locus
);
39 auto column_tok
= make_token (
40 Token::make_int (invoc_locus
, std::to_string (current_column
)));
41 auto column_no
= AST::SingleASTNode (std::unique_ptr
<AST::Expr
> (
42 new AST::LiteralExpr (std::to_string (current_column
), AST::Literal::INT
,
43 PrimitiveCoreType::CORETYPE_U32
, {}, invoc_locus
)));
45 return AST::Fragment ({column_no
}, std::move (column_tok
));
48 tl::optional
<AST::Fragment
>
49 MacroBuiltin::line_handler (location_t invoc_locus
, AST::MacroInvocData
&)
51 auto current_line
= LOCATION_LINE (invoc_locus
);
53 auto line_no
= AST::SingleASTNode (std::unique_ptr
<AST::Expr
> (
54 new AST::LiteralExpr (std::to_string (current_line
), AST::Literal::INT
,
55 PrimitiveCoreType::CORETYPE_U32
, {}, invoc_locus
)));
57 = make_token (Token::make_int (invoc_locus
, std::to_string (current_line
)));
59 return AST::Fragment ({line_no
}, std::move (tok
));