aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2012-02-02 06:24:07 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-02-02 06:24:07 +0000
commit3375a6c94c6d4102d51c497aa51e7d9b56fc268c (patch)
tree0519a410882e22c5bc86ead0cb88ccdb4f5e707e
parent4e15881eebce4cc030f21b7afd57a793c7484644 (diff)
downloadgcc-3375a6c94c6d4102d51c497aa51e7d9b56fc268c.zip
gcc-3375a6c94c6d4102d51c497aa51e7d9b56fc268c.tar.gz
gcc-3375a6c94c6d4102d51c497aa51e7d9b56fc268c.tar.bz2
compiler: Fix parameter references in method expressions.
From-SVN: r183825
-rw-r--r--gcc/go/gofrontend/expressions.cc23
1 files changed, 17 insertions, 6 deletions
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 25b7987..c3b43cd 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -11711,10 +11711,21 @@ Selector_expression::lower_method_expression(Gogo* gogo)
const Typed_identifier_list* method_parameters = method_type->parameters();
if (method_parameters != NULL)
{
+ int i = 0;
for (Typed_identifier_list::const_iterator p = method_parameters->begin();
p != method_parameters->end();
- ++p)
- parameters->push_back(*p);
+ ++p, ++i)
+ {
+ if (!p->name().empty() && p->name() != Import::import_marker)
+ parameters->push_back(*p);
+ else
+ {
+ char buf[20];
+ snprintf(buf, sizeof buf, "$param%d", i);
+ parameters->push_back(Typed_identifier(buf, p->type(),
+ p->location()));
+ }
+ }
}
const Typed_identifier_list* method_results = method_type->results();
@@ -11774,14 +11785,14 @@ Selector_expression::lower_method_expression(Gogo* gogo)
}
Expression_list* args;
- if (method_parameters == NULL)
+ if (parameters->size() <= 1)
args = NULL;
else
{
args = new Expression_list();
- for (Typed_identifier_list::const_iterator p = method_parameters->begin();
- p != method_parameters->end();
- ++p)
+ Typed_identifier_list::const_iterator p = parameters->begin();
+ ++p;
+ for (; p != parameters->end(); ++p)
{
vno = gogo->lookup(p->name(), NULL);
go_assert(vno != NULL);