diff options
author | Russ Cox <rsc@golang.org> | 2009-02-05 15:22:49 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-02-05 15:22:49 -0800 |
commit | 1d897f4ee9a1ec29f3eb398d258a6f1b3251054f (patch) | |
tree | 232749710138d6a0942114e9e4f9003efa1508de /src/cmd/gc/subr.c | |
parent | c64d1aef155a61160b3905a3503a82c871beb613 (diff) | |
download | golang-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.c | 19 |
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) { |