Improve error for undefined name in imported package.

Avoid emitting some followon errors.

From-SVN: r179020
This commit is contained in:
Ian Lance Taylor 2011-09-20 22:34:59 +00:00
parent 6fa2979911
commit 02a728277f
2 changed files with 17 additions and 5 deletions

View File

@ -9730,7 +9730,10 @@ Call_result_expression::do_type()
if (fntype == NULL)
{
if (ce->issue_error())
this->report_error(_("expected function"));
{
if (!ce->fn()->type()->is_error())
this->report_error(_("expected function"));
}
this->set_is_error();
return Type::make_error_type();
}
@ -10043,7 +10046,9 @@ Array_index_expression::do_check_types(Gogo*)
this->report_error(_("index must be integer"));
if (this->end_ != NULL
&& this->end_->type()->integer_type() == NULL
&& !this->end_->is_nil_expression())
&& !this->end_->type()->is_error()
&& !this->end_->is_nil_expression()
&& !this->end_->is_error_expression())
this->report_error(_("slice end must be integer"));
Array_type* array_type = this->array_->type()->array_type();

View File

@ -335,10 +335,17 @@ Parse::type_name(bool issue_error)
bool ok = true;
if (named_object == NULL)
{
if (package != NULL)
ok = false;
else
if (package == NULL)
named_object = this->gogo_->add_unknown_name(name, location);
else
{
const std::string& packname(package->package_value()->name());
error_at(location, "reference to undefined identifer %<%s.%s%>",
Gogo::message_name(packname).c_str(),
Gogo::message_name(name).c_str());
issue_error = false;
ok = false;
}
}
else if (named_object->is_type())
{