Require underscores to actually be digit separators (#1812)

Multiple, trailing, or next to decimal point are errors
This commit is contained in:
Rangi
2025-08-30 10:44:20 -04:00
committed by GitHub
parent 85176ef10a
commit 531278961f
7 changed files with 196 additions and 45 deletions

View File

@@ -9,11 +9,11 @@ ENDM
printargs A, B, C, D
MACRO mac
println \<2__> + \<1_2> + \<\1>
println \<2> + \<1_2> + \<\1>
def x = 2
println \<{d:x}> + \<1_{d:x}> + \<\<\<13>>>
def y equs "NARG"
println \<x> + \<1_{d:x}_> + \<\<\<_{y}>>>
println \<x> + \<1_{d:x}> + \<\<\<_{y}>>>
ENDM
mac 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 1

View File

@@ -2,11 +2,11 @@ error: Invalid integer constant, no digits after '$'
at invalid-numbers.asm::try(2) <- invalid-numbers.asm(11)
error: Invalid graphics constant, no digits after '`'
at invalid-numbers.asm::try(2) <- invalid-numbers.asm(12)
error: Invalid integer constant, no digits after '%'
error: Invalid integer constant, no digits after "0b"
at invalid-numbers.asm::try(2) <- invalid-numbers.asm(13)
error: Invalid integer constant, no digits after '&'
error: Invalid integer constant, no digits after "0o"
at invalid-numbers.asm::try(2) <- invalid-numbers.asm(14)
error: Invalid integer constant, no digits after '$'
error: Invalid integer constant, no digits after "0x"
at invalid-numbers.asm::try(2) <- invalid-numbers.asm(15)
warning: Integer constant is too large [-Wlarge-constant]
at invalid-numbers.asm::try(2) <- invalid-numbers.asm(18)

View File

@@ -0,0 +1,31 @@
; good
println 123_456
println %_1010_1010
println 0b_1010_1010
println &_555_555
println 0o_777_777
println $_dead_beef
println 0x_cafe_babe
println `_0101_2323
println 12_34.56_78
println 12_34.56_q8
; bad (multiple '_')
println 123__456
println %1010__1010
println &123__456
println $abc__def
println `0101__2323
println 3.14__15
println 2.718__Q16
; bad (trailing '_')
println 12345_
println 0b101010_
println 0o123456_
println 0xabcdef_
println `01230123_
; bad ('_' next to '.')
println 1_.618
println 2._718

View File

@@ -0,0 +1,29 @@
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(14)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(15)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(16)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(17)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(18)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(19)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(20)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(23)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(24)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(25)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(26)
error: Invalid graphics constant, trailing '_'
at invalid-underscore.asm(27)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(30)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(31)
Assembly aborted with 14 errors!

View File

@@ -0,0 +1,24 @@
$1E240
$AA
$AA
$2DB6D
$3FFFF
$DEADBEEF
$CAFEBABE
$F55
$4D2915B
$4D28F
$1E240
$AA
$A72E
$ABCDEF
$F55
$32439
$2B7CF
$3039
$2A
$A72E
$ABCDEF
$3355
$19E35
$2B7CF

View File

@@ -14,15 +14,15 @@ _1234::
; with underscores
dw _1234 ; label
db 123, 1_23, 1__23 ; decimal
db 123, 1_23, 12_3 ; decimal
dw 12_345 ; decimal
dw $ab_cd ; hex
db &2_0_0_ ; octal
db &2_0_0 ; octal
db %1111_0000, %1_0 ; binary
dl 6_._283_185 ; fixed point
dw `0123_3210, `00_33_22_11_ ; gfx
dl 6.283_185 ; fixed point
dw `0123_3210, `_00_33_22_11 ; gfx
; underscores with custom digits
opt g.ABC, b.X
db %.X.X_..XX_
dw `.A.B_.C.._
db %.X.X_..XX
dw `.A.B_.C..