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:
Rangi
2021-03-03 22:22:41 -05:00
parent 9c17fb14c8
commit 40902ffe24
148 changed files with 608 additions and 237 deletions

20
macros/asserts.asm Normal file
View 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

View File

@@ -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