From 3c5e1caa7c29d1a559d1144d3d00d9d981a7ac9a Mon Sep 17 00:00:00 2001 From: Rangi Date: Tue, 23 Feb 2021 19:31:58 -0500 Subject: [PATCH] Disallow "." as a local label Fixes #760 --- src/asm/lexer.c | 6 ++++-- src/asm/parser.y | 1 + test/asm/period.asm | 5 +++++ test/asm/period.err | 3 +++ test/asm/{undefined-dot.err => period.out} | 0 test/asm/period.simple.err | 3 +++ test/asm/undefined-dot.asm | 3 --- test/asm/undefined-local.asm | 3 +++ test/asm/{undefined-dot.out => undefined-local.err} | 0 test/asm/undefined-local.out | 0 10 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 test/asm/period.asm create mode 100644 test/asm/period.err rename test/asm/{undefined-dot.err => period.out} (100%) create mode 100644 test/asm/period.simple.err delete mode 100644 test/asm/undefined-dot.asm create mode 100644 test/asm/undefined-local.asm rename test/asm/{undefined-dot.out => undefined-local.err} (100%) create mode 100644 test/asm/undefined-local.out diff --git a/src/asm/lexer.c b/src/asm/lexer.c index c55a3be1..7f9f48a6 100644 --- a/src/asm/lexer.c +++ b/src/asm/lexer.c @@ -287,7 +287,9 @@ static struct KeywordMapping { {"PUSHO", T_POP_PUSHO}, {"POPO", T_POP_POPO}, - {"OPT", T_POP_OPT} + {"OPT", T_POP_OPT}, + + {".", T_PERIOD}, }; static bool isWhitespace(int c) @@ -576,7 +578,7 @@ struct KeywordDictNode { uint16_t children[0x60 - ' ']; struct KeywordMapping const *keyword; /* Since the keyword structure is invariant, the min number of nodes is known at compile time */ -} keywordDict[350] = {0}; /* Make sure to keep this correct when adding keywords! */ +} keywordDict[351] = {0}; /* Make sure to keep this correct when adding keywords! */ /* Convert a char into its index into the dict */ static inline uint8_t dictIndex(char c) diff --git a/src/asm/parser.y b/src/asm/parser.y index c0ef3d09..9089531a 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -460,6 +460,7 @@ enum { %token T_NUMBER "number" %token T_STRING "string" +%token T_PERIOD "." %token T_COMMA "," %token T_COLON ":" %token T_LBRACK "[" T_RBRACK "]" diff --git a/test/asm/period.asm b/test/asm/period.asm new file mode 100644 index 00000000..286a53e3 --- /dev/null +++ b/test/asm/period.asm @@ -0,0 +1,5 @@ +section "period", rom0 + +global1: db 1 +.local db 2 +. db 3 diff --git a/test/asm/period.err b/test/asm/period.err new file mode 100644 index 00000000..5ff4f285 --- /dev/null +++ b/test/asm/period.err @@ -0,0 +1,3 @@ +ERROR: period.asm(5): + syntax error, unexpected . +error: Assembly aborted (1 errors)! diff --git a/test/asm/undefined-dot.err b/test/asm/period.out similarity index 100% rename from test/asm/undefined-dot.err rename to test/asm/period.out diff --git a/test/asm/period.simple.err b/test/asm/period.simple.err new file mode 100644 index 00000000..b742ac7d --- /dev/null +++ b/test/asm/period.simple.err @@ -0,0 +1,3 @@ +ERROR: period.asm(5): + syntax error +error: Assembly aborted (1 errors)! diff --git a/test/asm/undefined-dot.asm b/test/asm/undefined-dot.asm deleted file mode 100644 index a30baee1..00000000 --- a/test/asm/undefined-dot.asm +++ /dev/null @@ -1,3 +0,0 @@ -SECTION "sec", ROM0 -foo: - add sp, . diff --git a/test/asm/undefined-local.asm b/test/asm/undefined-local.asm new file mode 100644 index 00000000..246a1a86 --- /dev/null +++ b/test/asm/undefined-local.asm @@ -0,0 +1,3 @@ +SECTION "sec", ROM0 +foo: + add sp, .bar ; rgblink gives an "Unknown symbol" error here diff --git a/test/asm/undefined-dot.out b/test/asm/undefined-local.err similarity index 100% rename from test/asm/undefined-dot.out rename to test/asm/undefined-local.err diff --git a/test/asm/undefined-local.out b/test/asm/undefined-local.out new file mode 100644 index 00000000..e69de29b