]> Cypherpunks repositories - gostls13.git/commitdiff
Adding more debug output when 5l encounters a bad op
authorKai Backman <kaib@golang.org>
Fri, 26 Jun 2009 20:44:25 +0000 (13:44 -0700)
committerKai Backman <kaib@golang.org>
Fri, 26 Jun 2009 20:44:25 +0000 (13:44 -0700)
combination.

R=rsc
APPROVED=rsc
DELTA=69  (68 added, 0 deleted, 1 changed)
OCL=30798
CL=30801

src/cmd/5l/l.h
src/cmd/5l/list.c
src/cmd/5l/span.c

index 1237b7875b2bc035f6437ee96bb41492b720f28e..685b9ce557dd7130e1ef4ad2dd2eff3d6b8a55dc 100644 (file)
@@ -381,6 +381,7 @@ int Aconv(Fmt*);
 int    Cconv(Fmt*);
 int    Dconv(Fmt*);
 int    Nconv(Fmt*);
+int    Oconv(Fmt*);
 int    Pconv(Fmt*);
 int    Sconv(Fmt*);
 int    aclass(Adr*);
index c3153938c1badd66c04a958578c075fa8584aee2..a039c2d2b64bc36b91f5382897d56047404ea6bc 100644 (file)
@@ -40,6 +40,7 @@ listinit(void)
        fmtinstall('P', Pconv);
        fmtinstall('S', Sconv);
        fmtinstall('N', Nconv);
+       fmtinstall('O', Oconv);         // C_type constants
 }
 
 void
@@ -372,6 +373,72 @@ Sconv(Fmt *fp)
        return fmtstrcpy(fp, str);
 }
 
+static char*
+cnames[] =
+{
+       [C_ADDR]        = "C_ADDR",
+       [C_BCON]        = "C_BCON",
+       [C_FAUTO]       = "C_FAUTO",
+       [C_FCON]        = "C_FCON",
+       [C_FCR]         = "C_FCR",
+       [C_FEXT]        = "C_FEXT",
+       [C_FOREG]       = "C_FOREG",
+       [C_FREG]        = "C_FREG",
+       [C_GACON]       = "C_GACON",
+       [C_GBRA]        = "C_GBRA",
+       [C_GCON]        = "C_GCON",
+       [C_GOK]         = "C_GOK",
+       [C_GOREG]       = "C_GOREG",
+       [C_HAUTO]       = "C_HAUTO",
+       [C_HEXT]        = "C_HEXT",
+       [C_HFAUTO]      = "C_HFAUTO",
+       [C_HFEXT]       = "C_HFEXT",
+       [C_HFOREG]      = "C_HFOREG",
+       [C_HOREG]       = "C_HOREG",
+       [C_HREG]        = "C_HREG",
+       [C_LACON]       = "C_LACON",
+       [C_LAUTO]       = "C_LAUTO",
+       [C_LBRA]        = "C_LBRA",
+       [C_LCON]        = "C_LCON",
+       [C_LECON]       = "C_LECON",
+       [C_LEXT]        = "C_LEXT",
+       [C_LOREG]       = "C_LOREG",
+       [C_NCON]        = "C_NCON",
+       [C_NONE]        = "C_NONE",
+       [C_OFFPC]       = "C_OFFPC",
+       [C_PC]          = "C_PC",
+       [C_PSR]         = "C_PSR",
+       [C_RACON]       = "C_RACON",
+       [C_RCON]        = "C_RCON",
+       [C_RECON]       = "C_RECON",
+       [C_REG]         = "C_REG",
+       [C_REGREG]      = "C_REGREG",
+       [C_ROREG]       = "C_ROREG",
+       [C_SACON]       = "C_SACON",
+       [C_SAUTO]       = "C_SAUTO",
+       [C_SBRA]        = "C_SBRA",
+       [C_SCON]        = "C_SCON",
+       [C_SEXT]        = "C_SEXT",
+       [C_SHIFT]       = "C_SHIFT",
+       [C_SOREG]       = "C_SOREG",
+       [C_SP]          = "C_SP",
+       [C_SROREG]      = "C_SROREG"
+};
+
+int
+Oconv(Fmt *fp)
+{
+       char buf[500];
+       int o;
+
+       o = va_arg(fp->args, int);
+       if(o < 0 || o >= nelem(cnames) || cnames[o] == nil) {
+               snprint(buf, sizeof(buf), "C_%d", o);
+               return fmtstrcpy(fp, buf);
+       }
+       return fmtstrcpy(fp, cnames[o]);
+}
+
 void
 diag(char *fmt, ...)
 {
index bf7bd34a480bc0507154c4269a9f5fd7dbedaa2d..ef80bed9c35821e28c6cf025e3e72b218264ba93 100644 (file)
@@ -864,7 +864,7 @@ oplook(Prog *p)
                        p->optab = (o-otab)+1;
                        return o;
                }
-       diag("illegal combination %A %d %d %d, %d %d",
+       diag("illegal combination %A %O %O %O, %d %d",
                p->as, a1, a2, a3, p->from.type, p->to.type);
        prasm(p);
        if(o == 0)