summaryrefslogtreecommitdiff
path: root/src/cmd/gc/subr.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-02-05 15:22:49 -0800
committerRuss Cox <rsc@golang.org>2009-02-05 15:22:49 -0800
commit1d897f4ee9a1ec29f3eb398d258a6f1b3251054f (patch)
tree232749710138d6a0942114e9e4f9003efa1508de /src/cmd/gc/subr.c
parentc64d1aef155a61160b3905a3503a82c871beb613 (diff)
downloadgolang-1d897f4ee9a1ec29f3eb398d258a6f1b3251054f.tar.gz
bug064
make f(g()) work when g returns multiple args with names different than f expects. func swap(a, b int) (c, d int) { return b, a } swap(swap(1,2)) R=ken OCL=24474 CL=24476
Diffstat (limited to 'src/cmd/gc/subr.c')
-rw-r--r--src/cmd/gc/subr.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 593d07cd3..2df3fc168 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -1742,6 +1742,25 @@ eqtype(Type *t1, Type *t2, int d)
return eqtype(t1->type, t2->type, d+1);
}
+int
+eqtypenoname(Type *t1, Type *t2)
+{
+ if(t1 == T || t2 == T || t1->etype != TSTRUCT || t2->etype != TSTRUCT)
+ return eqtype(t1, t2, 0);
+
+
+ t1 = t1->type;
+ t2 = t2->type;
+ for(;;) {
+ if(!eqtype(t1, t2, 1))
+ return 0;
+ if(t1 == T)
+ return 1;
+ t1 = t1->down;
+ t2 = t2->down;
+ }
+}
+
static int
subtype(Type **stp, Type *t, int d)
{