Skip to content

Commit

Permalink
Showing 4 changed files with 24 additions and 22 deletions.
5 changes: 5 additions & 0 deletions truffle/src/main/java/org/jruby/truffle/nodes/RubyGuards.java
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@
package org.jruby.truffle.nodes;

import com.oracle.truffle.api.interop.TruffleObject;
import org.jruby.truffle.nodes.core.BigDecimalNodes;
import org.jruby.truffle.runtime.UndefinedPlaceholder;
import org.jruby.truffle.runtime.core.*;

@@ -115,4 +116,8 @@ public static boolean isInfinity(double value) {
return Double.isInfinite(value);
}

public static boolean isRubyBigDecimal(RubyBasicObject value) {
return value.getDynamicObject().getShape().getObjectType() == BigDecimalNodes.BIG_DECIMAL_TYPE;
}

}
Original file line number Diff line number Diff line change
@@ -19,6 +19,7 @@
import org.jruby.truffle.nodes.objects.Allocator;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.core.*;
import org.jruby.truffle.runtime.object.BasicObjectType;

import java.math.BigDecimal;
import java.math.MathContext;
@@ -27,7 +28,14 @@
@CoreClass(name = "Truffle::BigDecimal")
public abstract class BigDecimalNodes {

public static class BigDecimalType extends BasicObjectType {

}

public static final BigDecimalType BIG_DECIMAL_TYPE = new BigDecimalType();

private static final HiddenKey VALUE_IDENTIFIER = new HiddenKey("value");
public static final Shape BIG_DECIMAL_SHAPE;
private static final DynamicObjectFactory BIG_DECIMAL_FACTORY;
public static final Property VALUE_PROPERTY;

@@ -37,15 +45,8 @@ public abstract class BigDecimalNodes {
VALUE_IDENTIFIER,
allocator.locationForType(BigDecimal.class, EnumSet.of(LocationModifier.NonNull)),
0);
final Shape shape = RubyBasicObject.EMPTY_SHAPE.addProperty(VALUE_PROPERTY);
BIG_DECIMAL_FACTORY = shape.createFactory();
}

// TODO (pitr 15-May-2015) figure out where to put RubyBigDecimal, or remove completely
public static class RubyBigDecimal extends RubyBasicObject {
public RubyBigDecimal(RubyClass rubyClass, DynamicObject dynamicObject) {
super(rubyClass, dynamicObject);
}
BIG_DECIMAL_SHAPE = RubyBasicObject.LAYOUT.createShape(BIG_DECIMAL_TYPE).addProperty(VALUE_PROPERTY);
BIG_DECIMAL_FACTORY = BIG_DECIMAL_SHAPE.createFactory();
}

public static class RubyBigDecimalAllocator implements Allocator {
@@ -84,19 +85,15 @@ public static void setBigDecimalValue(RubyBasicObject bignum, BigDecimal value)
VALUE_PROPERTY.setSafe(bignum.getDynamicObject(), value, null);
}

public static RubyBigDecimal createRubyBigDecimal(RubyClass rubyClass, BigDecimal value) {
return new RubyBigDecimal(rubyClass, BIG_DECIMAL_FACTORY.newInstance(value));
public static RubyBasicObject createRubyBigDecimal(RubyClass rubyClass, BigDecimal value) {
return new RubyBasicObject(rubyClass, BIG_DECIMAL_FACTORY.newInstance(value));
}

public abstract static class BigDecimalCoreMethodNode extends CoreMethodArrayArgumentsNode {

public BigDecimalCoreMethodNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

public static boolean isRubyBigDecimal(Object value) {
return value instanceof RubyBigDecimal;
}
}

@CoreMethod(names = "initialize", required = 1)
@@ -107,12 +104,12 @@ public InitializeNode(RubyContext context, SourceSection sourceSection) {
}

@Specialization(guards = "isRubyBigDecimal(v)")
public RubyBasicObject initialize(RubyBigDecimal self, RubyBasicObject v) {
public RubyBasicObject initialize(RubyBasicObject self, RubyBasicObject v) {
return v;
}

@Specialization(guards = "isRubyString(v)")
public RubyBasicObject initializeFromString(RubyBigDecimal self, RubyBasicObject v) {
public RubyBasicObject initializeFromString(RubyBasicObject self, RubyBasicObject v) {
// TODO (pitr 20-May-2015): add NaN, Infinity handling
switch (v.toString()) {
case "NaN":
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@
import org.jruby.truffle.nodes.objects.Allocator;
import org.jruby.truffle.runtime.ModuleOperations;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.object.RubyObjectType;
import org.jruby.truffle.runtime.object.BasicObjectType;
import org.jruby.truffle.runtime.subsystems.ObjectSpaceManager;

import java.util.LinkedHashMap;
@@ -37,7 +37,7 @@ public class RubyBasicObject implements TruffleObject {
public static final HiddenKey FROZEN_IDENTIFIER = new HiddenKey("frozen?");

public static final Layout LAYOUT = Layout.createLayout(Layout.INT_TO_LONG);
public static final Shape EMPTY_SHAPE = LAYOUT.createShape(new RubyObjectType());
public static final Shape EMPTY_SHAPE = LAYOUT.createShape(new BasicObjectType());

private final DynamicObject dynamicObject;

@@ -147,8 +147,8 @@ public Shape getObjectLayout() {
return dynamicObject.getShape();
}

public RubyObjectType getObjectType() {
return (RubyObjectType) dynamicObject.getShape().getObjectType();
public BasicObjectType getObjectType() {
return (BasicObjectType) dynamicObject.getShape().getObjectType();
}

public RubyClass getLogicalClass() {
Original file line number Diff line number Diff line change
@@ -11,6 +11,6 @@

import com.oracle.truffle.api.object.ObjectType;

public class RubyObjectType extends ObjectType {
public class BasicObjectType extends ObjectType {

}

1 comment on commit 039ee10

@chrisseaton
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pitr-ch this removes RubyBigDecimal (I got the commit message wrong).

Please sign in to comment.