Fix incorrect lexing of "$ff00+c" (#882)

Fixes #881 by moving the task from the lexer to the parser.
This both alleviates the need for backtracking in the lexer,
removing what is (was) arguably a hack, and causes tokenization
boundaries to be properly respected, fixing the issue mentioned above.

Co-authored-by: Rangi <remy.oukaour+rangi42@gmail.com>
This commit is contained in:
Eldred Habert
2021-05-05 02:04:19 +02:00
committed by GitHub
parent c502804192
commit c06985a7ad
13 changed files with 31 additions and 28 deletions

9
test/asm/ff00+c-bad.asm Normal file
View File

@@ -0,0 +1,9 @@
SECTION "ff00+c or not to ff00+c", ROMX
ld a, [$ff00 + c]
ld [65280 + c], a
; Not ok
ld a, [$ff01 + c]
ld [xyz + c], a

5
test/asm/ff00+c-bad.err Normal file
View File

@@ -0,0 +1,5 @@
ERROR: ff00+c-bad.asm(8):
Expected constant expression equal to $FF00 for "$ff00+c"
ERROR: ff00+c-bad.asm(9):
Expected constant expression equal to $FF00 for "$ff00+c"
error: Assembly aborted (2 errors)!

11
test/asm/ff00+c-label.asm Normal file
View File

@@ -0,0 +1,11 @@
CONSTANT equ 42
PRINTLN $ff00 + CONSTANT
SECTION "Overreading much?", ROM0[0]
jp $ff00 + CONSTANT
jp $ff00 + carryOnPlease
jp $ff00+CONSTANT
jp $ff00+carryOnPlease
carryOnPlease:

View File

@@ -0,0 +1 @@
$FF2A

View File

@@ -0,0 +1 @@
<EFBFBD>*<2A><> <0C><>*<2A><> <0C>

0
test/asm/ff00+c.err Normal file
View File

0
test/asm/ff00+c.out Normal file
View File