diff --git a/src/hashmap.c b/src/hashmap.c index aafe077c..76299396 100644 --- a/src/hashmap.c +++ b/src/hashmap.c @@ -78,6 +78,7 @@ bool hash_RemoveElement(HashMap map, char const *key) *ptr = next; return true; } + ptr = &(*ptr)->next; } return false; } diff --git a/test/asm/sym-collision.asm b/test/asm/sym-collision.asm new file mode 100644 index 00000000..fa44ed6a --- /dev/null +++ b/test/asm/sym-collision.asm @@ -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" diff --git a/test/asm/sym-collision.err b/test/asm/sym-collision.err new file mode 100644 index 00000000..53a25652 --- /dev/null +++ b/test/asm/sym-collision.err @@ -0,0 +1,3 @@ +ERROR: sym-collision.asm(26): + 'dork' not defined +error: Assembly aborted (1 errors)! diff --git a/test/asm/sym-collision.out b/test/asm/sym-collision.out new file mode 100644 index 00000000..5f7cb010 --- /dev/null +++ b/test/asm/sym-collision.out @@ -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