From 7b25f53a416868059299661ddf769ec4c9c2516d Mon Sep 17 00:00:00 2001 From: Arthur Cohen Date: Thu, 30 Nov 2023 14:11:41 +0100 Subject: libgrust: Add format_parser library Compile libformat_parser and link to it. gcc/rust/ChangeLog: * Make-lang.in: Compile libformat_parser. * ast/rust-fmt.cc: New FFI definitions. * ast/rust-fmt.h: Likewise. * expand/rust-macro-builtins.cc (MacroBuiltin::format_args_handler): Call into libformat_parser. * expand/rust-macro-builtins.h: Define format_args!() handler proper. libgrust/ChangeLog: * libformat_parser/Cargo.lock: New file. * libformat_parser/Cargo.toml: New file. * libformat_parser/generic_format_parser/Cargo.toml: New file. * libformat_parser/generic_format_parser/src/lib.rs: New file. * libformat_parser/src/bin.rs: New file. * libformat_parser/src/lib.rs: New file. --- gcc/rust/expand/rust-macro-builtins.cc | 12 +++++++++++- gcc/rust/expand/rust-macro-builtins.h | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'gcc/rust/expand') diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index 71da575..0e57406 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -30,6 +30,7 @@ #include "rust-parse.h" #include "rust-session-manager.h" #include "rust-attribute-values.h" +#include "rust-fmt.h" namespace Rust { @@ -89,8 +90,8 @@ std::unordered_map {"env", MacroBuiltin::env_handler}, {"cfg", MacroBuiltin::cfg_handler}, {"include", MacroBuiltin::include_handler}, + {"format_args", MacroBuiltin::format_args_handler}, /* Unimplemented macro builtins */ - {"format_args", MacroBuiltin::sorry}, {"option_env", MacroBuiltin::sorry}, {"format_args_nl", MacroBuiltin::sorry}, {"concat_idents", MacroBuiltin::sorry}, @@ -943,6 +944,15 @@ MacroBuiltin::stringify_handler (location_t invoc_locus, } tl::optional +MacroBuiltin::format_args_handler (location_t invoc_locus, + AST::MacroInvocData &invoc) +{ + Fmt::Pieces::collect ("heyo this {is} what I {} want to {3}, {parse}"); + + return AST::Fragment::create_empty (); +} + +tl::optional MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc) { rust_sorry_at (invoc_locus, "unimplemented builtin macro: %qs", diff --git a/gcc/rust/expand/rust-macro-builtins.h b/gcc/rust/expand/rust-macro-builtins.h index 6a84a8b..f9ab3fc 100644 --- a/gcc/rust/expand/rust-macro-builtins.h +++ b/gcc/rust/expand/rust-macro-builtins.h @@ -157,6 +157,9 @@ public: static tl::optional line_handler (location_t invoc_locus, AST::MacroInvocData &invoc); + static tl::optional + format_args_handler (location_t invoc_locus, AST::MacroInvocData &invoc); + static tl::optional sorry (location_t invoc_locus, AST::MacroInvocData &invoc); -- cgit v1.1