mirror of
https://github.com/golang/go
synced 2024-11-25 22:17:58 -07:00
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
This commit is contained in:
parent
7a3877aa0c
commit
b0009bef20
@ -527,8 +527,6 @@ EXTERN int32 thunk;
|
|||||||
|
|
||||||
EXTERN int exporting;
|
EXTERN int exporting;
|
||||||
|
|
||||||
EXTERN int func;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* y.tab.c
|
* y.tab.c
|
||||||
*/
|
*/
|
||||||
@ -650,6 +648,7 @@ Type* methtype(Type*);
|
|||||||
int methconv(Type*);
|
int methconv(Type*);
|
||||||
Sym* signame(Type*);
|
Sym* signame(Type*);
|
||||||
int eqtype(Type*, Type*, int);
|
int eqtype(Type*, Type*, int);
|
||||||
|
int eqtypenoname(Type*, Type*);
|
||||||
void argtype(Node*, Type*);
|
void argtype(Node*, Type*);
|
||||||
int eqargs(Type*, Type*);
|
int eqargs(Type*, Type*);
|
||||||
uint32 typehash(Type*, int);
|
uint32 typehash(Type*, int);
|
||||||
|
@ -1742,6 +1742,25 @@ eqtype(Type *t1, Type *t2, int d)
|
|||||||
return eqtype(t1->type, t2->type, d+1);
|
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
|
static int
|
||||||
subtype(Type **stp, Type *t, int d)
|
subtype(Type **stp, Type *t, int d)
|
||||||
{
|
{
|
||||||
|
@ -1905,8 +1905,8 @@ ascompatte(int op, Type **nl, Node **nr, int fp)
|
|||||||
if(l != T && r != N
|
if(l != T && r != N
|
||||||
&& structnext(&peekl) != T
|
&& structnext(&peekl) != T
|
||||||
&& listnext(&peekr) == N
|
&& listnext(&peekr) == N
|
||||||
&& eqtype(r->type, *nl, 0))
|
&& eqtypenoname(r->type, *nl))
|
||||||
return convas(nod(OAS, nodarg(*nl, fp), r));
|
return convas(nod(OAS, nodarg(r->type, fp), r));
|
||||||
|
|
||||||
loop:
|
loop:
|
||||||
if(l != T && isddd(l->type)) {
|
if(l != T && isddd(l->type)) {
|
||||||
|
@ -117,12 +117,6 @@ abcxyz-abcxyz-abcxyz-abcxyz-abcxyz-abcxyz-abcxyz
|
|||||||
=========== chan/nonblock.go
|
=========== chan/nonblock.go
|
||||||
PASS
|
PASS
|
||||||
|
|
||||||
=========== bugs/bug064.go
|
|
||||||
bugs/bug064.go:15: illegal types for operand: CALL
|
|
||||||
int
|
|
||||||
struct { u int; v int }
|
|
||||||
BUG: compilation should succeed
|
|
||||||
|
|
||||||
=========== bugs/bug085.go
|
=========== bugs/bug085.go
|
||||||
bugs/bug085.go:8: P: undefined
|
bugs/bug085.go:8: P: undefined
|
||||||
BUG: fails incorrectly
|
BUG: fails incorrectly
|
||||||
|
Loading…
Reference in New Issue
Block a user