eliminate retainRelease and skippedRelease

This commit is contained in:
dcode
2019-05-25 19:16:09 +02:00
parent bd9d77e151
commit 3224925e47
37 changed files with 8521 additions and 5537 deletions

View File

@ -105,9 +105,15 @@ export class Map<K,V> {
var hashCode = HASH<K>(key);
var entry = this.find(key, hashCode); // unmanaged!
if (entry) {
entry.value = isManaged<V>()
? changetype<V>(__retainRelease(changetype<usize>(entry.value), changetype<usize>(value)))
: value;
if (isManaged<V>()) {
let oldRef = changetype<usize>(entry.value);
if (changetype<usize>(value) != oldRef) {
entry.value = changetype<V>(__retain(changetype<usize>(value)));
__release(oldRef);
}
} else {
entry.value = value;
}
} else {
// check if rehashing is necessary
if (this.entriesOffset == this.entriesCapacity) {