#!/usr/bin/perl
# Copyright (C) 2013-2021 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_(?