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
This commit is contained in:
parent
c718ff4183
commit
08e1072474
3 changed files with 24 additions and 4 deletions
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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_;
|
||||
|
|
Loading…
Add table
Reference in a new issue