summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2018-11-27 23:46:38 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2018-11-27 23:46:38 +0000
commit08e10724741986bf04c717ca29a302f2e108f3ad (patch)
tree0a26b4e1afe7680dfa115adbb2dc8bc14ba364ef
parentc718ff4183656cfd36b63ac7afbdf2a7fd78eec6 (diff)
downloadgcc-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/MERGE2
-rw-r--r--gcc/go/gofrontend/import.cc4
-rw-r--r--gcc/go/gofrontend/import.h22
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_;