From 529b027f784bb9b94e2057282fd5ee34b9ef361a Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Fri, 12 Dec 2008 13:10:36 -0800 Subject: bug104 R=r OCL=21082 CL=21082 --- src/cmd/gc/const.c | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) (limited to 'src/cmd/gc/const.c') diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index a61ebe5ee..d8e38300d 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -34,7 +34,7 @@ truncfltlit(Mpflt *fv, Type *t) } void -convlit(Node *n, Type *t) +convlit1(Node *n, Type *t, int conv) { int et, wt; @@ -92,21 +92,6 @@ convlit(Node *n, Type *t) defaultlit(n); return; } - if(isptrto(t, TSTRING)) { - Rune rune; - int l; - String *s; - - rune = mpgetfix(n->val.u.xval); - l = runelen(rune); - s = mal(sizeof(*s)+l); - s->len = l; - runetochar((char*)(s->s), &rune); - - n->val.u.sval = s; - n->val.ctype = CTSTR; - break; - } if(isint[et]) { // int to int if(mpcmpfixfix(n->val.u.xval, minintval[et]) < 0) @@ -132,6 +117,25 @@ convlit(Node *n, Type *t) truncfltlit(fv, t); break; } + if(!conv) + goto bad1; + + // only done as string(CONST) + if(isptrto(t, TSTRING)) { + Rune rune; + int l; + String *s; + + rune = mpgetfix(n->val.u.xval); + l = runelen(rune); + s = mal(sizeof(*s)+l); + s->len = l; + runetochar((char*)(s->s), &rune); + + n->val.u.sval = s; + n->val.ctype = CTSTR; + break; + } goto bad1; case Wlitfloat: @@ -186,6 +190,12 @@ bad3: return; } +void +convlit(Node *n, Type *t) +{ + convlit1(n, t, 0); +} + void evconst(Node *n) { -- cgit v1.2.3