Jump tables for switch now go in ROM (required by the EM spec). Forward gotos
authorDavid Given <dg@cowlark.com>
Sun, 1 Jan 2017 23:28:41 +0000 (23:28 +0000)
committerDavid Given <dg@cowlark.com>
Sun, 1 Jan 2017 23:28:41 +0000 (23:28 +0000)
now work.

lang/b/compiler/b0.c

index a668724..7ae3523 100644 (file)
@@ -759,13 +759,13 @@ pswitch(void)
                deflab = brklab;
 
        C_df_dlb(swlab);
-       C_con_ilb(deflab);
-       C_con_cst(swp - sswp);
+       C_rom_ilb(deflab);
+       C_rom_cst(swp - sswp);
 
        while (swp > sswp && swp > swtab) {
                --swp;
-               C_con_cst(swp->swval);
-               C_con_ilb(swp->swlab);
+               C_rom_cst(swp->swval);
+               C_rom_ilb(swp->swlab);
        }
 
        C_df_ilb(brklab);
@@ -812,6 +812,8 @@ stmt:
                case GOTO:
                        if ((o = symbol()) != NAME)
                                goto syntax;
+                       if (bsym->offset == 0)
+                               bsym->offset = isn++;
                        jump(bsym->offset);
                        goto semi;
 
@@ -913,7 +915,8 @@ stmt:
                                goto stmt;
                        }
                        bsym->class = INTERN;
-                       bsym->offset = isn++;
+                       if (bsym->offset == 0)
+                               bsym->offset = isn++;
                        fnlabel(bsym->offset);
                        goto stmt;
                }