Branch data Line data Source code
1 : : // Copyright (C) 2020-2024 Free Software Foundation, Inc.
2 : :
3 : : // This file is part of GCC.
4 : :
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
8 : : // version.
9 : :
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
13 : : // for more details.
14 : :
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/>.
18 : :
19 : : #include "rust-macro-builtins.h"
20 : : #include "rust-macro-builtins-helpers.h"
21 : :
22 : : namespace Rust {
23 : : tl::optional<AST::Fragment>
24 : 7 : MacroBuiltin::file_handler (location_t invoc_locus, AST::MacroInvocData &)
25 : : {
26 : 7 : auto current_file = LOCATION_FILE (invoc_locus);
27 : 7 : auto file_str = AST::SingleASTNode (make_string (invoc_locus, current_file));
28 : 7 : auto str_token
29 : 14 : = make_token (Token::make_string (invoc_locus, std::move (current_file)));
30 : :
31 : 21 : return AST::Fragment ({file_str}, std::move (str_token));
32 : 7 : }
33 : :
34 : : tl::optional<AST::Fragment>
35 : 14 : MacroBuiltin::column_handler (location_t invoc_locus, AST::MacroInvocData &)
36 : : {
37 : 14 : auto current_column = LOCATION_COLUMN (invoc_locus);
38 : :
39 : 14 : auto column_tok = make_token (
40 : 28 : Token::make_int (invoc_locus, std::to_string (current_column)));
41 : 14 : auto column_no = AST::SingleASTNode (std::unique_ptr<AST::Expr> (
42 : 14 : new AST::LiteralExpr (std::to_string (current_column), AST::Literal::INT,
43 : 28 : PrimitiveCoreType::CORETYPE_U32, {}, invoc_locus)));
44 : :
45 : 42 : return AST::Fragment ({column_no}, std::move (column_tok));
46 : 14 : }
47 : :
48 : : tl::optional<AST::Fragment>
49 : 15 : MacroBuiltin::line_handler (location_t invoc_locus, AST::MacroInvocData &)
50 : : {
51 : 15 : auto current_line = LOCATION_LINE (invoc_locus);
52 : :
53 : 15 : auto line_no = AST::SingleASTNode (std::unique_ptr<AST::Expr> (
54 : 15 : new AST::LiteralExpr (std::to_string (current_line), AST::Literal::INT,
55 : 30 : PrimitiveCoreType::CORETYPE_U32, {}, invoc_locus)));
56 : 15 : auto tok
57 : 30 : = make_token (Token::make_int (invoc_locus, std::to_string (current_line)));
58 : :
59 : 45 : return AST::Fragment ({line_no}, std::move (tok));
60 : 15 : }
61 : : } // namespace Rust
|