summaryrefslogtreecommitdiff
path: root/src/cmd/gc/subr.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2008-10-16 15:59:31 -0700
committerRuss Cox <rsc@golang.org>2008-10-16 15:59:31 -0700
commit9f032217e78085cabbc4d065f3ab2a8a8c74cee7 (patch)
treee0a34202934220fbb1b8af43881269f95e53121e /src/cmd/gc/subr.c
parent6c66c1d30ab1acccbf37ab7ece81b9949950c2e2 (diff)
downloadgolang-9f032217e78085cabbc4d065f3ab2a8a8c74cee7.tar.gz
diagnose various conversion problems
R=ken OCL=17320 CL=17320
Diffstat (limited to 'src/cmd/gc/subr.c')
-rw-r--r--src/cmd/gc/subr.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index 76c585d67..c086aeb85 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -822,6 +822,8 @@ etnames[] =
[TSTRING] = "STRING",
[TCHAN] = "CHAN",
[TANY] = "ANY",
+ [TFORWINTER] = "FORWINTER",
+ [TFORWSTRUCT] = "FORWSTRUCT",
};
int
@@ -1327,6 +1329,36 @@ out:
return fmtstrcpy(fp, buf);
}
+
+static char*
+wnames[] =
+{
+ [Wnil] = "Wnil",
+ [Wtnil] = "Wtnil",
+
+ [Wtfloat] = "Wtfloat",
+ [Wtint] = "Wtint",
+ [Wtbool] = "Wtbool",
+ [Wtstr] = "Wtstr",
+
+ [Wlitfloat] = "float constant",
+ [Wlitint] = "int constant",
+ [Wlitbool] = "bool",
+ [Wlitstr] = "string",
+ [Wlitnil] = "nil",
+};
+
+int
+Wconv(Fmt *fp)
+{
+ char buf[500];
+ int w;
+
+ w = va_arg(fp->args, int);
+ if(w < 0 || w >= nelem(wnames) || wnames[w] == nil)
+ return fmtprint(fp, "W-%d", w);
+ return fmtstrcpy(fp, wnames[w]);
+}
int
isnil(Node *n)
{
@@ -1466,6 +1498,20 @@ out:
return t;
}
+int
+iscomposite(Type *t)
+{
+ if(t == T)
+ return 0;
+ switch(t->etype) {
+ case TMAP:
+ case TARRAY:
+ case TSTRUCT:
+ return 1;
+ }
+ return 0;
+}
+
Sym*
globalsig(Type *t)
{