Skip to content

Commit 440b981

Browse files
committed
Changes based on review.
1 parent a3c2765 commit 440b981

File tree

5 files changed

+22
-13
lines changed

5 files changed

+22
-13
lines changed

src/main/java/org/truffleruby/Layouts.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
package org.truffleruby;
1111

1212
import com.oracle.truffle.api.object.HiddenKey;
13+
14+
import org.truffleruby.cext.ValueWrapperLayout;
15+
import org.truffleruby.cext.ValueWrapperLayoutImpl;
1316
import org.truffleruby.core.HandleLayout;
1417
import org.truffleruby.core.HandleLayoutImpl;
1518
import org.truffleruby.core.array.ArrayLayout;
@@ -146,5 +149,6 @@ public abstract class Layouts {
146149
public static final TracePointLayout TRACE_POINT = TracePointLayoutImpl.INSTANCE;
147150
public static final DigestLayout DIGEST = DigestLayoutImpl.INSTANCE;
148151
public static final SystemCallErrorLayout SYSTEM_CALL_ERROR = SystemCallErrorLayoutImpl.INSTANCE;
152+
public static final ValueWrapperLayout VALUE_WRAPPER = ValueWrapperLayoutImpl.INSTANCE;
149153

150154
}

src/main/java/org/truffleruby/cext/UnwrapNode.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.truffleruby.cext;
22

3+
import org.truffleruby.Layouts;
34
import org.truffleruby.language.RubyBaseNode;
45
import org.truffleruby.language.control.RaiseException;
56

@@ -14,7 +15,7 @@ public abstract class UnwrapNode extends RubyBaseNode {
1415

1516
@Specialization(guards = "isWrapper(value)")
1617
public Object unwrapValue(DynamicObject value) {
17-
return ValueWrapperObjectType.VALUE_WRAPPER.getObject(value);
18+
return Layouts.VALUE_WRAPPER.getObject(value);
1819
}
1920

2021
@Fallback
@@ -25,4 +26,4 @@ public Object unwrapTypeCastObject(Object value) {
2526
public static boolean isWrapper(TruffleObject value) {
2627
return ValueWrapperObjectType.isInstance(value);
2728
}
28-
}
29+
}

src/main/java/org/truffleruby/cext/ValueWrapperLayout.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
import com.oracle.truffle.api.object.DynamicObject;
1313
import com.oracle.truffle.api.object.dsl.Layout;
1414

15+
/**
16+
* This layout represents a VALUE in C which wraps the raw Ruby object. This allows foreign access
17+
* methods to be set up which convert these value wrappers to native pointers without affecting the
18+
* semantics of the wrapped objects.
19+
*/
1520
@Layout(objectTypeSuperclass = ValueWrapperObjectType.class)
1621
public interface ValueWrapperLayout {
1722

src/main/java/org/truffleruby/cext/ValueWrapperObjectType.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.cext;
1111

12+
import org.truffleruby.Layouts;
1213
import org.truffleruby.collections.LongHashMap;
1314
import org.truffleruby.language.NotProvided;
1415

@@ -19,8 +20,6 @@
1920

2021
public class ValueWrapperObjectType extends ObjectType {
2122

22-
public static final ValueWrapperLayout VALUE_WRAPPER = ValueWrapperLayoutImpl.INSTANCE;
23-
2423
private static DynamicObject UNDEF_WRAPPER = null;
2524

2625
private static DynamicObject TRUE_WRAPPER = null;
@@ -29,24 +28,24 @@ public class ValueWrapperObjectType extends ObjectType {
2928
private static LongHashMap<DynamicObject> longMap = new LongHashMap<>(128);
3029

3130
public static DynamicObject createValueWrapper(Object value) {
32-
return VALUE_WRAPPER.createValueWrapper(value);
31+
return Layouts.VALUE_WRAPPER.createValueWrapper(value);
3332
}
3433

3534
public static synchronized DynamicObject createUndefWrapper(NotProvided value) {
36-
return UNDEF_WRAPPER != null ? UNDEF_WRAPPER : (UNDEF_WRAPPER = VALUE_WRAPPER.createValueWrapper(value));
35+
return UNDEF_WRAPPER != null ? UNDEF_WRAPPER : (UNDEF_WRAPPER = Layouts.VALUE_WRAPPER.createValueWrapper(value));
3736
}
3837

3938
public static synchronized DynamicObject createBooleanWrapper(boolean value) {
4039
if (value) {
41-
return TRUE_WRAPPER != null ? TRUE_WRAPPER : (TRUE_WRAPPER = VALUE_WRAPPER.createValueWrapper(true));
40+
return TRUE_WRAPPER != null ? TRUE_WRAPPER : (TRUE_WRAPPER = Layouts.VALUE_WRAPPER.createValueWrapper(true));
4241
} else {
4342
return FALSE_WRAPPER != null ? FALSE_WRAPPER : (FALSE_WRAPPER = createFalseWrapper());
4443
}
4544
}
4645

47-
protected static DynamicObject createFalseWrapper() {
46+
private static DynamicObject createFalseWrapper() {
4847
// Ensure that Qfalse will by falsy in C.
49-
return VALUE_WRAPPER.createValueWrapper(false);
48+
return Layouts.VALUE_WRAPPER.createValueWrapper(false);
5049
}
5150

5251
/*
@@ -57,19 +56,19 @@ protected static DynamicObject createFalseWrapper() {
5756
public static synchronized DynamicObject createLongWrapper(long value) {
5857
DynamicObject wrapper = longMap.get(value);
5958
if (wrapper == null) {
60-
wrapper = VALUE_WRAPPER.createValueWrapper(value);
59+
wrapper = Layouts.VALUE_WRAPPER.createValueWrapper(value);
6160
longMap.put(value, wrapper);
6261
}
6362
return wrapper;
6463
}
6564

6665
@TruffleBoundary
6766
public static synchronized DynamicObject createDoubleWrapper(double value) {
68-
return VALUE_WRAPPER.createValueWrapper(value);
67+
return Layouts.VALUE_WRAPPER.createValueWrapper(value);
6968
}
7069

7170
public static boolean isInstance(TruffleObject receiver) {
72-
return VALUE_WRAPPER.isValueWrapper(receiver);
71+
return Layouts.VALUE_WRAPPER.isValueWrapper(receiver);
7372
}
7473

7574
}

src/main/java/org/truffleruby/cext/WrapNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,4 @@ public boolean isWrapped(TruffleObject value) {
8484
return ValueWrapperObjectType.isInstance(value);
8585
}
8686

87-
}
87+
}

0 commit comments

Comments
 (0)