Skip to content

Commit f2fba7a

Browse files
authored
Merge pull request #168 from bulasevich/GR-53902
[Backport][GR-53902] Fix DynamicObjectLibrary.setPropertyFlags.
2 parents 19b34cc + ff9d807 commit f2fba7a

File tree

3 files changed

+14
-17
lines changed

3 files changed

+14
-17
lines changed

truffle/src/com.oracle.truffle.object/src/com/oracle/truffle/object/DynamicObjectLibraryImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,13 +654,13 @@ public Property getProperty(DynamicObject object, Shape cachedShape, Object key)
654654
@TruffleBoundary
655655
@Override
656656
public boolean setPropertyFlags(DynamicObject object, Shape cachedShape, Object key, int propertyFlags) {
657+
updateShapeImpl(object);
657658
ShapeImpl oldShape = (ShapeImpl) ACCESS.getShape(object);
658659
Property existingProperty = oldShape.getProperty(key);
659660
if (existingProperty == null) {
660661
return false;
661662
}
662663
if (existingProperty.getFlags() != propertyFlags) {
663-
updateShapeImpl(object);
664664
Shape newShape = changePropertyFlags(oldShape, (PropertyImpl) existingProperty, propertyFlags);
665665
if (newShape != oldShape) {
666666
ACCESS.setShape(object, newShape);

truffle/src/com.oracle.truffle.object/src/com/oracle/truffle/object/TrieNode.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ final E find(K key, int hash) {
6262
}
6363

6464
final TrieNode<K, V, E> put(K key, int hash, E entry) {
65-
assert key != null && hash(key) == hash && key(entry).equals(key);
65+
assert key != null && hash(key) == hash && key(entry).equals(key) : Arrays.asList(entry, key);
6666
return put(key, hash, entry, 0);
6767
}
6868

@@ -205,7 +205,7 @@ private String toStringIndent(int indent) {
205205
}
206206

207207
final TrieNode<K, V, E> combine(K key1, int hash1, E entry1, K key2, int hash2, E entry2, int shift) {
208-
assert !key1.equals(key2);
208+
assert !key1.equals(key2) : Arrays.asList(key1, key2);
209209
if (hash1 != hash2) {
210210
int pos1 = pos(hash1, shift);
211211
int pos2 = pos(hash2, shift);
@@ -388,7 +388,7 @@ E find(K key, int hash, int shift) {
388388
return null;
389389
} else {
390390
E entry = (E) entries[index];
391-
assert entry != null && key(entry).equals(key);
391+
assert entry != null && key(entry).equals(key) : Arrays.asList(entry, key);
392392
return entry;
393393
}
394394
}
@@ -402,7 +402,7 @@ TrieNode<K, V, E> put(K key, int hash, E entry, int shift) {
402402
return new HashCollisionNode<>(hash, copyAndAppend(entries, entry));
403403
} else {
404404
E e = (E) entries[index];
405-
assert e != null && key(e).equals(key);
405+
assert e != null && key(e).equals(key) : Arrays.asList(e, key);
406406
if (e.equals(entry)) {
407407
return this;
408408
} else {
@@ -421,7 +421,7 @@ TrieNode<K, V, E> remove(K key, int hash, int shift) {
421421
if (index < 0) {
422422
return this;
423423
} else {
424-
assert entries[index] != null && key((E) entries[index]).equals(key);
424+
assert entries[index] != null && key((E) entries[index]).equals(key) : Arrays.asList(entries[index], key);
425425
assert entries.length >= 2;
426426
if (entries.length == 2) {
427427
return new BitmapNode<>(bit(this.hashcode, shift), copyAndRemove(entries, index));

truffle/src/com.oracle.truffle.object/src/com/oracle/truffle/object/TriePropertyMap.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
package com.oracle.truffle.object;
4242

4343
import java.util.AbstractSet;
44+
import java.util.Arrays;
4445
import java.util.Collection;
4546
import java.util.Iterator;
4647
import java.util.Map;
@@ -155,6 +156,7 @@ private TriePropertyMap(int size, TrieNode<Object, Property, LinkedPropertyEntry
155156
}
156157

157158
private boolean verify() {
159+
assert root != null;
158160
assert (size == 0 && head == null && tail == null) || (size != 0 && head != null && tail != null) : "size=" + size + ", head=" + head + ", tail=" + tail;
159161
assert head == null || head == getEntry(head.getKey());
160162
assert tail == null || tail == getEntry(tail.getKey());
@@ -211,7 +213,7 @@ public Property get(Object key) {
211213
@Override
212214
public LinkedPropertyEntry getEntry(Object key) {
213215
LinkedPropertyEntry entry = root.find(key, hash(key));
214-
assert entry == null || entry.getKey().equals(key);
216+
assert entry == null || entry.getKey().equals(key) : Arrays.asList(entry, key);
215217
return entry;
216218
}
217219

@@ -268,17 +270,13 @@ private TriePropertyMap copyAndPutImpl(Object key, Property value) {
268270
newTail = tail;
269271

270272
newEntry = existing.withValue(value);
271-
assert !newEntry.equals(existing);
272-
if (existing.getPrevKey() != null) {
273-
assert getEntry(existing.getPrevKey()).getNextKey().equals(key);
274-
} else {
275-
assert existing == head;
273+
assert !newEntry.equals(existing) : Arrays.asList(newEntry, existing);
274+
if (existing.getPrevKey() == null) {
275+
assert existing == head : Arrays.asList(existing, head);
276276
newHead = newEntry;
277277
}
278-
if (existing.getNextKey() != null) {
279-
assert getEntry(existing.getNextKey()).getPrevKey().equals(key);
280-
} else {
281-
assert existing == tail;
278+
if (existing.getNextKey() == null) {
279+
assert existing == tail : Arrays.asList(existing, tail);
282280
newTail = newEntry;
283281
}
284282
}
@@ -329,7 +327,6 @@ public TriePropertyMap copyAndRemove(Object key) {
329327
}
330328
}
331329
newRoot = newRoot.remove(key, hash);
332-
assert newRoot != null;
333330
return new TriePropertyMap(size - 1, newRoot, newHead, newTail);
334331
}
335332

0 commit comments

Comments
 (0)