OSDN Git Service

compiler: Fix parameter references in method expressions.
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Feb 2012 06:24:07 +0000 (06:24 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Feb 2012 06:24:07 +0000 (06:24 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183825 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/go/gofrontend/expressions.cc

index 25b7987..c3b43cd 100644 (file)
@@ -11711,10 +11711,21 @@ Selector_expression::lower_method_expression(Gogo* gogo)
   const Typed_identifier_list* method_parameters = method_type->parameters();
   if (method_parameters != NULL)
     {
   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();
       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();
     }
 
   const Typed_identifier_list* method_results = method_type->results();
@@ -11774,14 +11785,14 @@ Selector_expression::lower_method_expression(Gogo* gogo)
     }
 
   Expression_list* args;
     }
 
   Expression_list* args;
-  if (method_parameters == NULL)
+  if (parameters->size() <= 1)
     args = NULL;
   else
     {
       args = new Expression_list();
     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);
        {
          vno = gogo->lookup(p->name(), NULL);
          go_assert(vno != NULL);