From f0d4c9d11c1940865af20b9fedde3a3aa8dc1adc Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Wed, 26 Jul 2023 17:44:50 +0200 Subject: [PATCH] proc_macro: Remode function indirection There was no need to register a function when the value could be registered directly. gcc/rust/ChangeLog: * expand/rust-proc-macro.cc (available): Remove function. (load_macros_array): There was no need for an indirection here. ChangeLog: * libgrust/libproc_macro/proc_macro.cc (not_available): Remove function. * libgrust/libproc_macro/proc_macro.h (not_available): Remove function prototype. * libgrust/libproc_macro/registration.h: Change symbol type. * libgrust/libproc_macro/bridge.h: New file. Signed-off-by: Pierre-Emmanuel Patry --- gcc/rust/expand/rust-proc-macro.cc | 8 +----- libgrust/libproc_macro/bridge.h | 35 +++++++++++++++++++++++++++ libgrust/libproc_macro/proc_macro.cc | 14 ++++------- libgrust/libproc_macro/proc_macro.h | 3 --- libgrust/libproc_macro/registration.h | 6 ++--- 5 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 libgrust/libproc_macro/bridge.h diff --git a/gcc/rust/expand/rust-proc-macro.cc b/gcc/rust/expand/rust-proc-macro.cc index b6cfe2543941..9fee4bb03bda 100644 --- a/gcc/rust/expand/rust-proc-macro.cc +++ b/gcc/rust/expand/rust-proc-macro.cc @@ -56,12 +56,6 @@ static_assert ( ProcMacro::from_str_function_t>::value, "Registration callback signature not synced, check proc macro internals."); -static bool -available () -{ - return true; -} - template bool register_callback (void *handle, Symbol, std::string symbol_name, @@ -102,7 +96,7 @@ load_macros_array (std::string path) tokenstream_from_string)) return nullptr; if (!REGISTER_CALLBACK (handle, __gccrs_proc_macro_is_available_fn, - available)) + ProcMacro::BridgeState::Available)) return nullptr; // FIXME: Add CrateStableId handling, right now all versions may be loaded, diff --git a/libgrust/libproc_macro/bridge.h b/libgrust/libproc_macro/bridge.h new file mode 100644 index 000000000000..47eedffc4c14 --- /dev/null +++ b/libgrust/libproc_macro/bridge.h @@ -0,0 +1,35 @@ +// Copyright (C) 2023 Free Software Foundation, Inc. +// +// This file is part of the GNU Proc Macro Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . +#ifndef BRIDGE_H +#define BRIDGE_H + +namespace ProcMacro { + +enum class BridgeState +{ + Available, + Unavailable, +}; + +} + +#endif /* ! BRIDGE_H */ diff --git a/libgrust/libproc_macro/proc_macro.cc b/libgrust/libproc_macro/proc_macro.cc index e05ec5300b73..b1e108e74eb1 100644 --- a/libgrust/libproc_macro/proc_macro.cc +++ b/libgrust/libproc_macro/proc_macro.cc @@ -21,6 +21,7 @@ // . #include "proc_macro.h" +#include "bridge.h" namespace ProcMacro { @@ -52,17 +53,12 @@ Procmacro::make_bang (const char *name, BangMacro macro) extern "C" bool bridge_is_available () { - return __gccrs_proc_macro_is_available_fn (); -} - -bool -not_available () -{ - return false; + return __gccrs_proc_macro_is_available_fn + == ProcMacro::BridgeState::Available; } } // namespace ProcMacro ProcMacro::from_str_function_t __gccrs_proc_macro_from_str_fn = nullptr; -ProcMacro::is_available_function_t __gccrs_proc_macro_is_available_fn - = ProcMacro::not_available; +ProcMacro::is_available_t __gccrs_proc_macro_is_available_fn + = ProcMacro::BridgeState::Unavailable; diff --git a/libgrust/libproc_macro/proc_macro.h b/libgrust/libproc_macro/proc_macro.h index 077e1cbbb48f..60d9fcb75b15 100644 --- a/libgrust/libproc_macro/proc_macro.h +++ b/libgrust/libproc_macro/proc_macro.h @@ -99,9 +99,6 @@ struct ProcmacroArray Procmacro *macros; }; -bool -not_available (); - extern "C" bool bridge_is_available (); diff --git a/libgrust/libproc_macro/registration.h b/libgrust/libproc_macro/registration.h index 76688632ced2..0074e993488e 100644 --- a/libgrust/libproc_macro/registration.h +++ b/libgrust/libproc_macro/registration.h @@ -25,16 +25,16 @@ #include #include "tokenstream.h" +#include "bridge.h" namespace ProcMacro { using from_str_function_t = ProcMacro::TokenStream (*) (std::string &, bool &); -using is_available_function_t = bool (*) (); +using is_available_t = ProcMacro::BridgeState; } // namespace ProcMacro extern "C" ProcMacro::from_str_function_t __gccrs_proc_macro_from_str_fn; -extern "C" ProcMacro::is_available_function_t - __gccrs_proc_macro_is_available_fn; +extern "C" ProcMacro::is_available_t __gccrs_proc_macro_is_available_fn; #endif /* !REGISTRATION_H */