|
- .equ RAMSTART 0x4000
- .equ ZASM_REG_MAXCNT 0xff
- .equ ZASM_LREG_MAXCNT 0x40
- .equ ZASM_REG_BUFSZ 0x1000
- .equ ZASM_LREG_BUFSZ 0x200
-
- ; declare DIREC_LASTVAL manually so that we don't have to include directive.asm
- .equ DIREC_LASTVAL RAMSTART
-
- jp test
-
- .inc "ascii.h"
- .inc "core.asm"
- .inc "str.asm"
- .inc "lib/util.asm"
- .inc "lib/ari.asm"
- .inc "lib/fmt.asm"
- .inc "zasm/util.asm"
- .inc "zasm/const.asm"
- .inc "lib/parse.asm"
- .inc "zasm/parse.asm"
- .equ SYM_RAMSTART DIREC_LASTVAL+2
- .inc "zasm/symbol.asm"
- .equ EXPR_PARSE parseNumberOrSymbol
- .inc "lib/expr.asm"
- .equ STDIO_RAMSTART SYM_RAMEND
- .inc "stdio.asm"
- .inc "common.asm"
-
- ; Pretend that we aren't in first pass
- zasmIsFirstPass:
- jp unsetZ
-
- zasmGetPC:
- ret
-
-
- sFOO: .db "FOO", 0
- sBAR: .db "BAR", 0
-
- test:
- ld sp, 0xffff
-
- ; before testing begins, let's set up FOO and BAR symbols
- call symInit
- ld hl, sFOO
- ld de, 0x4000
- call symRegisterGlobal
- jp nz, fail
- ld hl, sBAR
- ld de, 0x20
- call symRegisterGlobal
- jp nz, fail
-
- call testParseExpr
- call testSPOnFail
-
- ; success
- xor a
- halt
-
- testParseExpr:
- ld hl, .alltests
- ld ix, .test
- jp testList
-
- .test:
- push hl \ pop iy
- inc hl \ inc hl
- call parseExpr
- call assertZ
- ld l, (iy)
- ld h, (iy+1)
- jp assertEQW
-
- .t1:
- .dw 7
- .db "42/6", 0
- .t2:
- .dw 1
- .db "7%3", 0
- .t3:
- .dw 0x0907
- .db "0x99f7&0x0f0f", 0
- .t4:
- .dw 0x9fff
- .db "0x99f7|0x0f0f", 0
- .t5:
- .dw 0x96f8
- .db "0x99f7^0x0f0f", 0
- .t6:
- .dw 0x133e
- .db "0x99f7}3", 0
- .t7:
- .dw 0xcfb8
- .db "0x99f7{3", 0
- .t8:
- .dw 0xffff
- .db "-1", 0
- .t9:
- .dw 10
- .db "2*3+4", 0
-
- ; There was this untested regression during the replacement of find-and-subst
- ; parseExpr to the recursive descent one. It was time consuming to find. Here
- ; it goes, here it stays.
- .t10:
- .dw '-'+1
- .db "'-'+1", 0
-
- .t11:
- .dw 0x4023
- .db "0x4001+0x22", 0
-
- .t12:
- .dw 0x4020
- .db "FOO+BAR", 0
-
- .t13:
- .dw 0x60
- .db "BAR*3", 0
-
- .t14:
- .dw 0x3ffd
- .db "FOO-3", 0
-
- .t15:
- .dw 0x4080
- .db "FOO+BAR*4", 0
-
- ; "0" is a special case, let's test it
- .t16:
- .dw 0
- .db "0", 0
-
- ; Another one that caused troubles
- .t17:
- .dw 123
- .db "0+123", 0
-
- .alltests:
- .dw .t1, .t2, .t3, .t4, .t5, .t6, .t7, .t8, .t9, .t10, .t11, .t12
- .dw .t13, .t14, .t15, .t16, .t17, 0
-
- ; Ensure that stack is balanced on failure
- testSPOnFail:
- ld (testSP), sp
- ld hl, .sFail
- call parseExpr
- call assertNZ
- call assertSP
- jp nexttest
-
- .sFail: .db "1+abc123", 0
|