Skip to content

Commit 7f52973

Browse files
drognanarlexicalscope
authored andcommitted
Fixes CowMap implementation
Ensures that `statics.snapshot()` actually shares the CowMaps. Conflicts: svm-classloading/src/main/java/com/lexicalscope/svm/classloading/StaticsImpl.java
1 parent 6832db3 commit 7f52973

File tree

2 files changed

+11
-17
lines changed

2 files changed

+11
-17
lines changed

svm-classloading/src/main/java/com/lexicalscope/svm/classloading/CowMap.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@ public class CowMap<K, V> implements Map<K, V> {
99
private MapInternal internal;
1010

1111
public CowMap() {
12-
this(new HashMap<K, V>());
13-
}
14-
15-
public CowMap(Map<K, V> delegate) {
16-
this.internal = new MapInternal(delegate);
12+
internal = new MapInternal(new HashMap<K, V>());
1713
}
1814

1915
public CowMap(CowMap<K, V> map) {

svm-classloading/src/main/java/com/lexicalscope/svm/classloading/StaticsImpl.java

+10-12
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44

55
import java.util.ArrayList;
66
import java.util.Collections;
7-
import java.util.HashMap;
87
import java.util.List;
9-
import java.util.Map;
108

119
import com.lexicalscope.svm.classloading.asm.AsmSClass;
1210
import com.lexicalscope.svm.heap.ObjectRef;
@@ -21,11 +19,11 @@
2119
public class StaticsImpl implements Statics {
2220
// TODO[tim]: need fast-clone version
2321
private static final KlassInternalName klassKlassName = internalName(Class.class);
24-
private final Map<KlassInternalName, SClass> defined;
22+
private final CowMap<KlassInternalName, SClass> defined;
2523

2624
// TODO[tim]: combine these maps for efficiency
27-
private final Map<SClass, ObjectRef> staticsAddresses;
28-
private final Map<SClass, ObjectRef> classAddresses;
25+
private final CowMap<SClass, ObjectRef> staticsAddresses;
26+
private final CowMap<SClass, ObjectRef> classAddresses;
2927

3028
private final SClassLoader classLoader;
3129

@@ -38,13 +36,13 @@ public StaticsImpl(final SClassLoader classLoader) {
3836

3937
private StaticsImpl(
4038
final SClassLoader classLoader,
41-
final Map<KlassInternalName, SClass> defined,
42-
final Map<SClass, ObjectRef> staticsAddresses,
43-
final Map<SClass, ObjectRef> classAddresses) {
44-
this.defined = defined;
45-
this.classLoader = classLoader;
46-
this.staticsAddresses = staticsAddresses;
47-
this.classAddresses = classAddresses;
39+
final CowMap<KlassInternalName, SClass> defined,
40+
final CowMap<SClass, ObjectRef> staticsAddresses,
41+
final CowMap<SClass, ObjectRef> classAddresses) {
42+
this.defined = defined;
43+
this.classLoader = classLoader;
44+
this.staticsAddresses = staticsAddresses;
45+
this.classAddresses = classAddresses;
4846
}
4947

5048
@Override public Statics snapshot() {

0 commit comments

Comments
 (0)