Skip to content

Commit cd4d369

Browse files
committed
Start using @Bind.DefaultExpression
1 parent 568d1c8 commit cd4d369

22 files changed

+269
-254
lines changed

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/image/SqueakImageContext.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.oracle.truffle.api.TruffleFile;
1919
import com.oracle.truffle.api.TruffleLanguage.ContextReference;
2020
import com.oracle.truffle.api.TruffleLanguage.ParsingRequest;
21+
import com.oracle.truffle.api.dsl.Bind;
2122
import com.oracle.truffle.api.frame.MaterializedFrame;
2223
import com.oracle.truffle.api.frame.VirtualFrame;
2324
import com.oracle.truffle.api.instrumentation.AllocationReporter;
@@ -77,6 +78,7 @@
7778
import de.hpi.swa.trufflesqueak.util.MethodCacheEntry;
7879
import de.hpi.swa.trufflesqueak.util.MiscUtils;
7980

81+
@Bind.DefaultExpression("get($node)")
8082
public final class SqueakImageContext {
8183
private static final ContextReference<SqueakImageContext> REFERENCE = ContextReference.create(SqueakLanguage.class);
8284

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/interop/ConvertToSqueakNode.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
package de.hpi.swa.trufflesqueak.interop;
88

99
import com.oracle.truffle.api.CompilerDirectives;
10+
import com.oracle.truffle.api.dsl.Bind;
1011
import com.oracle.truffle.api.dsl.Fallback;
1112
import com.oracle.truffle.api.dsl.GenerateCached;
1213
import com.oracle.truffle.api.dsl.GenerateInline;
@@ -43,9 +44,9 @@ protected static final boolean doBoolean(final Object value,
4344
}
4445

4546
@Specialization(guards = "lib.isString(value)", limit = "1")
46-
protected final NativeObject doString(final Object value,
47+
protected static final NativeObject doString(final Object value,
48+
@Bind final SqueakImageContext image,
4749
@CachedLibrary("value") final InteropLibrary lib) {
48-
final SqueakImageContext image = getContext();
4950
try {
5051
return image.asByteString(lib.asString(value));
5152
} catch (final UnsupportedMessageException e) {

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/LookupMethodNode.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package de.hpi.swa.trufflesqueak.nodes;
88

9+
import com.oracle.truffle.api.dsl.Bind;
910
import com.oracle.truffle.api.dsl.Cached;
1011
import com.oracle.truffle.api.dsl.GenerateCached;
1112
import com.oracle.truffle.api.dsl.GenerateInline;
@@ -14,6 +15,7 @@
1415
import com.oracle.truffle.api.dsl.Specialization;
1516
import com.oracle.truffle.api.nodes.Node;
1617

18+
import de.hpi.swa.trufflesqueak.image.SqueakImageContext;
1719
import de.hpi.swa.trufflesqueak.model.ClassObject;
1820
import de.hpi.swa.trufflesqueak.model.NativeObject;
1921
import de.hpi.swa.trufflesqueak.util.MethodCacheEntry;
@@ -42,8 +44,9 @@ protected static final Object doCached(final ClassObject classObject, final Nati
4244

4345
@ReportPolymorphism.Megamorphic
4446
@Specialization(replaces = "doCached")
45-
protected final Object doUncached(final ClassObject classObject, final NativeObject selector) {
46-
final MethodCacheEntry cachedEntry = getContext().findMethodCacheEntry(classObject, selector);
47+
protected static final Object doUncached(final ClassObject classObject, final NativeObject selector,
48+
@Bind final SqueakImageContext image) {
49+
final MethodCacheEntry cachedEntry = image.findMethodCacheEntry(classObject, selector);
4750
if (cachedEntry.getResult() == null) {
4851
cachedEntry.setResult(classObject.lookupInMethodDictSlow(selector));
4952
}

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/MaterializeContextOnMethodExitNode.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,19 @@ public static MaterializeContextOnMethodExitNode create() {
2626

2727
public abstract void execute(VirtualFrame frame);
2828

29-
@Specialization(guards = {"getSqueakImageContext(frame).lastSeenContext == null", "hasEscapedContext(frame)"})
30-
protected final void doStartMaterialization(final VirtualFrame frame) {
31-
getContext().lastSeenContext = FrameAccess.getContext(frame);
29+
@Specialization(guards = {"image.lastSeenContext == null", "hasEscapedContext(frame)"})
30+
protected static final void doStartMaterialization(final VirtualFrame frame,
31+
@Bind final SqueakImageContext image) {
32+
image.lastSeenContext = FrameAccess.getContext(frame);
3233
}
3334

34-
@Specialization(guards = {"getSqueakImageContext(frame).lastSeenContext != null"})
35-
protected final void doMaterialize(final VirtualFrame frame,
35+
@Specialization(guards = {"image.lastSeenContext != null"})
36+
protected static final void doMaterialize(final VirtualFrame frame,
3637
@Bind final Node node,
38+
@Bind final SqueakImageContext image,
3739
@Cached final InlinedConditionProfile isNotLastSeenContextProfile,
3840
@Cached final InlinedConditionProfile continueProfile,
3941
@Cached(inline = true) final GetOrCreateContextNode getOrCreateContextNode) {
40-
final SqueakImageContext image = getContext();
4142
final ContextObject lastSeenContext = image.lastSeenContext;
4243
final ContextObject context = getOrCreateContextNode.executeGet(frame, node);
4344
if (isNotLastSeenContextProfile.profile(node, context != lastSeenContext)) {
@@ -56,15 +57,10 @@ protected final void doMaterialize(final VirtualFrame frame,
5657
}
5758

5859
@Specialization(guards = {"!hasEscapedContext(frame)"})
59-
protected final void doNothing(@SuppressWarnings("unused") final VirtualFrame frame) {
60+
protected static final void doNothing(@SuppressWarnings("unused") final VirtualFrame frame) {
6061
/*
6162
* Nothing to do because neither was a child context materialized nor has this context been
6263
* requested and allocated.
6364
*/
6465
}
65-
66-
/* Avoid that the DSL generates an assertion for this. */
67-
protected final SqueakImageContext getSqueakImageContext(@SuppressWarnings("unused") final VirtualFrame frame) {
68-
return getContext();
69-
}
7066
}

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/FloatObjectNodes.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
*/
77
package de.hpi.swa.trufflesqueak.nodes.accessing;
88

9+
import com.oracle.truffle.api.dsl.Bind;
910
import com.oracle.truffle.api.dsl.GenerateCached;
1011
import com.oracle.truffle.api.dsl.GenerateInline;
1112
import com.oracle.truffle.api.dsl.GenerateUncached;
1213
import com.oracle.truffle.api.dsl.ImportStatic;
1314
import com.oracle.truffle.api.dsl.Specialization;
1415
import com.oracle.truffle.api.nodes.Node;
1516

17+
import de.hpi.swa.trufflesqueak.image.SqueakImageContext;
1618
import de.hpi.swa.trufflesqueak.model.FloatObject;
1719
import de.hpi.swa.trufflesqueak.nodes.AbstractNode;
1820
import de.hpi.swa.trufflesqueak.nodes.accessing.FloatObjectNodesFactory.AsFloatObjectIfNessaryNodeGen;
@@ -37,8 +39,8 @@ protected static final double doFinite(final double value) {
3739
}
3840

3941
@Specialization(guards = "!isFinite(value)")
40-
protected final FloatObject doNaNOrInfinite(final double value) {
41-
return new FloatObject(getContext(), value);
42+
protected static final FloatObject doNaNOrInfinite(final double value, @Bind final SqueakImageContext image) {
43+
return new FloatObject(image, value);
4244
}
4345
}
4446
}

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/SqueakObjectAtPut0Node.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package de.hpi.swa.trufflesqueak.nodes.accessing;
88

9+
import com.oracle.truffle.api.dsl.Bind;
910
import com.oracle.truffle.api.dsl.Cached;
1011
import com.oracle.truffle.api.dsl.GenerateCached;
1112
import com.oracle.truffle.api.dsl.GenerateInline;
@@ -14,6 +15,7 @@
1415
import com.oracle.truffle.api.nodes.Node;
1516
import com.oracle.truffle.api.profiles.InlinedBranchProfile;
1617

18+
import de.hpi.swa.trufflesqueak.image.SqueakImageContext;
1719
import de.hpi.swa.trufflesqueak.model.ArrayObject;
1820
import de.hpi.swa.trufflesqueak.model.BlockClosureObject;
1921
import de.hpi.swa.trufflesqueak.model.ClassObject;
@@ -67,8 +69,9 @@ protected static final void doVariablePointers(final Node node, final VariablePo
6769
}
6870

6971
@Specialization
70-
protected final void doLargeInteger(final LargeIntegerObject receiver, final long index, final long value) {
71-
receiver.setNativeAt0(getContext(), index, value);
72+
protected static final void doLargeInteger(final LargeIntegerObject receiver, final long index, final long value,
73+
@Bind final SqueakImageContext image) {
74+
receiver.setNativeAt0(image, index, value);
7275
}
7376

7477
@Specialization

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/accessing/SqueakObjectClassNode.java

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
*/
77
package de.hpi.swa.trufflesqueak.nodes.accessing;
88

9+
import com.oracle.truffle.api.dsl.Bind;
910
import com.oracle.truffle.api.dsl.GenerateCached;
1011
import com.oracle.truffle.api.dsl.GenerateInline;
1112
import com.oracle.truffle.api.dsl.GenerateUncached;
1213
import com.oracle.truffle.api.dsl.Specialization;
1314
import com.oracle.truffle.api.nodes.Node;
1415

16+
import de.hpi.swa.trufflesqueak.image.SqueakImageContext;
1517
import de.hpi.swa.trufflesqueak.model.AbstractSqueakObject;
1618
import de.hpi.swa.trufflesqueak.model.AbstractSqueakObjectWithClassAndHash;
1719
import de.hpi.swa.trufflesqueak.model.CharacterObject;
@@ -39,48 +41,48 @@ public static final ClassObject executeUncached(final Object receiver) {
3941
}
4042

4143
@Specialization
42-
protected final ClassObject doNil(@SuppressWarnings("unused") final NilObject value) {
43-
return getContext().nilClass;
44+
protected static final ClassObject doNil(@SuppressWarnings("unused") final NilObject value, @Bind final SqueakImageContext image) {
45+
return image.nilClass;
4446
}
4547

4648
@Specialization(guards = "value == TRUE")
47-
protected final ClassObject doTrue(@SuppressWarnings("unused") final boolean value) {
48-
return getContext().trueClass;
49+
protected static final ClassObject doTrue(@SuppressWarnings("unused") final boolean value, @Bind final SqueakImageContext image) {
50+
return image.trueClass;
4951
}
5052

5153
@Specialization(guards = "value != TRUE")
52-
protected final ClassObject doFalse(@SuppressWarnings("unused") final boolean value) {
53-
return getContext().falseClass;
54+
protected static final ClassObject doFalse(@SuppressWarnings("unused") final boolean value, @Bind final SqueakImageContext image) {
55+
return image.falseClass;
5456
}
5557

5658
@Specialization
57-
protected final ClassObject doSmallInteger(@SuppressWarnings("unused") final long value) {
58-
return getContext().smallIntegerClass;
59+
protected static final ClassObject doSmallInteger(@SuppressWarnings("unused") final long value, @Bind final SqueakImageContext image) {
60+
return image.smallIntegerClass;
5961
}
6062

6163
@Specialization
62-
protected final ClassObject doChar(@SuppressWarnings("unused") final char value) {
63-
return getContext().characterClass;
64+
protected static final ClassObject doChar(@SuppressWarnings("unused") final char value, @Bind final SqueakImageContext image) {
65+
return image.characterClass;
6466
}
6567

6668
@Specialization
67-
protected final ClassObject doDouble(@SuppressWarnings("unused") final double value) {
68-
return getContext().smallFloatClass;
69+
protected static final ClassObject doDouble(@SuppressWarnings("unused") final double value, @Bind final SqueakImageContext image) {
70+
return image.smallFloatClass;
6971
}
7072

7173
@Specialization
72-
protected final ClassObject doCharacter(@SuppressWarnings("unused") final CharacterObject value) {
73-
return getContext().characterClass;
74+
protected static final ClassObject doCharacter(@SuppressWarnings("unused") final CharacterObject value, @Bind final SqueakImageContext image) {
75+
return image.characterClass;
7476
}
7577

7678
@Specialization
77-
protected final ClassObject doContext(@SuppressWarnings("unused") final ContextObject value) {
78-
return getContext().methodContextClass;
79+
protected static final ClassObject doContext(@SuppressWarnings("unused") final ContextObject value, @Bind final SqueakImageContext image) {
80+
return image.methodContextClass;
7981
}
8082

8183
@Specialization
82-
protected final ClassObject doFloat(@SuppressWarnings("unused") final FloatObject value) {
83-
return getContext().floatClass;
84+
protected static final ClassObject doFloat(@SuppressWarnings("unused") final FloatObject value, @Bind final SqueakImageContext image) {
85+
return image.floatClass;
8486
}
8587

8688
@Specialization
@@ -89,7 +91,7 @@ protected static final ClassObject doAbstractSqueakObjectWithClassAndHash(final
8991
}
9092

9193
@Specialization(guards = {"!isAbstractSqueakObject(value)", "!isUsedJavaPrimitive(value)"})
92-
protected final ClassObject doForeignObject(@SuppressWarnings("unused") final Object value) {
93-
return getContext().getForeignObjectClass();
94+
protected static final ClassObject doForeignObject(@SuppressWarnings("unused") final Object value, @Bind final SqueakImageContext image) {
95+
return image.getForeignObjectClass();
9496
}
9597
}

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/bytecodes/SendBytecodes.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -405,8 +405,8 @@ protected static final long doLong(final long lhs, final long rhs) {
405405
}
406406

407407
@Specialization(replaces = "doLong")
408-
protected final Object doLongWithOverflow(final long lhs, final long rhs) {
409-
return LargeIntegerObject.add(getContext(), lhs, rhs);
408+
protected static final Object doLongWithOverflow(final long lhs, final long rhs, @Bind final SqueakImageContext image) {
409+
return LargeIntegerObject.add(image, lhs, rhs);
410410
}
411411

412412
@Specialization
@@ -428,8 +428,8 @@ protected static final long doLong(final long lhs, final long rhs) {
428428
}
429429

430430
@Specialization(replaces = "doLong")
431-
protected final Object doLongWithOverflow(final long lhs, final long rhs) {
432-
return LargeIntegerObject.subtract(getContext(), lhs, rhs);
431+
protected static final Object doLongWithOverflow(final long lhs, final long rhs, @Bind final SqueakImageContext image) {
432+
return LargeIntegerObject.subtract(image, lhs, rhs);
433433
}
434434

435435
@Specialization
@@ -559,8 +559,8 @@ protected static final long doLong(final long lhs, final long rhs) {
559559
}
560560

561561
@Specialization(replaces = "doLong")
562-
protected final Object doLongWithOverflow(final long lhs, final long rhs) {
563-
return LargeIntegerObject.multiply(getContext(), lhs, rhs);
562+
protected static final Object doLongWithOverflow(final long lhs, final long rhs, @Bind final SqueakImageContext image) {
563+
return LargeIntegerObject.multiply(image, lhs, rhs);
564564
}
565565

566566
@Specialization(rewriteOn = RespecializeException.class)

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/CreateDoesNotUnderstandMessageNode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.oracle.truffle.api.dsl.Specialization;
1313
import com.oracle.truffle.api.nodes.Node;
1414

15+
import de.hpi.swa.trufflesqueak.image.SqueakImageContext;
1516
import de.hpi.swa.trufflesqueak.model.ClassObject;
1617
import de.hpi.swa.trufflesqueak.model.NativeObject;
1718
import de.hpi.swa.trufflesqueak.model.PointersObject;
@@ -26,9 +27,10 @@ abstract class CreateDoesNotUnderstandMessageNode extends AbstractNode {
2627
@Specialization
2728
protected static final PointersObject doCreate(final NativeObject selector, final Object receiver, final Object[] arguments,
2829
@Bind final Node node,
30+
@Bind final SqueakImageContext image,
2931
@Cached final AbstractPointersObjectWriteNode writeNode,
3032
@Cached final SqueakObjectClassNode classNode) {
3133
final ClassObject receiverClass = classNode.executeLookup(node, receiver);
32-
return getContext(node).newMessage(writeNode, node, selector, receiverClass, arguments);
34+
return image.newMessage(writeNode, node, selector, receiverClass, arguments);
3335
}
3436
}

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector0Node.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,14 +339,15 @@ public abstract static class DispatchIndirect0Node extends AbstractNode {
339339
@Specialization
340340
protected static final Object doIndirect(final VirtualFrame frame, final NativeObject selector, final Object receiver,
341341
@Bind final Node node,
342+
@Bind final SqueakImageContext image,
342343
@Cached final SqueakObjectClassNode classNode,
343344
@Cached final ResolveMethodNode methodNode,
344345
@Cached final TryPrimitive0Node tryPrimitiveNode,
345346
@Cached final CreateFrameArgumentsForIndirectCall0Node argumentsNode,
346347
@Cached final IndirectCallNode callNode) {
347348
final ClassObject receiverClass = classNode.executeLookup(node, receiver);
348-
final Object lookupResult = getContext(node).lookup(receiverClass, selector);
349-
final CompiledCodeObject method = methodNode.execute(node, getContext(node), receiverClass, lookupResult);
349+
final Object lookupResult = image.lookup(receiverClass, selector);
350+
final CompiledCodeObject method = methodNode.execute(node, image, receiverClass, lookupResult);
350351
final Object result = tryPrimitiveNode.execute(frame, method, receiver);
351352
if (result != null) {
352353
return result;

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector1Node.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,14 +339,15 @@ public abstract static class DispatchIndirect1Node extends AbstractNode {
339339
@Specialization
340340
protected static final Object doIndirect(final VirtualFrame frame, final NativeObject selector, final Object receiver, final Object arg1,
341341
@Bind final Node node,
342+
@Bind final SqueakImageContext image,
342343
@Cached final SqueakObjectClassNode classNode,
343344
@Cached final ResolveMethodNode methodNode,
344345
@Cached final TryPrimitive1Node tryPrimitiveNode,
345346
@Cached final CreateFrameArgumentsForIndirectCall1Node argumentsNode,
346347
@Cached final IndirectCallNode callNode) {
347348
final ClassObject receiverClass = classNode.executeLookup(node, receiver);
348-
final Object lookupResult = getContext(node).lookup(receiverClass, selector);
349-
final CompiledCodeObject method = methodNode.execute(node, getContext(node), receiverClass, lookupResult);
349+
final Object lookupResult = image.lookup(receiverClass, selector);
350+
final CompiledCodeObject method = methodNode.execute(node, image, receiverClass, lookupResult);
350351
final Object result = tryPrimitiveNode.execute(frame, method, receiver, arg1);
351352
if (result != null) {
352353
return result;

src/de.hpi.swa.trufflesqueak/src/de/hpi/swa/trufflesqueak/nodes/dispatch/DispatchSelector2Node.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,14 +341,15 @@ public abstract static class DispatchIndirect2Node extends AbstractNode {
341341
@Specialization
342342
protected static final Object doIndirect(final VirtualFrame frame, final NativeObject selector, final Object receiver, final Object arg1, final Object arg2,
343343
@Bind final Node node,
344+
@Bind final SqueakImageContext image,
344345
@Cached final SqueakObjectClassNode classNode,
345346
@Cached final ResolveMethodNode methodNode,
346347
@Cached final TryPrimitive2Node tryPrimitiveNode,
347348
@Cached final CreateFrameArgumentsForIndirectCall2Node argumentsNode,
348349
@Cached final IndirectCallNode callNode) {
349350
final ClassObject receiverClass = classNode.executeLookup(node, receiver);
350-
final Object lookupResult = getContext(node).lookup(receiverClass, selector);
351-
final CompiledCodeObject method = methodNode.execute(node, getContext(node), receiverClass, lookupResult);
351+
final Object lookupResult = image.lookup(receiverClass, selector);
352+
final CompiledCodeObject method = methodNode.execute(node, image, receiverClass, lookupResult);
352353
final Object result = tryPrimitiveNode.execute(frame, method, receiver, arg1, arg2);
353354
if (result != null) {
354355
return result;

0 commit comments

Comments
 (0)