diff options
| author | Russ Cox <rsc@golang.org> | 2009-04-16 23:07:30 -0700 | 
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2009-04-16 23:07:30 -0700 | 
| commit | df02778ccda228c665179d0ff3dac77217ad6633 (patch) | |
| tree | f2cd2aa5dfc0822885e98ff8f7e1419129c2c30a /src | |
| parent | 5d2e2e64ba963e53d35350de8e2d4ba2891c9555 (diff) | |
| download | golang-df02778ccda228c665179d0ff3dac77217ad6633.tar.gz | |
make string(array) take []byte only (and thus *[10]byte but not [10]byte)
R=ken
OCL=27581
CL=27585
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/gc/walk.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 1fa07dec0..f64ada8a4 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -1230,8 +1230,9 @@ walkconv(Node *n)  			indir(n, stringop(n, Erv));  			return;  		} -		if(et == TARRAY) -		if(istype(l->type->type, TUINT8)) { +		// can convert []byte and *[10]byte +		if((isptr[et] && isfixedarray(l->type->type) && istype(l->type->type->type, TUINT8)) +		|| (isslice(l->type) && istype(l->type->type, TUINT8))) {  			n->op = OARRAY;  			indir(n, stringop(n, Erv));  			return; @@ -1267,6 +1268,9 @@ walkconv(Node *n)  	}  bad: +	if(n->diag) +		return; +	n->diag = 1;  	if(l->type != T)  		yyerror("invalid conversion: %T to %T", l->type, t);  	else @@ -2204,8 +2208,6 @@ stringop(Node *n, int top)  	case OARRAY:  		// arraystring([]byte) string;  		r = n->left; -		if(isfixedarray(r->type)) -			r = nod(OADDR, r, N);  		on = syslook("arraystring", 0);  		r = nod(OCALL, on, r);  		break; | 
