compiler: prune away gcc-specific linemap usage
authorThan McIntosh <thanm@google.com>
Mon, 10 Oct 2016 17:33:32 +0000 (17:33 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 10 Oct 2016 17:33:32 +0000 (17:33 +0000)
    Add an interface to the go Linemap class to allow clients to ask for the
    line number for a Location (for debugging dumps), so as to move some
    gcc-specific location code into the back end.

    Reviewed-on: https://go-review.googlesource.com/30699

* go-linemap.cc (Gcc_linemap::location_line): New method.

From-SVN: r240942

gcc/go/ChangeLog
gcc/go/go-linemap.cc
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/escape.cc
gcc/go/gofrontend/go-linemap.h

index 070acc54b4aac56b71046fb191ae20a323f607dc..6ea6138c327e7a27440634dd5dcfbec0ca5fb695 100644 (file)
@@ -1,3 +1,7 @@
+2016-10-10  Than McIntosh  <thanm@google.com>
+
+       * go-linemap.cc (Gcc_linemap::location_line): New method.
+
 2016-10-10  Eric Botcazou  <ebotcazou@adacore.com>
 
        * config-lang.in (lang_requires_boot_languages): Delete.
index b58a54b9544f59d21ba08430219af04e24c1a5a9..22498d940adbfc7ad4705b8b6a6d75dd18b9c8d5 100644 (file)
@@ -32,6 +32,9 @@ class Gcc_linemap : public Linemap
   std::string
   to_string(Location);
 
+  int
+  location_line(Location);
+
  protected:
   Location
   get_predeclared_location();
@@ -88,6 +91,13 @@ Gcc_linemap::to_string(Location location)
   return ss.str();
 }
 
+// Return the line number for a given location (for debugging dumps)
+int
+Gcc_linemap::location_line(Location loc)
+{
+  return LOCATION_LINE(loc.gcc_location());
+}
+
 // Stop getting locations.
 
 void
index 05752dac7a2112343e13046af89c83bb385cbe7a..e22f79e4766f7e6aae95be2aff6cc88cc7cf0073 100644 (file)
@@ -1,4 +1,4 @@
-9401e714d690e3907a64ac5c8cd5aed9e28f511b
+f3658aea2493c7f1c4a72502f9e7da562c7764c4
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index e0df77dee67c4d4c2c72ff9941c820e586847ae0..732af77a1a114305e1668f4152036eb6708938fb 100644 (file)
@@ -145,7 +145,7 @@ Node::details() const
   std::stringstream details;
 
   if (!this->is_sink())
-    details << " l(" << LOCATION_LINE(this->location().gcc_location()) << ")";
+    details << " l(" << Linemap::location_to_line(this->location()) << ")";
 
   bool is_varargs = false;
   bool is_address_taken = false;
index d60cff6f5d59c3874efd84bfc4cb775dfd6d471c..f0ca99d905c00fe11f4abe7bfc4f03a824d87139 100644 (file)
@@ -63,6 +63,10 @@ class Linemap
   virtual std::string
   to_string(Location) = 0;
 
+  // Return the line number for a given location (for debugging dumps)
+  virtual int
+  location_line(Location) = 0;
+
  protected:
   // Return a special Location used for predeclared identifiers.  This
   // Location should be different from that for any actual source
@@ -135,6 +139,14 @@ class Linemap
     go_assert(Linemap::instance_ != NULL);
     return Linemap::instance_->to_string(loc);
   }
+
+  // Return line number for location
+  static int
+  location_to_line(Location loc)
+  {
+    go_assert(Linemap::instance_ != NULL);
+    return Linemap::instance_->location_line(loc);
+  }
 };
 
 // The backend interface must define this function.  It should return