From fb079cb5c419e03d400a0a139c3ccc4eedc33bef Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 14 Feb 2022 10:19:06 -0700 Subject: [PATCH] Rewrite make-target-delegates in Python I think gdb is probably better off having fewer languages involved when generating code. 'sh' is unavoidable for build-time generation, but for other things, let's use Python. This rewrites make-target-delegates in Python. I've stuck pretty closely to the original code in this rewrite, so it may look slightly weird from a Python perspective. The only output difference is that a copyright header is now generated, using the code introduced in the previous patch. make-target-delegates.py is simpler to invoke, as it knows the correct input file to scan and it creates the output file itself. --- gdb/make-target-delegates | 421 ----------------------------------- gdb/make-target-delegates.py | 340 ++++++++++++++++++++++++++++ gdb/target-delegates.c | 26 ++- 3 files changed, 363 insertions(+), 424 deletions(-) delete mode 100755 gdb/make-target-delegates create mode 100755 gdb/make-target-delegates.py diff --git a/gdb/make-target-delegates b/gdb/make-target-delegates deleted file mode 100755 index f759b5507ca..00000000000 --- a/gdb/make-target-delegates +++ /dev/null @@ -1,421 +0,0 @@ -#!/usr/bin/perl - -# Copyright (C) 2013-2022 Free Software Foundation, Inc. -# -# This file is part of GDB. -# -# This program 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 of the License, or -# (at your option) any later version. -# -# This program 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. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -# Usage: -# make-target-delegates target.h > target-delegates.c - -# The line we search for in target.h that marks where we should start -# looking for methods. -$TRIGGER = qr,^struct target_ops$,; -# The end of the methods part. -$ENDER = qr,^\s*};$,; - -# Match a C symbol. -$SYMBOL = qr,[a-zA-Z_][a-zA-Z0-9_]*,; -# Match the name part of a method in struct target_ops. -$NAME_PART = qr,(?${SYMBOL}+)\s,; -# Match the arguments to a method. -$ARGS_PART = qr,(?\(.*\)),; -# We strip the indentation so here we only need the caret. -$INTRO_PART = qr,^,; - -$POINTER_PART = qr,\s*(\*)?\s*,; - -# Match a C++ symbol, including scope operators and template -# parameters. E.g., 'std::vector'. -$CP_SYMBOL = qr,[a-zA-Z_][a-zA-Z0-9_<>:]*,; -# Match the return type when it is "ordinary". -$SIMPLE_RETURN_PART = qr,((struct|class|enum|union)\s+)?${CP_SYMBOL}+,; - -# Match a return type. -$RETURN_PART = qr,((const|volatile)\s+)?(${SIMPLE_RETURN_PART})${POINTER_PART},; - -# Match "virtual". -$VIRTUAL_PART = qr,virtual\s,; - -# Match the TARGET_DEFAULT_* attribute for a method. -$TARGET_DEFAULT_PART = qr,TARGET_DEFAULT_(?