From 8db58652d87e3b3bd208aea8f3aad14427780f0a Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Patry Date: Wed, 26 Jul 2023 17:44:50 +0200 Subject: gccrs: 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. libgrust/ChangeLog: * libproc_macro/proc_macro.cc (not_available): Remove function. * libproc_macro/proc_macro.h (not_available): Remove function prototype. * libproc_macro/registration.h: Change symbol type. * libproc_macro/bridge.h: New file. Signed-off-by: Pierre-Emmanuel Patry --- 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 +++--- 4 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 libgrust/libproc_macro/bridge.h (limited to 'libgrust/libproc_macro') diff --git a/libgrust/libproc_macro/bridge.h b/libgrust/libproc_macro/bridge.h new file mode 100644 index 0000000..47eedff --- /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 e05ec53..b1e108e 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 077e1cb..60d9fcb 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 7668863..0074e99 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 */ -- cgit v1.1