Skip to content

Commit

Permalink
proc_macro: Remode function indirection
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
P-E-P committed Jul 26, 2023
1 parent 2755e6a commit f0d4c9d
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 22 deletions.
8 changes: 1 addition & 7 deletions gcc/rust/expand/rust-proc-macro.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 <typename Symbol, typename Callback>
bool
register_callback (void *handle, Symbol, std::string symbol_name,
Expand Down Expand Up @@ -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,
Expand Down
35 changes: 35 additions & 0 deletions libgrust/libproc_macro/bridge.h
Original file line number Diff line number Diff line change
@@ -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
// <http://www.gnu.org/licenses/>.
#ifndef BRIDGE_H
#define BRIDGE_H

namespace ProcMacro {

enum class BridgeState
{
Available,
Unavailable,
};

}

#endif /* ! BRIDGE_H */
14 changes: 5 additions & 9 deletions libgrust/libproc_macro/proc_macro.cc
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
// <http://www.gnu.org/licenses/>.

#include "proc_macro.h"
#include "bridge.h"

namespace ProcMacro {

Expand Down Expand Up @@ -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;
3 changes: 0 additions & 3 deletions libgrust/libproc_macro/proc_macro.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,6 @@ struct ProcmacroArray
Procmacro *macros;
};

bool
not_available ();

extern "C" bool
bridge_is_available ();

Expand Down
6 changes: 3 additions & 3 deletions libgrust/libproc_macro/registration.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@

#include <string>
#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 */

0 comments on commit f0d4c9d

Please sign in to comment.