Patchwork [02/40] make-target-delegates: line break between return type and function name

login
register
mail settings
Submitter Pedro Alves
Date April 14, 2018, 7:09 p.m.
Message ID <20180414190953.24481-3-palves@redhat.com>
Download mbox | patch
Permalink /patch/26709/
State New
Headers show

Comments

Pedro Alves - April 14, 2018, 7:09 p.m.
Before the target_ops C++ification, this wasn't necessary simply
because the methods were wrapped in ()'s, like
  '(*to_my_long_method_name) (target_ops *)',
so
  std::vector<long_type_name>(*to_my_long_method_name) ()TARGET_DEFAULT_IGNORE ()

still parsed correctly.  With the (*) gone, we need this.

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <palves@redhat.com>

	* make-target-delegates (scan_target_h): Don't trim lines here.
	Replace sequences of tabs and/or whitespace with a single
	whitespace.
	(top level, parsing methods): Trim each line before processing it
	here.
---
 gdb/make-target-delegates | 20 +++++++++++++++++++-
 gdb/target.h              |  3 ++-
 2 files changed, 21 insertions(+), 2 deletions(-)

Patch

diff --git a/gdb/make-target-delegates b/gdb/make-target-delegates
index 10853e3e20..83a1afcadf 100755
--- a/gdb/make-target-delegates
+++ b/gdb/make-target-delegates
@@ -102,7 +102,6 @@  sub scan_target_h() {
 
 	# Strip // comments.
 	$_ =~ s,//.*$,,;
-	$_ = trim ($_);
 
 	$all_the_text .= $_;
     }
@@ -110,6 +109,21 @@  sub scan_target_h() {
     # Now strip out the C comments.
     $all_the_text =~ s,/\*(.*?)\*/,,g;
 
+    # Replace sequences of tabs and/or whitespace with a single
+    # whitespace character.  We need the whitespace because the method
+    # may have been split between multiple lines, like e.g.:
+    #
+    #  virtual std::vector<long_type_name>
+    #    my_long_method_name ()
+    #    TARGET_DEFAULT_IGNORE ();
+    #
+    # If we didn't preserve the whitespace, then we'd end up with:
+    #
+    #  virtual std::vector<long_type_name>my_long_method_name ()TARGET_DEFAULT_IGNORE ()
+    #
+    # ... which wouldn't later be parsed correctly.
+    $all_the_text =~ s/[\t\s]+/ /g;
+
     return split (/;/, $all_the_text);
 }
 
@@ -348,6 +362,10 @@  print "\n";
 @argtypes_array = ();
 
 foreach $current_line (@lines) {
+    # See comments in scan_target_h.  Here we strip away the leading
+    # and trailing whitespace.
+    $current_line = trim ($current_line);
+
     next unless $current_line =~ m/$METHOD/;
 
     my $name = $+{name};
diff --git a/gdb/target.h b/gdb/target.h
index b23b7625be..f78eb459dc 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -1067,7 +1067,8 @@  struct target_ops
 
     /* Return a vector of all tracepoints markers string id ID, or all
        markers if ID is NULL.  */
-    virtual std::vector<static_tracepoint_marker> static_tracepoint_markers_by_strid (const char *id)
+    virtual std::vector<static_tracepoint_marker>
+      static_tracepoint_markers_by_strid (const char *id)
       TARGET_DEFAULT_NORETURN (tcomplain ());
 
     /* Return a traceframe info object describing the current