Implement a '#' prefix for raw identifiers that may alias keywords (#1480)

* Implement a '#' prefix for raw identifiers that may alias keywords

* Review comments

* Disallow hashless raw identifiers in interpolations

* Run clang-format
This commit is contained in:
Sylvie
2024-08-21 13:31:44 -04:00
committed by GitHub
parent 82e81ab1da
commit b438c83bda
11 changed files with 114 additions and 13 deletions

View File

@@ -0,0 +1,5 @@
MACRO #macro
println "all args: \#"
println "bad args: \<?>, \<#>"
ENDM
#macro a, #b, c, 1, #2, 3

View File

@@ -0,0 +1,5 @@
error: empty-raw-identifier.asm(5) -> empty-raw-identifier.asm::macro(3):
Invalid character in bracketed macro argument '?'
error: empty-raw-identifier.asm(5) -> empty-raw-identifier.asm::macro(3):
Empty raw symbol in bracketed macro argument
error: Assembly aborted (2 errors)!

View File

@@ -0,0 +1,2 @@
all args: a,#b,c,1,#2,3
bad args: >, >

View File

@@ -27,3 +27,6 @@ PRINTLN "label {label}"
MACRO foo
ENDM
PRINTLN "foo {foo}"
; hashless keyword
PRINTLN "xor {xor}"

View File

@@ -4,4 +4,6 @@ error: interpolation.asm(22):
Interpolated symbol "label" does not exist
error: interpolation.asm(29):
Interpolated symbol "foo" is not a numeric or string symbol
error: Assembly aborted (3 errors)!
error: interpolation.asm(32):
Interpolated symbol "xor" is a reserved keyword; add a '#' prefix to use it as a raw symbol
error: Assembly aborted (4 errors)!

View File

@@ -3,3 +3,4 @@ undef
label
label $7E
foo
xor

View File

@@ -0,0 +1,36 @@
def #DEF equ 1
def #def equ 2
def #ghi equ 3
export #def, #ghi
def #align = 0
def #rb rb #def
MACRO #macro
println "\<#def> is not \<#DEF>"
ENDM
#macro first, second
purge #macro
assert !def(#macro)
section "section", rom0
#section::
dw #section
#.rom0:
db BANK(#section.rom0)
#section.romx:
println "section.romx is in ", SECTION(.romx)
def #sub equs "def"
{#sub} #add equs "#"
for #for, {{#add}{#sub}}
println "for == ", #for
endr
assert #for == 2
assert !{#sub}(#FOR)
newcharmap #charmap, #main
charmap "#", $42
setcharmap #charmap
db "#"

View File

@@ -0,0 +1,4 @@
second is not first
section.romx is in section
for == $0
for == $1

Binary file not shown.