Commit 71543388 by Than McIntosh Committed by Ian Lance Taylor

compiler: prune away gcc-specific linemap usage

    
    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
parent 5d8c099e
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> 2016-10-10 Eric Botcazou <ebotcazou@adacore.com>
* config-lang.in (lang_requires_boot_languages): Delete. * config-lang.in (lang_requires_boot_languages): Delete.
......
...@@ -32,6 +32,9 @@ class Gcc_linemap : public Linemap ...@@ -32,6 +32,9 @@ class Gcc_linemap : public Linemap
std::string std::string
to_string(Location); to_string(Location);
int
location_line(Location);
protected: protected:
Location Location
get_predeclared_location(); get_predeclared_location();
...@@ -88,6 +91,13 @@ Gcc_linemap::to_string(Location location) ...@@ -88,6 +91,13 @@ Gcc_linemap::to_string(Location location)
return ss.str(); 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. // Stop getting locations.
void void
......
9401e714d690e3907a64ac5c8cd5aed9e28f511b f3658aea2493c7f1c4a72502f9e7da562c7764c4
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -145,7 +145,7 @@ Node::details() const ...@@ -145,7 +145,7 @@ Node::details() const
std::stringstream details; std::stringstream details;
if (!this->is_sink()) 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_varargs = false;
bool is_address_taken = false; bool is_address_taken = false;
......
...@@ -63,6 +63,10 @@ class Linemap ...@@ -63,6 +63,10 @@ class Linemap
virtual std::string virtual std::string
to_string(Location) = 0; to_string(Location) = 0;
// Return the line number for a given location (for debugging dumps)
virtual int
location_line(Location) = 0;
protected: protected:
// Return a special Location used for predeclared identifiers. This // Return a special Location used for predeclared identifiers. This
// Location should be different from that for any actual source // Location should be different from that for any actual source
...@@ -135,6 +139,14 @@ class Linemap ...@@ -135,6 +139,14 @@ class Linemap
go_assert(Linemap::instance_ != NULL); go_assert(Linemap::instance_ != NULL);
return Linemap::instance_->to_string(loc); 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 // The backend interface must define this function. It should return
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment