diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-08-11 22:45:32 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2015-08-11 22:45:32 +0000 |
commit | 5d44e40bb5ddc05b604a02e1b4f56ced179ac95b (patch) | |
tree | a24af8ccbfaeeeb01a92f6f7b3154cfa428eebc4 /gcc/go | |
parent | 63ab94b6d5d732161780c68fce775bd23f8e2a99 (diff) | |
download | gcc-5d44e40bb5ddc05b604a02e1b4f56ced179ac95b.zip gcc-5d44e40bb5ddc05b604a02e1b4f56ced179ac95b.tar.gz gcc-5d44e40bb5ddc05b604a02e1b4f56ced179ac95b.tar.bz2 |
compiler: Handle newlines in general comments.
On comments, the specification says
(http://golang.org/ref/spec#Comments): General comments start with the
character sequence /* and continue through the character sequence */.
A general comment containing one or more newlines acts like a newline,
otherwise it acts like a space.
Fixes golang/go#11528.
Reviewed-on: https://go-review.googlesource.com/13064
From-SVN: r226794
Diffstat (limited to 'gcc/go')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/lex.cc | 13 | ||||
-rw-r--r-- | gcc/go/gofrontend/lex.h | 2 |
3 files changed, 13 insertions, 4 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 2696ea5..2cbe25c 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -3bd90ea170b9c9aecedd37796acdd2712b29922b +3b590ff53700963c1b8207a78594138e6a4e47f4 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/lex.cc b/gcc/go/gofrontend/lex.cc index 1d9085f..8de94c5 100644 --- a/gcc/go/gofrontend/lex.cc +++ b/gcc/go/gofrontend/lex.cc @@ -600,8 +600,14 @@ Lex::next_token() { this->lineoff_ = p + 2 - this->linebuf_; Location location = this->location(); - if (!this->skip_c_comment()) + bool found_newline = false; + if (!this->skip_c_comment(&found_newline)) return Token::make_invalid_token(location); + if (found_newline && this->add_semi_at_eol_) + { + this->add_semi_at_eol_ = false; + return this->make_operator(OPERATOR_SEMICOLON, 1); + } p = this->linebuf_ + this->lineoff_; pend = this->linebuf_ + this->linesize_; } @@ -1621,7 +1627,7 @@ Lex::one_character_operator(char c) // Skip a C-style comment. bool -Lex::skip_c_comment() +Lex::skip_c_comment(bool* found_newline) { while (true) { @@ -1642,6 +1648,9 @@ Lex::skip_c_comment() return true; } + if (p[0] == '\n') + *found_newline = true; + this->lineoff_ = p - this->linebuf_; unsigned int c; bool issued_error; diff --git a/gcc/go/gofrontend/lex.h b/gcc/go/gofrontend/lex.h index 383a917..3e0152a 100644 --- a/gcc/go/gofrontend/lex.h +++ b/gcc/go/gofrontend/lex.h @@ -469,7 +469,7 @@ class Lex one_character_operator(char); bool - skip_c_comment(); + skip_c_comment(bool* found_newline); void skip_cpp_comment(); |