From 08e10724741986bf04c717ca29a302f2e108f3ad Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 27 Nov 2018 23:46:38 +0000 Subject: [PATCH] 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 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/import.cc | 4 ++-- 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(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_; -- 2.30.2