Commit 5d44e40b by Ian Lance Taylor

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
parent 63ab94b6
3bd90ea170b9c9aecedd37796acdd2712b29922b 3b590ff53700963c1b8207a78594138e6a4e47f4
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -600,8 +600,14 @@ Lex::next_token() ...@@ -600,8 +600,14 @@ Lex::next_token()
{ {
this->lineoff_ = p + 2 - this->linebuf_; this->lineoff_ = p + 2 - this->linebuf_;
Location location = this->location(); 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); 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_; p = this->linebuf_ + this->lineoff_;
pend = this->linebuf_ + this->linesize_; pend = this->linebuf_ + this->linesize_;
} }
...@@ -1621,7 +1627,7 @@ Lex::one_character_operator(char c) ...@@ -1621,7 +1627,7 @@ Lex::one_character_operator(char c)
// Skip a C-style comment. // Skip a C-style comment.
bool bool
Lex::skip_c_comment() Lex::skip_c_comment(bool* found_newline)
{ {
while (true) while (true)
{ {
...@@ -1642,6 +1648,9 @@ Lex::skip_c_comment() ...@@ -1642,6 +1648,9 @@ Lex::skip_c_comment()
return true; return true;
} }
if (p[0] == '\n')
*found_newline = true;
this->lineoff_ = p - this->linebuf_; this->lineoff_ = p - this->linebuf_;
unsigned int c; unsigned int c;
bool issued_error; bool issued_error;
......
...@@ -469,7 +469,7 @@ class Lex ...@@ -469,7 +469,7 @@ class Lex
one_character_operator(char); one_character_operator(char);
bool bool
skip_c_comment(); skip_c_comment(bool* found_newline);
void void
skip_cpp_comment(); skip_cpp_comment();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment