#!/usr/bin/env python3 # Copyright (C) 2013-2023 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.py import re from typing import Dict, List, TextIO import gdbcopyright # The line we search for in target.h that marks where we should start # looking for methods. TRIGGER = re.compile(r"^struct target_ops$") # The end of the methods part. ENDER = re.compile(r"^\s*};$") # Match a C symbol. SYMBOL = "[a-zA-Z_][a-zA-Z0-9_]*" # Match the name part of a method in struct target_ops. NAME_PART = r"(?P" + SYMBOL + r")\s" # Match the arguments to a method. ARGS_PART = r"(?P\(.*\))" # We strip the indentation so here we only need the caret. INTRO_PART = r"^" POINTER_PART = r"\s*(\*)?\s*" # Match a C++ symbol, including scope operators and template # parameters. E.g., 'std::vector'. CP_SYMBOL = r"[a-zA-Z_][a-zA-Z0-9_<>:]*" # Match the return type when it is "ordinary". SIMPLE_RETURN_PART = r"((struct|class|enum|union)\s+)?" + CP_SYMBOL # Match a return type. RETURN_PART = r"((const|volatile)\s+)?(" + SIMPLE_RETURN_PART + ")" + POINTER_PART # Match "virtual". VIRTUAL_PART = r"virtual\s" # Match the TARGET_DEFAULT_* attribute for a method. TARGET_DEFAULT_PART = r"TARGET_DEFAULT_(?P