From 8b8910595a4f1652265737a0d8efd931c3e7d201 Mon Sep 17 00:00:00 2001 From: David Given Date: Sun, 1 Jan 2017 17:56:53 +0000 Subject: [PATCH] Add proper support for negative constants in external initialisers. --- lang/b/compiler/b0.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lang/b/compiler/b0.c b/lang/b/compiler/b0.c index 16fbee167..a668724ce 100644 --- a/lang/b/compiler/b0.c +++ b/lang/b/compiler/b0.c @@ -542,6 +542,7 @@ extdef(void) int o, dim, i; char *bs; char *ms; + int neg; if ((o = symbol()) == EOFC || o == SEMI) return; @@ -549,6 +550,7 @@ extdef(void) goto syntax; bs = bsym->name; i = dim = 0; + neg = 0; switch(o = symbol()) { case SEMI: @@ -560,9 +562,16 @@ extdef(void) /* init */ case CON: case STRING: + case MINUS: global(bs); if (o == STRING) bsymb(bs); + else if (o == MINUS) { + o = symbol(); + if (o != CON) + goto syntax; + cval = -cval; + } C_df_dnam(manglename(bs, 'b')); pushsym(o); goto init;