You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-04-09 05:44:44 -07:00
Verify data table sizes with table_width and assert_table_length macros
This was discussed in #706 It also uncovered some off-by-one issues with defining some constants. A few structs now use rsreset/_RS to define their offset constants, as discussed in #739
This commit is contained in:
20
macros/asserts.asm
Normal file
20
macros/asserts.asm
Normal file
@@ -0,0 +1,20 @@
|
||||
; Macros to verify assumptions about the data or code
|
||||
|
||||
table_width: MACRO
|
||||
CURRENT_TABLE_WIDTH = \1
|
||||
if DEF(CURRENT_TABLE_START)
|
||||
PURGE CURRENT_TABLE_START
|
||||
endc
|
||||
if _NARG == 2
|
||||
CURRENT_TABLE_START EQUS "\2"
|
||||
else
|
||||
CURRENT_TABLE_START EQUS "._table_width\@"
|
||||
CURRENT_TABLE_START:
|
||||
endc
|
||||
ENDM
|
||||
|
||||
assert_table_length: MACRO
|
||||
x = \1
|
||||
assert x * CURRENT_TABLE_WIDTH == @ - CURRENT_TABLE_START, \
|
||||
"{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes"
|
||||
ENDM
|
@@ -180,6 +180,7 @@ ENDM
|
||||
command supereffectivelooptext ; ad
|
||||
command startloop ; ae
|
||||
command curl ; af
|
||||
NUM_EFFECT_COMMANDS EQU const_value - 1
|
||||
|
||||
const_def -1, -1
|
||||
command endmove ; ff
|
||||
|
Reference in New Issue
Block a user