1919import org .jruby .truffle .nodes .objects .Allocator ;
2020import org .jruby .truffle .runtime .RubyContext ;
2121import org .jruby .truffle .runtime .core .*;
22+ import org .jruby .truffle .runtime .object .BasicObjectType ;
2223
2324import java .math .BigDecimal ;
2425import java .math .MathContext ;
2728@ CoreClass (name = "Truffle::BigDecimal" )
2829public abstract class BigDecimalNodes {
2930
31+ public static class BigDecimalType extends BasicObjectType {
32+
33+ }
34+
35+ public static final BigDecimalType BIG_DECIMAL_TYPE = new BigDecimalType ();
36+
3037 private static final HiddenKey VALUE_IDENTIFIER = new HiddenKey ("value" );
38+ public static final Shape BIG_DECIMAL_SHAPE ;
3139 private static final DynamicObjectFactory BIG_DECIMAL_FACTORY ;
3240 public static final Property VALUE_PROPERTY ;
3341
@@ -37,15 +45,8 @@ public abstract class BigDecimalNodes {
3745 VALUE_IDENTIFIER ,
3846 allocator .locationForType (BigDecimal .class , EnumSet .of (LocationModifier .NonNull )),
3947 0 );
40- final Shape shape = RubyBasicObject .EMPTY_SHAPE .addProperty (VALUE_PROPERTY );
41- BIG_DECIMAL_FACTORY = shape .createFactory ();
42- }
43-
44- // TODO (pitr 15-May-2015) figure out where to put RubyBigDecimal, or remove completely
45- public static class RubyBigDecimal extends RubyBasicObject {
46- public RubyBigDecimal (RubyClass rubyClass , DynamicObject dynamicObject ) {
47- super (rubyClass , dynamicObject );
48- }
48+ BIG_DECIMAL_SHAPE = RubyBasicObject .LAYOUT .createShape (BIG_DECIMAL_TYPE ).addProperty (VALUE_PROPERTY );
49+ BIG_DECIMAL_FACTORY = BIG_DECIMAL_SHAPE .createFactory ();
4950 }
5051
5152 public static class RubyBigDecimalAllocator implements Allocator {
@@ -84,19 +85,15 @@ public static void setBigDecimalValue(RubyBasicObject bignum, BigDecimal value)
8485 VALUE_PROPERTY .setSafe (bignum .getDynamicObject (), value , null );
8586 }
8687
87- public static RubyBigDecimal createRubyBigDecimal (RubyClass rubyClass , BigDecimal value ) {
88- return new RubyBigDecimal (rubyClass , BIG_DECIMAL_FACTORY .newInstance (value ));
88+ public static RubyBasicObject createRubyBigDecimal (RubyClass rubyClass , BigDecimal value ) {
89+ return new RubyBasicObject (rubyClass , BIG_DECIMAL_FACTORY .newInstance (value ));
8990 }
9091
9192 public abstract static class BigDecimalCoreMethodNode extends CoreMethodArrayArgumentsNode {
9293
9394 public BigDecimalCoreMethodNode (RubyContext context , SourceSection sourceSection ) {
9495 super (context , sourceSection );
9596 }
96-
97- public static boolean isRubyBigDecimal (Object value ) {
98- return value instanceof RubyBigDecimal ;
99- }
10097 }
10198
10299 @ CoreMethod (names = "initialize" , required = 1 )
@@ -107,12 +104,12 @@ public InitializeNode(RubyContext context, SourceSection sourceSection) {
107104 }
108105
109106 @ Specialization (guards = "isRubyBigDecimal(v)" )
110- public RubyBasicObject initialize (RubyBigDecimal self , RubyBasicObject v ) {
107+ public RubyBasicObject initialize (RubyBasicObject self , RubyBasicObject v ) {
111108 return v ;
112109 }
113110
114111 @ Specialization (guards = "isRubyString(v)" )
115- public RubyBasicObject initializeFromString (RubyBigDecimal self , RubyBasicObject v ) {
112+ public RubyBasicObject initializeFromString (RubyBasicObject self , RubyBasicObject v ) {
116113 // TODO (pitr 20-May-2015): add NaN, Infinity handling
117114 switch (v .toString ()) {
118115 case "NaN" :
0 commit comments