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