Skip to content

Commit

Permalink
Showing 14 changed files with 77 additions and 0 deletions.
1 change: 1 addition & 0 deletions truffle/src/main/java/org/jruby/truffle/RubyContext.java
Original file line number Diff line number Diff line change
@@ -287,6 +287,7 @@ public LexicalScope getRootLexicalScope() {
return rootLexicalScope;
}

@Override
public CompilerOptions getCompilerOptions() {
return compilerOptions;
}
Original file line number Diff line number Diff line change
@@ -237,6 +237,7 @@ public Object appendValue(Object store, int index, Object value) {
}
}

@Override
public Object finish(Object store, int length) {
return store;
}
@@ -309,6 +310,7 @@ public Object appendValue(Object store, int index, Object value) {
return appendValueFallback(store, index, value, expectedLength);
}

@Override
public Object finish(Object store, int length) {
return store;
}
@@ -384,6 +386,7 @@ public Object appendValue(Object store, int index, Object value) {
}
}

@Override
public Object finish(Object store, int length) {
return store;
}
@@ -497,6 +500,7 @@ public Object appendValue(Object store, int index, Object value) {
return store;
}

@Override
public Object finish(Object store, int length) {
return store;
}
Original file line number Diff line number Diff line change
@@ -33,6 +33,7 @@ public boolean isDefaultValue(Object value) {

public abstract ArrayMirror newMirror(DynamicObject array);

@Override
public abstract String toString();

public ArrayStrategy generalize(ArrayStrategy other) {
@@ -114,26 +115,32 @@ private static class IntArrayStrategy extends ArrayStrategy {

static final ArrayStrategy INSTANCE = new IntArrayStrategy();

@Override
public Class<?> type() {
return Integer.class;
}

@Override
public boolean canStore(Class<?> type) {
return type == Integer.class;
}

@Override
public boolean accepts(Object value) {
return value instanceof Integer;
}

@Override
public boolean specializesFor(Object value) {
return value instanceof Integer;
}

@Override
public boolean isDefaultValue(Object value) {
return (int) value == 0;
}

@Override
public boolean matches(DynamicObject array) {
return ArrayGuards.isIntArray(array);
}
@@ -150,14 +157,17 @@ public ArrayStrategy generalize(ArrayStrategy other) {
}
}

@Override
public ArrayMirror newArray(int size) {
return new IntegerArrayMirror(new int[size]);
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
return new IntegerArrayMirror((int[]) Layouts.ARRAY.getStore(array));
}

@Override
public String toString() {
return "int[]";
}
@@ -168,38 +178,47 @@ private static class LongArrayStrategy extends ArrayStrategy {

static final ArrayStrategy INSTANCE = new LongArrayStrategy();

@Override
public Class<?> type() {
return Long.class;
}

@Override
public boolean canStore(Class<?> type) {
return type == Long.class || type == Integer.class;
}

@Override
public boolean accepts(Object value) {
return value instanceof Long;
}

@Override
public boolean specializesFor(Object value) {
return value instanceof Long;
}

@Override
public boolean isDefaultValue(Object value) {
return (long) value == 0L;
}

@Override
public boolean matches(DynamicObject array) {
return ArrayGuards.isLongArray(array);
}

@Override
public ArrayMirror newArray(int size) {
return new LongArrayMirror(new long[size]);
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
return new LongArrayMirror((long[]) Layouts.ARRAY.getStore(array));
}

@Override
public String toString() {
return "long[]";
}
@@ -210,38 +229,47 @@ private static class DoubleArrayStrategy extends ArrayStrategy {

static final ArrayStrategy INSTANCE = new DoubleArrayStrategy();

@Override
public Class<?> type() {
return Double.class;
}

@Override
public boolean canStore(Class<?> type) {
return type == Double.class;
}

@Override
public boolean accepts(Object value) {
return value instanceof Double;
}

@Override
public boolean specializesFor(Object value) {
return value instanceof Double;
}

@Override
public boolean isDefaultValue(Object value) {
return (double) value == 0.0;
}

@Override
public boolean matches(DynamicObject array) {
return ArrayGuards.isDoubleArray(array);
}

@Override
public ArrayMirror newArray(int size) {
return new DoubleArrayMirror(new double[size]);
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
return new DoubleArrayMirror((double[]) Layouts.ARRAY.getStore(array));
}

@Override
public String toString() {
return "double[]";
}
@@ -252,38 +280,47 @@ private static class ObjectArrayStrategy extends ArrayStrategy {

static final ArrayStrategy INSTANCE = new ObjectArrayStrategy();

@Override
public Class<?> type() {
return Object.class;
}

@Override
public boolean canStore(Class<?> type) {
return true;
}

@Override
public boolean accepts(Object value) {
return true;
}

@Override
public boolean specializesFor(Object value) {
return !(value instanceof Integer) && !(value instanceof Long) && !(value instanceof Double);
}

@Override
public boolean isDefaultValue(Object value) {
return value == null;
}

@Override
public boolean matches(DynamicObject array) {
return ArrayGuards.isObjectArray(array);
}

@Override
public ArrayMirror newArray(int size) {
return new ObjectArrayMirror(new Object[size]);
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
return new ObjectArrayMirror((Object[]) Layouts.ARRAY.getStore(array));
}

@Override
public String toString() {
return "Object[]";
}
@@ -297,18 +334,22 @@ private static class LongIntArrayStrategy extends LongArrayStrategy {

static final ArrayStrategy INSTANCE = new LongIntArrayStrategy();

@Override
public boolean accepts(Object value) {
return value instanceof Integer;
}

@Override
public boolean matches(DynamicObject array) {
return ArrayGuards.isLongArray(array);
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
return new LongIntArrayMirror((long[]) Layouts.ARRAY.getStore(array));
}

@Override
public String toString() {
return "(long[], int)";
}
@@ -320,22 +361,27 @@ private static class IntToObjectGeneralizationArrayStrategy extends ArrayStrateg

static final ArrayStrategy INSTANCE = new IntToObjectGeneralizationArrayStrategy();

@Override
public boolean accepts(Object value) {
return !(value instanceof Long);
}

@Override
public boolean matches(DynamicObject array) {
return ArrayGuards.isObjectArray(array);
}

@Override
public ArrayMirror newArray(int size) {
return new ObjectArrayMirror(new Object[size]);
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
return new ObjectArrayMirror((Object[]) Layouts.ARRAY.getStore(array));
}

@Override
public String toString() {
return "Object[] (not accepting long)";
}
@@ -348,10 +394,12 @@ private static class FallbackArrayStrategy extends ArrayStrategy {

static final ArrayStrategy INSTANCE = new FallbackArrayStrategy();

@Override
public boolean accepts(Object value) {
return false;
}

@Override
public boolean matches(DynamicObject array) {
return false;
}
@@ -361,14 +409,17 @@ public ArrayStrategy generalize(ArrayStrategy other) {
return other;
}

@Override
public ArrayMirror newArray(int size) {
throw unsupported();
}

@Override
public ArrayMirror newMirror(DynamicObject array) {
throw unsupported();
}

@Override
public String toString() {
return "null";
}
Original file line number Diff line number Diff line change
@@ -623,6 +623,7 @@ private StringSubstringPrimitiveNode getSubstringNode() {
return substringNode;
}

@Override
protected boolean isRubiniusUndefined(Object object) {
return object == coreLibrary().getRubiniusUndefined();
}
Original file line number Diff line number Diff line change
@@ -96,6 +96,7 @@ protected DispatchHeadNode getHeadNode() {
return NodeUtil.findParent(this, DispatchHeadNode.class);
}

@Override
public final Object execute(VirtualFrame frame) {
throw new IllegalStateException("do not call execute on dispatch nodes");
}
Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ public RespondToNode(RubyContext context, SourceSection sourceSection, RubyNode
this.dispatch = new DoesRespondDispatchHeadNode(context, true);
}

@Override
public boolean executeBoolean(VirtualFrame frame) {
// TODO(cseaton): check this is actually a static "find if there is such method" and not a dynamic call to respond_to?
return dispatch.doesRespondTo(frame, methodName, child.execute(frame));
Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ public CheckMatchVariableTypeNode(RubyContext context, SourceSection sourceSecti
this.child = child;
}

@Override
public Object execute(VirtualFrame frame) {
final Object childValue = child.execute(frame);

Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ public CheckOutputSeparatorVariableTypeNode(RubyContext context, SourceSection s
this.child = child;
}

@Override
public Object execute(VirtualFrame frame) {
final Object childValue = child.execute(frame);

Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ public CheckProgramNameVariableTypeNode(RubyContext context, SourceSection sourc
this.child = child;
}

@Override
public Object execute(VirtualFrame frame) {
final Object childValue = child.execute(frame);

Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ public CheckRecordSeparatorVariableTypeNode(RubyContext context, SourceSection s
this.child = child;
}

@Override
public Object execute(VirtualFrame frame) {
final Object childValue = child.execute(frame);

Original file line number Diff line number Diff line change
@@ -31,6 +31,7 @@ public CheckStdoutVariableTypeNode(RubyContext context, SourceSection sourceSect
this.child = child;
}

@Override
public Object execute(VirtualFrame frame) {
final Object childValue = child.execute(frame);

Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@ public UpdateVerbosityNode(RubyContext context, SourceSection sourceSection, Rub
this.child = child;
}

@Override
public Object execute(VirtualFrame frame) {
final Object childValue = child.execute(frame);
setVerbose(childValue);
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@ public ThreadLocalObjectNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

@Override
public abstract DynamicObject executeDynamicObject(VirtualFrame frame);

@Specialization(
Original file line number Diff line number Diff line change
@@ -88,6 +88,7 @@ public Object addSpecial(VirtualFrame frame, DynamicObject a, DynamicObject b) {
@NodeChild(value = "precision", type = RubyNode.class)
public abstract static class AddNode extends AbstractAddNode {

@Override
@Specialization(guards = {
"isNormal(a)",
"isNormalRubyBigDecimal(b)"
@@ -96,6 +97,7 @@ protected Object add(VirtualFrame frame, DynamicObject a, DynamicObject b, int p
return super.add(frame, a, b, precision);
}

@Override
@Specialization(guards = {
"isRubyBigDecimal(b)",
"!isNormal(a) || !isNormal(b)"
@@ -129,6 +131,7 @@ public Object subSpecial(VirtualFrame frame, DynamicObject a, DynamicObject b) {
@NodeChild(value = "precision", type = RubyNode.class)
public abstract static class SubNode extends AbstractSubNode {

@Override
@Specialization(guards = {
"isNormal(a)",
"isNormalRubyBigDecimal(b)"
@@ -137,6 +140,7 @@ public Object subNormal(VirtualFrame frame, DynamicObject a, DynamicObject b, in
return super.subNormal(frame, a, b, precision);
}

@Override
@Specialization(guards = {
"isRubyBigDecimal(b)",
"!isNormal(a) || !isNormal(b)"
@@ -235,6 +239,7 @@ public Object multSpecial(VirtualFrame frame, DynamicObject a, DynamicObject b)
@NodeChild(value = "precision", type = RubyNode.class)
public abstract static class MultNode extends AbstractMultNode {

@Override
@Specialization(guards = {
"isNormal(a)",
"isNormalRubyBigDecimal(b)"
@@ -243,6 +248,7 @@ public Object mult(VirtualFrame frame, DynamicObject a, DynamicObject b, int pre
return super.mult(frame, a, b, precision);
}

@Override
@Specialization(guards = {
"isNormal(a)",
"isSpecialRubyBigDecimal(b)"
@@ -251,6 +257,7 @@ public Object multNormalSpecial(VirtualFrame frame, DynamicObject a, DynamicObje
return super.multNormalSpecial(frame, a, b, precision);
}

@Override
@Specialization(guards = {
"!isNormal(a)",
"isNormalRubyBigDecimal(b)"
@@ -259,6 +266,7 @@ public Object multSpecialNormal(VirtualFrame frame, DynamicObject a, DynamicObje
return super.multSpecialNormal(frame, a, b, precision);
}

@Override
@Specialization(guards = {
"!isNormal(a)",
"isSpecialRubyBigDecimal(b)"
@@ -369,6 +377,7 @@ public Object divNormalSpecial(
}
}

@Override
@Specialization(guards = {
"isNormal(a)",
"isSpecialRubyBigDecimal(b)"
@@ -402,6 +411,7 @@ public Object divSpecialNormal(
}
}

@Override
@Specialization(guards = {
"!isNormal(a)",
"isNormalRubyBigDecimal(b)"
@@ -432,6 +442,7 @@ public Object divSpecialSpecial(
}
}

@Override
@Specialization(guards = {
"!isNormal(a)",
"isSpecialRubyBigDecimal(b)"

0 comments on commit 2391b8d

Please sign in to comment.