libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / rust / expand / rust-macro-builtins-location.cc
blob19857487c0bc6e8a7eac59c4a737ec2b740485fd
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
8 // version.
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.
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"
22 namespace Rust {
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));
28 auto str_token
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)));
56 auto tok
57 = make_token (Token::make_int (invoc_locus, std::to_string (current_line)));
59 return AST::Fragment ({line_no}, std::move (tok));
61 } // namespace Rust