mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Fix hashmap collisions sometimes hanging deletion
This commit is contained in:
@@ -78,6 +78,7 @@ bool hash_RemoveElement(HashMap map, char const *key)
|
||||
*ptr = next;
|
||||
return true;
|
||||
}
|
||||
ptr = &(*ptr)->next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
34
test/asm/sym-collision.asm
Normal file
34
test/asm/sym-collision.asm
Normal file
@@ -0,0 +1,34 @@
|
||||
; Hashmap collisions are pretty poorly-tested code path...
|
||||
; At some point, `PURGE` would malfunction with them
|
||||
|
||||
SECTION "Collision course", OAM[$FE00]
|
||||
|
||||
; All the following symbols collide!
|
||||
aqfj: ds 1 ; Give them different addresses
|
||||
cxje: ds 1
|
||||
dgsd: ds 1
|
||||
dork: ds 1
|
||||
lxok: ds 1
|
||||
psgp: ds 1
|
||||
sfly: ds 1
|
||||
syyq: ds 1
|
||||
ussg: ds 1
|
||||
xlmm: ds 1
|
||||
xtzp: ds 1
|
||||
zxfr: ds 1
|
||||
|
||||
; Completely by accident, but cool
|
||||
PURGE dork
|
||||
|
||||
PRINTT "aqfj: {aqfj}\n"
|
||||
PRINTT "cxje: {cxje}\n"
|
||||
PRINTT "dgsd: {dgsd}\n"
|
||||
PRINTT "dork: {dork}\n"
|
||||
PRINTT "lxok: {lxok}\n"
|
||||
PRINTT "psgp: {psgp}\n"
|
||||
PRINTT "sfly: {sfly}\n"
|
||||
PRINTT "syyq: {syyq}\n"
|
||||
PRINTT "ussg: {ussg}\n"
|
||||
PRINTT "xlmm: {xlmm}\n"
|
||||
PRINTT "xtzp: {xtzp}\n"
|
||||
PRINTT "zxfr: {zxfr}\n"
|
||||
3
test/asm/sym-collision.err
Normal file
3
test/asm/sym-collision.err
Normal file
@@ -0,0 +1,3 @@
|
||||
ERROR: sym-collision.asm(26):
|
||||
'dork' not defined
|
||||
error: Assembly aborted (1 errors)!
|
||||
12
test/asm/sym-collision.out
Normal file
12
test/asm/sym-collision.out
Normal file
@@ -0,0 +1,12 @@
|
||||
aqfj: $FE00
|
||||
cxje: $FE01
|
||||
dgsd: $FE02
|
||||
dork: $0
|
||||
lxok: $FE04
|
||||
psgp: $FE05
|
||||
sfly: $FE06
|
||||
syyq: $FE07
|
||||
ussg: $FE08
|
||||
xlmm: $FE09
|
||||
xtzp: $FE0A
|
||||
zxfr: $FE0B
|
||||
Reference in New Issue
Block a user