Improve error stack

The old error stack was fairly obtuse and hard to use for debugging.
This improves it notably by ensuring all line numbers are relative
to the file, and not, say, the macro definition.
This is a breaking change if you were parsing the old stack, but
the change should be painless, and the new stack only brings more info.
The syntax is unchanged for files, macros see their name prefixed
with the file they're defined in and a pair of colors, REPT blocks
simply append a '::REPT~n' to the context they're in, where 'n' is
the number of iterations the REPT has done.
This is especially helpful in macro-heavy code such as rgbds-structs.
This commit is contained in:
ISSOtm
2019-08-29 17:03:50 +02:00
parent 4ef27a0d23
commit 37089ef940
15 changed files with 100 additions and 36 deletions

View File

@@ -1,4 +1,4 @@
ERROR: label-macro-arg.asm(45) -> test_char(2):
ERROR: label-macro-arg.asm(45) -> label-macro-arg.asm::test_char(31):
Macro 'something' not defined
$5
$6

View File

@@ -1,4 +1,4 @@
ERROR: -(45) -> test_char(2):
ERROR: -(45) -> -::test_char(31):
Macro 'something' not defined
$5
$6

View File

@@ -1,3 +1,3 @@
ERROR: label-redefinition.asm(7):
'Sym' already defined in m(6)
'Sym' already defined in label-redefinition.asm::m(6)
error: Assembly aborted (1 errors)!

View File

@@ -1,3 +1,3 @@
ERROR: -(7):
'Sym' already defined in m(6)
'Sym' already defined in -::m(6)
error: Assembly aborted (1 errors)!

View File

@@ -1,2 +1,2 @@
ERROR: macro-recursion.asm(4) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1):
ERROR: macro-recursion.asm(4) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2) -> macro-recursion.asm::recurse(2):
Recursion limit (64) exceeded

View File

@@ -1,2 +1,2 @@
ERROR: -(4) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1) -> recurse(1):
ERROR: -(4) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2) -> -::recurse(2):
Recursion limit (64) exceeded

View File

@@ -1,10 +1,10 @@
warning: multiple-charmaps.asm(75):
Using 'charmap' within a section when the current charmap is 'main' is deprecated
ERROR: multiple-charmaps.asm(100) -> new_(6):
ERROR: multiple-charmaps.asm(100) -> multiple-charmaps.asm::new_(7):
Charmap 'map1' already exists
ERROR: multiple-charmaps.asm(102) -> set_(2):
ERROR: multiple-charmaps.asm(102) -> multiple-charmaps.asm::set_(13):
Charmap 'map5' doesn't exist
ERROR: multiple-charmaps.asm(104) -> pop_(2):
ERROR: multiple-charmaps.asm(104) -> multiple-charmaps.asm::pop_(23):
No entries in the charmap stack
main charmap
$0

View File

@@ -1,10 +1,10 @@
warning: -(75):
Using 'charmap' within a section when the current charmap is 'main' is deprecated
ERROR: -(100) -> new_(6):
ERROR: -(100) -> -::new_(7):
Charmap 'map1' already exists
ERROR: -(102) -> set_(2):
ERROR: -(102) -> -::set_(13):
Charmap 'map5' doesn't exist
ERROR: -(104) -> pop_(2):
ERROR: -(104) -> -::pop_(23):
No entries in the charmap stack
main charmap
$0

View File

@@ -1,18 +1,18 @@
warning: strsub.asm(13) -> xstrsub(1):
warning: strsub.asm(13) -> strsub.asm::xstrsub(4):
STRSUB: Length too big: 32
warning: strsub.asm(14) -> xstrsub(1):
warning: strsub.asm(14) -> strsub.asm::xstrsub(4):
STRSUB: Length too big: 300
warning: strsub.asm(15) -> xstrsub(1):
warning: strsub.asm(15) -> strsub.asm::xstrsub(4):
STRSUB: Position starts at 1
warning: strsub.asm(15) -> xstrsub(1):
warning: strsub.asm(15) -> strsub.asm::xstrsub(4):
STRSUB: Length too big: 300
warning: strsub.asm(16) -> xstrsub(1):
warning: strsub.asm(16) -> strsub.asm::xstrsub(4):
STRSUB: Position 4 is past the end of the string
warning: strsub.asm(17) -> xstrsub(1):
warning: strsub.asm(17) -> strsub.asm::xstrsub(4):
STRSUB: Position 4 is past the end of the string
warning: strsub.asm(17) -> xstrsub(1):
warning: strsub.asm(17) -> strsub.asm::xstrsub(4):
STRSUB: Length too big: 1
warning: strsub.asm(20) -> xstrsub(1):
warning: strsub.asm(20) -> strsub.asm::xstrsub(4):
STRSUB: Length too big: 10
A
B

View File

@@ -1,18 +1,18 @@
warning: -(13) -> xstrsub(1):
warning: -(13) -> -::xstrsub(4):
STRSUB: Length too big: 32
warning: -(14) -> xstrsub(1):
warning: -(14) -> -::xstrsub(4):
STRSUB: Length too big: 300
warning: -(15) -> xstrsub(1):
warning: -(15) -> -::xstrsub(4):
STRSUB: Position starts at 1
warning: -(15) -> xstrsub(1):
warning: -(15) -> -::xstrsub(4):
STRSUB: Length too big: 300
warning: -(16) -> xstrsub(1):
warning: -(16) -> -::xstrsub(4):
STRSUB: Position 4 is past the end of the string
warning: -(17) -> xstrsub(1):
warning: -(17) -> -::xstrsub(4):
STRSUB: Position 4 is past the end of the string
warning: -(17) -> xstrsub(1):
warning: -(17) -> -::xstrsub(4):
STRSUB: Length too big: 1
warning: -(20) -> xstrsub(1):
warning: -(20) -> -::xstrsub(4):
STRSUB: Length too big: 10
A
B