diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-11-27 23:46:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-11-27 23:46:38 +0000 |
commit | 08e10724741986bf04c717ca29a302f2e108f3ad (patch) | |
tree | 0a26b4e1afe7680dfa115adbb2dc8bc14ba364ef | |
parent | c718ff4183656cfd36b63ac7afbdf2a7fd78eec6 (diff) | |
download | gcc-08e10724741986bf04c717ca29a302f2e108f3ad.tar.gz |
compiler: tweaks for importing inline function bodies
Track whether we've seen an error when importing a function; we will
use error tracking to avoid knock-on errors.
Stop importing identifiers at a ')'.
Provide a way to adjust the indentation level while importing.
Reviewed-on: https://go-review.googlesource.com/c/150072
From-SVN: r266536
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/import.cc | 4 | ||||
-rw-r--r-- | gcc/go/gofrontend/import.h | 22 |
3 files changed, 24 insertions, 4 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 9ce86dea723..8e220f50bf6 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -267d91b41571329e71a88f56df46444b305482da +b013405f2c66596c47cb9be493c798db1087c0f0 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/import.cc b/gcc/go/gofrontend/import.cc index eefee7cb1e6..d783043ec04 100644 --- a/gcc/go/gofrontend/import.cc +++ b/gcc/go/gofrontend/import.cc @@ -1225,7 +1225,7 @@ Import::read_identifier() while (true) { c = stream->peek_char(); - if (c == -1 || c == ' ' || c == '\n' || c == ';') + if (c == -1 || c == ' ' || c == '\n' || c == ';' || c == ')') break; ret += c; stream->advance(1); @@ -1450,7 +1450,7 @@ Import_function_body::read_identifier() for (size_t i = start; i < this->body_.length(); i++) { int c = static_cast<unsigned char>(this->body_[i]); - if (c == ' ' || c == '\n' || c == ';') + if (c == ' ' || c == '\n' || c == ';' || c == ')') { this->off_ = i; return this->body_.substr(start, i - start); diff --git a/gcc/go/gofrontend/import.h b/gcc/go/gofrontend/import.h index e2f4e50378c..c46a37e0ce9 100644 --- a/gcc/go/gofrontend/import.h +++ b/gcc/go/gofrontend/import.h @@ -554,7 +554,7 @@ class Import_function_body : public Import_expression const std::string& body, size_t off, Block* block, int indent) : gogo_(gogo), imp_(imp), named_object_(named_object), body_(body), - off_(off), block_(block), indent_(indent) + off_(off), block_(block), indent_(indent), saw_error_(false) { } // The IR. @@ -597,6 +597,16 @@ class Import_function_body : public Import_expression indent() const { return this->indent_; } + // Increment the indentation level. + void + increment_indent() + { ++this->indent_; } + + // Decrement the indentation level. + void + decrement_indent() + { --this->indent_; } + // The name of the function we are parsing. const std::string& name() const; @@ -652,6 +662,16 @@ class Import_function_body : public Import_expression ifb() { return this; } + // Return whether we have seen an error. + bool + saw_error() const + { return this->saw_error_; } + + // Record that we have seen an error. + void + set_saw_error() + { this->saw_error_ = true; } + private: // The IR. Gogo* gogo_; |