OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [go/] [go-linemap.cc] - Rev 768

Go to most recent revision | Compare with Previous | Blame | View Log

// go-linemap.cc -- GCC implementation of Linemap.
 
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
 
#include "go-linemap.h"
 
// This class implements the Linemap interface defined by the
// frontend.
 
class Gcc_linemap : public Linemap
{
 public:
  Gcc_linemap()
    : Linemap(),
      in_file_(false)
  { }
 
  void
  start_file(const char* file_name, unsigned int line_begin);
 
  void
  start_line(unsigned int line_number, unsigned int line_size);
 
  Location
  get_location(unsigned int column);
 
  void
  stop();
 
 protected:
  Location
  get_predeclared_location();
 
  Location
  get_unknown_location();
 
  bool
  is_predeclared(Location);
 
  bool
  is_unknown(Location);
 
 private:
  // Whether we are currently reading a file.
  bool in_file_;
};
 
Linemap* Linemap::instance_ = NULL;
 
// Start getting locations from a new file.
 
void
Gcc_linemap::start_file(const char *file_name, unsigned line_begin)
{
  if (this->in_file_)
    linemap_add(line_table, LC_LEAVE, 0, NULL, 0);
  linemap_add(line_table, LC_ENTER, 0, file_name, line_begin);
  this->in_file_ = true;
}
 
// Stop getting locations.
 
void
Gcc_linemap::stop()
{
  linemap_add(line_table, LC_LEAVE, 0, NULL, 0);
  this->in_file_ = false;
}
 
// Start a new line.
 
void
Gcc_linemap::start_line(unsigned lineno, unsigned linesize)
{
  linemap_line_start(line_table, lineno, linesize);
}
 
// Get a location.
 
Location
Gcc_linemap::get_location(unsigned column)
{
  return Location(linemap_position_for_column(line_table, column));
}
 
// Get the unknown location.
 
Location
Gcc_linemap::get_unknown_location()
{
  return Location(UNKNOWN_LOCATION);
}
 
// Get the predeclared location.
 
Location
Gcc_linemap::get_predeclared_location()
{
  return Location(BUILTINS_LOCATION);
}
 
// Return whether a location is the predeclared location.
 
bool
Gcc_linemap::is_predeclared(Location loc)
{
  return loc.gcc_location() == BUILTINS_LOCATION;
}
 
// Return whether a location is the unknown location.
 
bool
Gcc_linemap::is_unknown(Location loc)
{
  return loc.gcc_location() == UNKNOWN_LOCATION;
}
 
// Return the Linemap to use for the gcc backend.
 
Linemap*
go_get_linemap()
{
  return new Gcc_linemap;
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.