@@ -2526,8 +2526,8 @@
if (cexpr->float_constant_value(fval, &dummy))
{
if (!mpfr_integer_p(fval))
- this->report_error("floating point constant "
- "truncated to integer");
+ this->report_error(_("floating point constant "
+ "truncated to integer"));
else
{
mpfr_get_z(ival, fval, GMP_RNDN);
@@ -3125,7 +3125,7 @@
if (Type::are_convertible(type, expr_type, &reason))
return;
- error_at(this->location(), reason.c_str());
+ error_at(this->location(), "%s", reason.c_str());
this->set_is_error();
}
@@ -5368,7 +5368,7 @@
case OPERATOR_ANDAND:
if (!type->is_boolean_type())
{
- error_at(location, _("expected boolean type"));
+ error_at(location, "expected boolean type");
return false;
}
break;
@@ -5390,9 +5390,9 @@
&& type->function_type() == NULL)
{
error_at(location,
- _("expected integer, floating, complex, string, pointer, "
- "boolean, interface, slice, map, channel, "
- "or function type"));
+ ("expected integer, floating, complex, string, pointer, "
+ "boolean, interface, slice, map, channel, "
+ "or function type"));
return false;
}
break;
@@ -5405,8 +5405,7 @@
&& type->float_type() == NULL
&& !type->is_string_type())
{
- error_at(location,
- _("expected integer, floating, or string type"));
+ error_at(location, "expected integer, floating, or string type");
return false;
}
break;
@@ -5419,7 +5418,7 @@
&& !type->is_string_type())
{
error_at(location,
- _("expected integer, floating, complex, or string type"));
+ "expected integer, floating, complex, or string type");
return false;
}
break;
@@ -5434,7 +5433,7 @@
&& type->float_type() == NULL
&& type->complex_type() == NULL)
{
- error_at(location, _("expected integer, floating, or complex type"));
+ error_at(location, "expected integer, floating, or complex type");
return false;
}
break;
@@ -5451,7 +5450,7 @@
case OPERATOR_BITCLEAREQ:
if (type->integer_type() == NULL)
{
- error_at(location, _("expected integer type"));
+ error_at(location, "expected integer type");
return false;
}
break;
@@ -6426,7 +6425,7 @@
Expression* arg = args->front();
if (!arg->is_type_expression())
{
- error_at(arg->location(), _("expected type"));
+ error_at(arg->location(), "expected type");
this->set_is_error();
}
else
@@ -6443,7 +6442,7 @@
Expression* arg = args->front();
if (!arg->is_type_expression())
{
- error_at(arg->location(), _("expected type"));
+ error_at(arg->location(), "expected type");
this->set_is_error();
}
else
@@ -6538,8 +6537,7 @@
Type* slice_type = args->front()->type();
if (!slice_type->is_open_array_type())
{
- error_at(args->front()->location(),
- _("argument 1 must be a slice"));
+ error_at(args->front()->location(), "argument 1 must be a slice");
this->set_is_error();
return this;
}
@@ -7982,7 +7980,7 @@
new_args->push_back(*pa);
else if (this->is_varargs_)
{
- this->report_error("too many arguments");
+ this->report_error(_("too many arguments"));
return this;
}
else if (pa + 1 == old_args->end()
@@ -8274,7 +8272,7 @@
first_arg_type, &reason))
{
if (reason.empty())
- this->report_error("incompatible type for receiver");
+ this->report_error(_("incompatible type for receiver"));
else
{
error_at(this->location(),
@@ -10294,7 +10292,7 @@
Struct_type* st = this->type_->struct_type();
if (this->vals_->size() > st->field_count())
{
- this->report_error("too many expressions for struct");
+ this->report_error(_("too many expressions for struct"));
return;
}
@@ -10307,7 +10305,7 @@
{
if (pv == this->vals_->end())
{
- this->report_error("too few expressions for struct");
+ this->report_error(_("too few expressions for struct"));
break;
}
@@ -11875,7 +11873,8 @@
Channel_type* channel_type = type->channel_type();
if (channel_type == NULL)
{
- this->report_error(_("left operand of %<<-%> must be channel"));
+ error_at(this->location(), "left operand of %<<-%> must be channel");
+ this->set_is_error();
return;
}
Type* element_type = channel_type->element_type();
@@ -470,7 +470,7 @@
{
size_t ns = 2 * size + 1;
if (ns < size || static_cast<ssize_t>(ns) < 0)
- this->error("out of memory");
+ error_at(this->location(), "out of memory");
char* nb = new char[ns];
memcpy(nb, buf, cur);
delete[] buf;
@@ -810,9 +810,9 @@
if (adv == 0)
{
if (*p == '\0')
- this->error("invalid NUL byte");
+ error_at(this->location(), "invalid NUL byte");
else
- this->error("invalid UTF-8 encoding");
+ error_at(this->location(), "invalid UTF-8 encoding");
*issued_error = true;
return p + 1;
}
@@ -1092,7 +1092,7 @@
if (is_single_quote
&& (*value == '\'' || *value == '\n')
&& !issued_error)
- this->error("invalid character literal");
+ error_at(this->location(), "invalid character literal");
return ret;
}
else
@@ -1111,12 +1111,12 @@
+ Lex::octal_value(p[2]));
if (*value > 255)
{
- this->error("invalid octal constant");
+ error_at(this->location(), "invalid octal constant");
*value = 255;
}
return p + 3;
}
- this->error("invalid octal character");
+ error_at(this->location(), "invalid octal character");
return (p[1] >= '0' && p[1] <= '7'
? p + 2
: p + 1);
@@ -1129,7 +1129,7 @@
*value = (hex_value(p[1]) << 4) + hex_value(p[2]);
return p + 3;
}
- this->error("invalid hex character");
+ error_at(this->location(), "invalid hex character");
return (Lex::is_hex_digit(p[1])
? p + 2
: p + 1);
@@ -1160,12 +1160,12 @@
return p + 1;
case '\'':
if (!is_single_quote)
- this->error("invalid quoted character");
+ error_at(this->location(), "invalid quoted character");
*value = '\'';
return p + 1;
case '"':
if (is_single_quote)
- this->error("invalid quoted character");
+ error_at(this->location(), "invalid quoted character");
*value = '"';
return p + 1;
@@ -1179,14 +1179,15 @@
+ hex_value(p[4]));
if (*value >= 0xd800 && *value < 0xe000)
{
- error_at(this->location(),"invalid unicode code point 0x%x",
+ error_at(this->location(),
+ "invalid unicode code point 0x%x",
*value);
// Use the replacement character.
*value = 0xfffd;
}
return p + 5;
}
- this->error("invalid little unicode code point");
+ error_at(this->location(), "invalid little unicode code point");
return p + 1;
case 'U':
@@ -1213,11 +1214,11 @@
}
return p + 9;
}
- this->error("invalid big unicode code point");
+ error_at(this->location(), "invalid big unicode code point");
return p + 1;
default:
- this->error("invalid character after %<\\%>");
+ error_at(this->location(), "invalid character after %<\\%>");
*value = *p;
return p + 1;
}
@@ -1288,7 +1289,7 @@
if (*p != '\'')
{
- this->error("unterminated character constant");
+ error_at(this->location(), "unterminated character constant");
this->lineoff_ = p - this->linebuf_;
return this->make_invalid_token();
}
@@ -1322,7 +1323,7 @@
p = this->advance_one_char(p, false, &c, &is_character);
if (p >= pend)
{
- this->error("unterminated string");
+ error_at(this->location(), "unterminated string");
--p;
break;
}
@@ -1543,7 +1544,7 @@
{
if (!this->require_line())
{
- this->error("unterminated comment");
+ error_at(this->location(), "unterminated comment");
return false;
}
@@ -1623,14 +1624,6 @@
}
}
-// Report an error.
-
-void
-Lex::error(const char* msg)
-{
- error_at(this->location(), msg);
-}
-
// The Unicode tables use this struct.
struct Unicode_range
@@ -343,9 +343,6 @@
fetch_char(const char* str, unsigned int *value);
private:
- void
- error(const char*);
-
ssize_t
get_line();
@@ -428,9 +425,6 @@
void
skip_cpp_comment();
- void
- error();
-
// The input file name.
const char* input_file_name_;
// The input file.
@@ -108,7 +108,7 @@
{
if (!token->is_identifier())
{
- this->error("expected identifier");
+ error_at(this->location(), "expected identifier");
return;
}
std::string name =
@@ -167,7 +167,7 @@
const Token* token = this->peek_token();
if (!token->is_identifier())
{
- this->error("expected identifier");
+ error_at(this->location(), "expected identifier");
return false;
}
@@ -186,7 +186,7 @@
Named_object* package = this->gogo_->lookup(name, NULL);
if (package == NULL || !package->is_package())
{
- this->error("expected package");
+ error_at(this->location(), "expected package");
// We expect . IDENTIFIER; skip both.
if (this->advance_token()->is_identifier())
this->advance_token();
@@ -198,7 +198,7 @@
token = this->advance_token();
if (!token->is_identifier())
{
- this->error("expected identifier");
+ error_at(this->location(), "expected identifier");
return false;
}
@@ -206,7 +206,7 @@
if (name == "_")
{
- this->error("invalid use of %<_%>");
+ error_at(this->location(), "invalid use of %<_%>");
name = "blank";
}
@@ -261,7 +261,7 @@
else
{
if (!ret->is_error_type())
- this->error("expected %<)%>");
+ error_at(this->location(), "expected %<)%>");
}
return ret;
}
@@ -388,13 +388,14 @@
}
else
{
- this->error("use of %<[...]%> outside of array literal");
+ error_at(this->location(),
+ "use of %<[...]%> outside of array literal");
length = Expression::make_error(this->location());
this->advance_token();
}
if (!this->peek_token()->is_op(OPERATOR_RSQUARE))
{
- this->error("expected %<]%>");
+ error_at(this->location(), "expected %<]%>");
return Type::make_error_type();
}
this->advance_token();
@@ -416,7 +417,7 @@
gcc_assert(this->peek_token()->is_keyword(KEYWORD_MAP));
if (!this->advance_token()->is_op(OPERATOR_LSQUARE))
{
- this->error("expected %<[%>");
+ error_at(this->location(), "expected %<[%>");
return Type::make_error_type();
}
this->advance_token();
@@ -425,7 +426,7 @@
if (!this->peek_token()->is_op(OPERATOR_RSQUARE))
{
- this->error("expected %<]%>");
+ error_at(this->location(), "expected %<]%>");
return Type::make_error_type();
}
this->advance_token();
@@ -453,7 +454,7 @@
error_at(token_loc, "unexpected semicolon or newline before %<{%>");
else
{
- this->error("expected %<{%>");
+ error_at(this->location(), "expected %<{%>");
return Type::make_error_type();
}
}
@@ -467,7 +468,7 @@
this->advance_token();
else if (!this->peek_token()->is_op(OPERATOR_RCURLY))
{
- this->error("expected %<;%> or %<}%> or newline");
+ error_at(this->location(), "expected %<;%> or %<}%> or newline");
if (!this->skip_past_error(OPERATOR_RCURLY))
return Type::make_error_type();
}
@@ -528,7 +529,7 @@
}
else
{
- this->error("expected field name");
+ error_at(this->location(), "expected field name");
while (!token->is_op(OPERATOR_SEMICOLON)
&& !token->is_op(OPERATOR_RCURLY)
&& !token->is_eof())
@@ -543,7 +544,7 @@
this->advance_token();
if (!this->peek_token()->is_identifier())
{
- this->error("expected field name");
+ error_at(this->location(), "expected field name");
while (!token->is_op(OPERATOR_SEMICOLON)
&& !token->is_op(OPERATOR_RCURLY)
&& !token->is_eof())
@@ -577,7 +578,7 @@
token = this->peek_token();
if (!token->is_identifier())
{
- this->error("expected identifier");
+ error_at(this->location(), "expected identifier");
return;
}
std::string name =
@@ -638,7 +639,7 @@
{
if (!this->advance_token()->is_keyword(KEYWORD_CHAN))
{
- this->error("expected %<chan%>");
+ error_at(this->location(), "expected %<chan%>");
return Type::make_error_type();
}
send = false;
@@ -687,7 +688,7 @@
{
if (!this->peek_token()->is_op(OPERATOR_LPAREN))
{
- this->error("expected %<(%>");
+ error_at(this->location(), "expected %<(%>");
return NULL;
}
@@ -703,7 +704,7 @@
// The optional trailing comma is picked up in parameter_list.
if (!token->is_op(OPERATOR_RPAREN))
- this->error("expected %<)%>");
+ error_at(this->location(), "expected %<)%>");
else
this->advance_token();
@@ -833,7 +834,7 @@
type = this->type();
else
{
- this->error("%<...%> only permits one name");
+ error_at(this->location(), "%<...%> only permits one name");
this->advance_token();
type = this->type();
}
@@ -884,7 +885,7 @@
while (this->peek_token()->is_op(OPERATOR_COMMA))
{
if (is_varargs != NULL && *is_varargs)
- this->error("%<...%> must be last parameter");
+ error_at(this->location(), "%<...%> must be last parameter");
if (this->advance_token()->is_op(OPERATOR_RPAREN))
break;
this->parameter_decl(parameters_have_names, ret, is_varargs, &mix_error);
@@ -913,7 +914,7 @@
else
{
if (is_varargs == NULL)
- this->error("invalid use of %<...%>");
+ error_at(this->location(), "invalid use of %<...%>");
else
*is_varargs = true;
this->advance_token();
@@ -958,9 +959,9 @@
else
{
if (is_varargs == NULL)
- this->error("invalid use of %<...%>");
+ error_at(this->location(), "invalid use of %<...%>");
else if (new_count > orig_count + 1)
- this->error("%<...%> only permits one name");
+ error_at(this->location(), "%<...%> only permits one name");
else
*is_varargs = true;
this->advance_token();
@@ -1004,7 +1005,7 @@
error_at(loc, "unexpected semicolon or newline before %<{%>");
else
{
- this->error("expected %<{%>");
+ error_at(this->location(), "expected %<{%>");
return UNKNOWN_LOCATION;
}
}
@@ -1018,7 +1019,7 @@
if (!token->is_op(OPERATOR_RCURLY))
{
if (!token->is_eof() || !saw_errors())
- this->error("expected %<}%>");
+ error_at(this->location(), "expected %<}%>");
// Skip ahead to the end of the block, in hopes of avoiding
// lots of meaningless errors.
@@ -1066,7 +1067,7 @@
error_at(token_loc, "unexpected semicolon or newline before %<{%>");
else
{
- this->error("expected %<{%>");
+ error_at(this->location(), "expected %<{%>");
return Type::make_error_type();
}
}
@@ -1084,7 +1085,7 @@
}
if (!this->peek_token()->is_op(OPERATOR_RCURLY))
{
- this->error("expected %<}%>");
+ error_at(this->location(), "expected %<}%>");
while (!this->advance_token()->is_op(OPERATOR_RCURLY))
{
if (this->peek_token()->is_eof())
@@ -1115,7 +1116,7 @@
const Token* token = this->peek_token();
if (!token->is_identifier())
{
- this->error("expected identifier");
+ error_at(this->location(), "expected identifier");
return false;
}
@@ -1140,7 +1141,8 @@
&& !this->peek_token()->is_op(OPERATOR_RCURLY)))
{
if (this->peek_token()->is_op(OPERATOR_COMMA))
- this->error("name list not allowed in interface type");
+ error_at(this->location(),
+ "name list not allowed in interface type");
else
error_at(location, "expected signature or type name");
token = this->peek_token();
@@ -1175,7 +1177,7 @@
this->function_decl();
else
{
- this->error("expected declaration");
+ error_at(this->location(), "expected declaration");
this->advance_token();
}
}
@@ -1204,7 +1206,7 @@
this->list(pfn, varg, true);
if (!this->peek_token()->is_op(OPERATOR_RPAREN))
{
- this->error("missing %<)%>");
+ error_at(this->location(), "missing %<)%>");
while (!this->advance_token()->is_op(OPERATOR_RPAREN))
{
if (this->peek_token()->is_eof())
@@ -1230,7 +1232,7 @@
|| this->peek_token()->is_op(OPERATOR_COMMA))
{
if (this->peek_token()->is_op(OPERATOR_COMMA))
- this->error("unexpected comma");
+ error_at(this->location(), "unexpected comma");
if (this->advance_token()->is_op(follow))
break;
(this->*pfn)(varg);
@@ -1261,7 +1263,7 @@
this->advance_token();
else if (!this->peek_token()->is_op(OPERATOR_RPAREN))
{
- this->error("expected %<;%> or %<)%> or newline");
+ error_at(this->location(), "expected %<;%> or %<)%> or newline");
if (!this->skip_past_error(OPERATOR_RPAREN))
return;
}
@@ -1294,7 +1296,7 @@
{
if (*last_expr_list == NULL)
{
- this->error("expected %<=%>");
+ error_at(this->location(), "expected %<=%>");
return;
}
type = *last_type;
@@ -1321,7 +1323,7 @@
{
if (pe == expr_list->end())
{
- this->error("not enough initializers");
+ error_at(this->location(), "not enough initializers");
return;
}
if (type != NULL)
@@ -1331,7 +1333,7 @@
this->gogo_->add_constant(*pi, *pe, this->iota_value());
}
if (pe != expr_list->end())
- this->error("too many initializers");
+ error_at(this->location(), "too many initializers");
this->increment_iota();
@@ -1356,7 +1358,7 @@
const Token* token = this->peek_token();
if (!token->is_identifier())
{
- this->error("expected identifier");
+ error_at(this->location(), "expected identifier");
return;
}
std::string name = token->identifier();
@@ -1379,7 +1381,8 @@
type = this->type();
else
{
- this->error("unexpected semicolon or newline in type declaration");
+ error_at(this->location(),
+ "unexpected semicolon or newline in type declaration");
type = Type::make_error_type();
this->advance_token();
}
@@ -1921,7 +1924,7 @@
if (!token->is_identifier())
{
- this->error("expected function name");
+ error_at(this->location(), "expected function name");
return;
}
@@ -1939,19 +1942,19 @@
{
if (!this->advance_token()->is_op(OPERATOR_LPAREN))
{
- this->error("expected %<(%>");
+ error_at(this->location(), "expected %<(%>");
return;
}
token = this->advance_token();
if (!token->is_string())
{
- this->error("expected string");
+ error_at(this->location(), "expected string");
return;
}
std::string asm_name = token->string_value();
if (!this->advance_token()->is_op(OPERATOR_RPAREN))
{
- this->error("expected %<)%>");
+ error_at(this->location(), "expected %<)%>");
return;
}
this->advance_token();
@@ -1965,7 +1968,8 @@
{
source_location semi_loc = this->location();
if (this->advance_token()->is_op(OPERATOR_LCURLY))
- this->error("unexpected semicolon or newline before %<{%>");
+ error_at(this->location(),
+ "unexpected semicolon or newline before %<{%>");
else
this->unget_token(Token::make_operator_token(OPERATOR_SEMICOLON,
semi_loc));
@@ -1999,7 +2003,7 @@
{
if (!token->is_identifier())
{
- this->error("method has no receiver");
+ error_at(this->location(), "method has no receiver");
while (!token->is_eof() && !token->is_op(OPERATOR_RPAREN))
token = this->advance_token();
if (!token->is_eof())
@@ -2038,7 +2042,7 @@
if (!token->is_identifier())
{
- this->error("expected receiver name or type");
+ error_at(this->location(), "expected receiver name or type");
int c = token->is_op(OPERATOR_LPAREN) ? 1 : 0;
while (!token->is_eof())
{
@@ -2067,9 +2071,9 @@
else
{
if (this->peek_token()->is_op(OPERATOR_COMMA))
- this->error("method has multiple receivers");
+ error_at(this->location(), "method has multiple receivers");
else
- this->error("expected %<)%>");
+ error_at(this->location(), "expected %<)%>");
while (!token->is_eof() && !token->is_op(OPERATOR_RPAREN))
token = this->advance_token();
if (!token->is_eof())
@@ -2251,7 +2255,7 @@
this->advance_token();
ret = this->expression(PRECEDENCE_NORMAL, false, true, NULL);
if (!this->peek_token()->is_op(OPERATOR_RPAREN))
- this->error("missing %<)%>");
+ error_at(this->location(), "missing %<)%>");
else
this->advance_token();
return ret;
@@ -2269,7 +2273,7 @@
break;
}
- this->error("expected operand");
+ error_at(this->location(), "expected operand");
return Expression::make_error(this->location());
}
@@ -2369,7 +2373,7 @@
{
if (is_type_omitted && !val->is_error_expression())
{
- this->error("unexpected %<:%>");
+ error_at(this->location(), "unexpected %<:%>");
val = Expression::make_error(this->location());
}
@@ -2425,7 +2429,7 @@
}
else
{
- this->error("expected %<,%> or %<}%>");
+ error_at(this->location(), "expected %<,%> or %<}%>");
int depth = 0;
while (!token->is_eof()
@@ -2580,7 +2584,7 @@
Expression* expr = this->expression(PRECEDENCE_NORMAL, false, true,
NULL);
if (!this->peek_token()->is_op(OPERATOR_RPAREN))
- this->error("expected %<)%>");
+ error_at(this->location(), "expected %<)%>");
else
this->advance_token();
if (expr->is_error_expression())
@@ -2636,7 +2640,7 @@
token->is_identifier_exported());
if (token->identifier() == "_")
{
- this->error("invalid use of %<_%>");
+ error_at(this->location(), "invalid use of %<_%>");
name = this->gogo_->pack_hidden_name("blank", false);
}
this->advance_token();
@@ -2655,7 +2659,7 @@
this->advance_token();
}
if (!this->peek_token()->is_op(OPERATOR_RPAREN))
- this->error("missing %<)%>");
+ error_at(this->location(), "missing %<)%>");
else
this->advance_token();
if (is_type_switch != NULL && *is_type_switch)
@@ -2664,7 +2668,7 @@
}
else
{
- this->error("expected identifier or %<(%>");
+ error_at(this->location(), "expected identifier or %<(%>");
return left;
}
}
@@ -2700,7 +2704,7 @@
end = this->expression(PRECEDENCE_NORMAL, false, true, NULL);
}
if (!this->peek_token()->is_op(OPERATOR_RSQUARE))
- this->error("missing %<]%>");
+ error_at(this->location(), "missing %<]%>");
else
this->advance_token();
return Expression::make_index(expr, start, end, location);
@@ -2729,7 +2733,7 @@
if (token->is_op(OPERATOR_COMMA))
token = this->advance_token();
if (!token->is_op(OPERATOR_RPAREN))
- this->error("missing %<)%>");
+ error_at(this->location(), "missing %<)%>");
else
this->advance_token();
if (func->is_error_expression())
@@ -2768,7 +2772,7 @@
case Named_object::NAMED_OBJECT_UNKNOWN:
return Expression::make_unknown_reference(named_object, location);
default:
- this->error("unexpected type of identifier");
+ error_at(this->location(), "unexpected type of identifier");
return Expression::make_error(location);
}
}
@@ -3036,7 +3040,7 @@
this->for_stat(label);
break;
default:
- this->error("expected statement");
+ error_at(this->location(), "expected statement");
this->advance_token();
break;
}
@@ -3084,7 +3088,7 @@
break;
default:
- this->error("expected statement");
+ error_at(this->location(), "expected statement");
this->advance_token();
break;
}
@@ -3278,7 +3282,7 @@
else
{
if (!this->peek_token()->is_eof() || !saw_errors())
- this->error("expected %<;%> or %<}%> or newline");
+ error_at(this->location(), "expected %<;%> or %<}%> or newline");
if (!this->skip_past_error(OPERATOR_RCURLY))
return;
}
@@ -3368,7 +3372,7 @@
&& !token->is_op(OPERATOR_ANDEQ)
&& !token->is_op(OPERATOR_BITCLEAREQ))
{
- this->error("expected assignment operator");
+ error_at(this->location(), "expected assignment operator");
return;
}
Operator op = token->op();
@@ -3379,7 +3383,7 @@
if (p_range_clause != NULL && token->is_keyword(KEYWORD_RANGE))
{
if (op != OPERATOR_EQ)
- this->error("range clause requires %<=%>");
+ error_at(this->location(), "range clause requires %<=%>");
this->range_clause_expr(lhs, p_range_clause);
return;
}
@@ -3598,7 +3602,8 @@
{
source_location semi_loc = this->location();
if (this->advance_token()->is_keyword(KEYWORD_ELSE))
- this->error("unexpected semicolon or newline before %<else%>");
+ error_at(this->location(),
+ "unexpected semicolon or newline before %<else%>");
else
this->unget_token(Token::make_operator_token(OPERATOR_SEMICOLON,
semi_loc));
@@ -3701,7 +3706,7 @@
error_at(token_loc, "unexpected semicolon or newline before %<{%>");
else
{
- this->error("expected %<{%>");
+ error_at(this->location(), "expected %<{%>");
this->gogo_->add_block(this->gogo_->finish_block(this->location()),
location);
return;
@@ -3740,7 +3745,7 @@
if (this->peek_token()->is_eof())
{
if (!saw_errors())
- this->error("missing %<}%>");
+ error_at(this->location(), "missing %<}%>");
return NULL;
}
this->expr_case_clause(case_clauses);
@@ -3768,7 +3773,7 @@
if (!this->peek_token()->is_op(OPERATOR_COLON))
{
if (!saw_errors())
- this->error("expected %<:%>");
+ error_at(this->location(), "expected %<:%>");
return;
}
else
@@ -3814,7 +3819,7 @@
else
{
if (!saw_errors())
- this->error("expected %<case%> or %<default%>");
+ error_at(this->location(), "expected %<case%> or %<default%>");
if (!token->is_op(OPERATOR_RCURLY))
this->advance_token();
return NULL;
@@ -3850,7 +3855,7 @@
{
if (this->peek_token()->is_eof())
{
- this->error("missing %<}%>");
+ error_at(this->location(), "missing %<}%>");
return NULL;
}
this->type_case_clause(switch_no, case_clauses);
@@ -3876,7 +3881,7 @@
this->type_switch_case(&types, &is_default);
if (!this->peek_token()->is_op(OPERATOR_COLON))
- this->error("expected %<:%>");
+ error_at(this->location(), "expected %<:%>");
else
this->advance_token();
@@ -3901,7 +3906,8 @@
if (this->peek_token()->is_keyword(KEYWORD_FALLTHROUGH))
{
- this->error("fallthrough is not permitted in a type switch");
+ error_at(this->location(),
+ "fallthrough is not permitted in a type switch");
if (this->advance_token()->is_op(OPERATOR_SEMICOLON))
this->advance_token();
}
@@ -3949,7 +3955,7 @@
}
else
{
- this->error("expected %<case%> or %<default%>");
+ error_at(this->location(), "expected %<case%> or %<default%>");
if (!token->is_op(OPERATOR_RCURLY))
this->advance_token();
}
@@ -3972,7 +3978,7 @@
error_at(token_loc, "unexpected semicolon or newline before %<{%>");
else
{
- this->error("expected %<{%>");
+ error_at(this->location(), "expected %<{%>");
return;
}
}
@@ -3987,7 +3993,7 @@
{
if (this->peek_token()->is_eof())
{
- this->error("expected %<}%>");
+ error_at(this->location(), "expected %<}%>");
return;
}
this->comm_clause(select_clauses);
@@ -4061,7 +4067,7 @@
}
else
{
- this->error("expected %<case%> or %<default%>");
+ error_at(this->location(), "expected %<case%> or %<default%>");
if (!token->is_op(OPERATOR_RCURLY))
this->advance_token();
return false;
@@ -4069,7 +4075,7 @@
if (!this->peek_token()->is_op(OPERATOR_COLON))
{
- this->error("expected colon");
+ error_at(this->location(), "expected colon");
return false;
}
@@ -4099,7 +4105,7 @@
{
if (!this->advance_token()->is_op(OPERATOR_CHANOP))
{
- this->error("expected %<<-%>");
+ error_at(this->location(), "expected %<<-%>");
return false;
}
*is_send = false;
@@ -4124,7 +4130,7 @@
{
if (!this->advance_token()->is_op(OPERATOR_CHANOP))
{
- this->error("missing %<<-%>");
+ error_at(this->location(), "missing %<<-%>");
return false;
}
*is_send = false;
@@ -4141,7 +4147,7 @@
}
else
{
- this->error("expected %<<-%> or %<=%>");
+ error_at(this->location(), "expected %<<-%> or %<=%>");
return false;
}
}
@@ -4172,7 +4178,8 @@
{
if (token->is_keyword(KEYWORD_VAR))
{
- this->error("var declaration not allowed in for initializer");
+ error_at(this->location(),
+ "var declaration not allowed in for initializer");
this->var_decl();
}
@@ -4186,12 +4193,12 @@
if (!this->peek_token()->is_op(OPERATOR_SEMICOLON))
{
if (cond == NULL && !range_clause.found)
- this->error("parse error in for statement");
+ error_at(this->location(), "parse error in for statement");
}
else
{
if (range_clause.found)
- this->error("parse error after range clause");
+ error_at(this->location(), "parse error after range clause");
if (cond != NULL)
{
@@ -4272,7 +4279,8 @@
*cond = NULL;
else if (this->peek_token()->is_op(OPERATOR_LCURLY))
{
- this->error("unexpected semicolon or newline before %<{%>");
+ error_at(this->location(),
+ "unexpected semicolon or newline before %<{%>");
*cond = NULL;
*post = NULL;
return;
@@ -4280,7 +4288,7 @@
else
*cond = this->expression(PRECEDENCE_NORMAL, false, true, NULL);
if (!this->peek_token()->is_op(OPERATOR_SEMICOLON))
- this->error("expected semicolon");
+ error_at(this->location(), "expected semicolon");
else
this->advance_token();
@@ -4309,7 +4317,7 @@
gcc_assert(til->size() >= 1);
if (til->size() > 2)
- this->error("too many variables for range clause");
+ error_at(this->location(), "too many variables for range clause");
this->advance_token();
Expression* expr = this->expression(PRECEDENCE_NORMAL, false, false, NULL);
@@ -4354,7 +4362,7 @@
gcc_assert(vals->size() >= 1);
if (vals->size() > 2)
- this->error("too many variables for range clause");
+ error_at(this->location(), "too many variables for range clause");
this->advance_token();
p_range_clause->range = this->expression(PRECEDENCE_NORMAL, false, false,
@@ -4426,7 +4434,8 @@
{
if (this->break_stack_.empty())
{
- this->error("break statement not within for or switch or select");
+ error_at(this->location(),
+ "break statement not within for or switch or select");
return;
}
enclosing = this->break_stack_.back().first;
@@ -4479,7 +4488,7 @@
{
if (this->continue_stack_.empty())
{
- this->error("continue statement not within for");
+ error_at(this->location(), "continue statement not within for");
return;
}
enclosing = this->continue_stack_.back().first;
@@ -4520,7 +4529,7 @@
source_location location = this->location();
const Token* token = this->advance_token();
if (!token->is_identifier())
- this->error("expected label for goto");
+ error_at(this->location(), "expected label for goto");
else
{
Label* label = this->gogo_->add_label_reference(token->identifier());
@@ -4540,7 +4549,7 @@
std::string name;
if (!token->is_keyword(KEYWORD_PACKAGE))
{
- this->error("program must start with package clause");
+ error_at(this->location(), "program must start with package clause");
name = "ERROR";
}
else
@@ -4551,14 +4560,14 @@
name = token->identifier();
if (name == "_")
{
- this->error("invalid package name _");
+ error_at(this->location(), "invalid package name _");
name = "blank";
}
this->advance_token();
}
else
{
- this->error("package name must be an identifier");
+ error_at(this->location(), "package name must be an identifier");
name = "ERROR";
}
}
@@ -4599,7 +4608,7 @@
if (!token->is_string())
{
- this->error("missing import package name");
+ error_at(this->location(), "missing import package name");
return;
}
@@ -4621,7 +4630,8 @@
if (token->is_op(OPERATOR_SEMICOLON))
token = this->advance_token();
else
- this->error("expected %<;%> or newline after package clause");
+ error_at(this->location(),
+ "expected %<;%> or newline after package clause");
while (token->is_keyword(KEYWORD_IMPORT))
{
@@ -4630,7 +4640,8 @@
if (token->is_op(OPERATOR_SEMICOLON))
token = this->advance_token();
else
- this->error("expected %<;%> or newline after import declaration");
+ error_at(this->location(),
+ "expected %<;%> or newline after import declaration");
}
while (!token->is_eof())
@@ -4639,7 +4650,7 @@
this->declaration();
else
{
- this->error("expected declaration");
+ error_at(this->location(), "expected declaration");
do
this->advance_token();
while (!this->peek_token()->is_eof()
@@ -4654,7 +4665,8 @@
token = this->advance_token();
else if (!token->is_eof() || !saw_errors())
{
- this->error("expected %<;%> or newline after top level declaration");
+ error_at(this->location(),
+ "expected %<;%> or newline after top level declaration");
this->skip_past_error(OPERATOR_INVALID);
}
}
@@ -4719,11 +4731,3 @@
}
return expr;
}
-
-// Give an error.
-
-void
-Parse::error(const char* msg)
-{
- error_at(this->peek_token()->location(), msg);
-}
@@ -269,9 +269,6 @@
int iota_value();
void increment_iota();
- void
- error(const char* msg);
-
// Skip past an error looking for a semicolon or OP. Return true if
// all is well, false if we found EOF.
bool