Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: dfe4e9abb376^
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: e2b33a4de42c
Choose a head ref
  • 6 commits
  • 101 files changed
  • 1 contributor

Commits on Jan 2, 2015

  1. Unverified

    This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
    Copy the full SHA
    dfe4e9a View commit details
  2. Copy the full SHA
    1e26ded View commit details

Commits on Jan 3, 2015

  1. Copy the full SHA
    0f3642f View commit details
  2. Copy the full SHA
    6baca03 View commit details
  3. Copy the full SHA
    07a2f18 View commit details
  4. Copy the full SHA
    e2b33a4 View commit details
Showing with 2,643 additions and 546 deletions.
  1. +1 −1 core/src/main/java/org/jruby/RubyTime.java
  2. +0 −1 core/src/main/java/org/jruby/truffle/TruffleBridgeImpl.java
  3. +73 −31 core/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
  4. +46 −2 core/src/main/java/org/jruby/truffle/nodes/core/FixnumNodes.java
  5. +42 −2 core/src/main/java/org/jruby/truffle/nodes/core/FloatNodes.java
  6. +5 −4 core/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
  7. +0 −170 core/src/main/java/org/jruby/truffle/nodes/core/TimeNodes.java
  8. +59 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/CallRubiniusPrimitiveNode.java
  9. +25 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/RubiniusPrimitive.java
  10. +36 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/RubiniusPrimitiveConstructor.java
  11. +61 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/RubiniusPrimitiveManager.java
  12. +28 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/RubiniusPrimitiveNode.java
  13. +73 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/RubyTimeToDateTimeNode.java
  14. +64 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/StringPrimitiveNodes.java
  15. +315 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/TimePrimitiveNodes.java
  16. +222 −0 core/src/main/java/org/jruby/truffle/nodes/rubinius/TypePrimitiveNodes.java
  17. +9 −0 core/src/main/java/org/jruby/truffle/runtime/RubyContext.java
  18. +13 −1 core/src/main/java/org/jruby/truffle/runtime/core/RubyBignum.java
  19. +13 −55 core/src/main/java/org/jruby/truffle/runtime/core/RubyTime.java
  20. +38 −0 core/src/main/java/org/jruby/truffle/runtime/core/TimeOperations.java
  21. +136 −13 core/src/main/java/org/jruby/truffle/translator/BodyTranslator.java
  22. +7 −1 core/src/main/ruby/jruby/truffle/core.rb
  23. +13 −3 core/src/main/ruby/jruby/truffle/core/float.rb
  24. +2 −1 core/src/main/ruby/jruby/truffle/core/rubinius/api/shims/lookuptable.rb
  25. +6 −1 core/src/main/ruby/jruby/truffle/core/rubinius/api/shims/rubinius.rb
  26. +0 −25 core/src/main/ruby/jruby/truffle/core/rubinius/api/shims/type.rb
  27. +4 −5 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/bootstrap/time.rb
  28. +155 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/bootstrap/type.rb
  29. +39 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/float.rb
  30. +47 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/integer.rb
  31. +9 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/kernel.rb
  32. +44 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/numeric.rb
  33. +400 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/rational.rb
  34. +45 −49 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/time.rb
  35. +594 −0 core/src/main/ruby/jruby/truffle/core/rubinius/kernel/common/type.rb
  36. +11 −4 core/src/main/ruby/jruby/truffle/core/shims.rb
  37. +4 −4 spec/ruby/language/numbers_spec.rb
  38. +0 −8 spec/truffle/tags/core/kernel/Rational_tags.txt
  39. +0 −1 spec/truffle/tags/core/rational/abs_tags.txt
  40. +0 −4 spec/truffle/tags/core/rational/ceil_tags.txt
  41. +0 −1 spec/truffle/tags/core/rational/coerce_tags.txt
  42. +0 −12 spec/truffle/tags/core/rational/comparison_tags.txt
  43. +0 −2 spec/truffle/tags/core/rational/denominator_tags.txt
  44. +0 −5 spec/truffle/tags/core/rational/div_tags.txt
  45. +0 −6 spec/truffle/tags/core/rational/divide_tags.txt
  46. +0 −2 spec/truffle/tags/core/rational/divmod_tags.txt
  47. +0 −4 spec/truffle/tags/core/rational/equal_value_tags.txt
  48. +0 −20 spec/truffle/tags/core/rational/exponent_tags.txt
  49. +0 −1 spec/truffle/tags/core/rational/fdiv_tags.txt
  50. +0 −4 spec/truffle/tags/core/rational/floor_tags.txt
  51. +0 −1 spec/truffle/tags/core/rational/hash_tags.txt
  52. +0 −1 spec/truffle/tags/core/rational/inspect_tags.txt
  53. +0 −2 spec/truffle/tags/core/rational/marshal_dump_tags.txt
  54. +0 −2 spec/truffle/tags/core/rational/minus_tags.txt
  55. +0 −1 spec/truffle/tags/core/rational/modulo_tags.txt
  56. +0 −5 spec/truffle/tags/core/rational/multiply_tags.txt
  57. +0 −1 spec/truffle/tags/core/rational/numerator_tags.txt
  58. +0 −5 spec/truffle/tags/core/rational/plus_tags.txt
  59. +0 −1 spec/truffle/tags/core/rational/rational_tags.txt
  60. +0 −3 spec/truffle/tags/core/rational/rationalize_tags.txt
  61. +0 −1 spec/truffle/tags/core/rational/remainder_tags.txt
  62. +0 −5 spec/truffle/tags/core/rational/round_tags.txt
  63. +0 −1 spec/truffle/tags/core/rational/to_f_tags.txt
  64. +0 −1 spec/truffle/tags/core/rational/to_i_tags.txt
  65. +0 −1 spec/truffle/tags/core/rational/to_r_tags.txt
  66. +0 −1 spec/truffle/tags/core/rational/to_s_tags.txt
  67. +0 −4 spec/truffle/tags/core/rational/truncate_tags.txt
  68. +0 −3 spec/truffle/tags/core/rational/zero_tags.txt
  69. +1 −0 spec/truffle/tags/core/struct/eql_tags.txt
  70. +0 −1 spec/truffle/tags/core/time/_dump_tags.txt
  71. +0 −1 spec/truffle/tags/core/time/_load_tags.txt
  72. +0 −1 spec/truffle/tags/core/time/asctime_tags.txt
  73. +0 −10 spec/truffle/tags/core/time/at_tags.txt
  74. +0 −5 spec/truffle/tags/core/time/comparison_tags.txt
  75. +0 −1 spec/truffle/tags/core/time/ctime_tags.txt
  76. +0 −2 spec/truffle/tags/core/time/dup_tags.txt
  77. +0 −2 spec/truffle/tags/core/time/eql_tags.txt
  78. +0 −3 spec/truffle/tags/core/time/gm_tags.txt
  79. +0 −2 spec/truffle/tags/core/time/hash_tags.txt
  80. +0 −1 spec/truffle/tags/core/time/inspect_tags.txt
  81. +0 −1 spec/truffle/tags/core/time/local_tags.txt
  82. +1 −5 spec/truffle/tags/core/time/minus_tags.txt
  83. +0 −1 spec/truffle/tags/core/time/mktime_tags.txt
  84. +0 −2 spec/truffle/tags/core/time/new_tags.txt
  85. +0 −1 spec/truffle/tags/core/time/now_tags.txt
  86. +0 −1 spec/truffle/tags/core/time/nsec_tags.txt
  87. +2 −7 spec/truffle/tags/core/time/plus_tags.txt
  88. +0 −1 spec/truffle/tags/core/time/sec_tags.txt
  89. +0 −3 spec/truffle/tags/core/time/strftime_tags.txt
  90. +0 −1 spec/truffle/tags/core/time/subsec_tags.txt
  91. +0 −2 spec/truffle/tags/core/time/succ_tags.txt
  92. +0 −1 spec/truffle/tags/core/time/time_tags.txt
  93. +0 −1 spec/truffle/tags/core/time/to_i_tags.txt
  94. +0 −1 spec/truffle/tags/core/time/to_s_tags.txt
  95. +0 −1 spec/truffle/tags/core/time/tv_nsec_tags.txt
  96. +0 −1 spec/truffle/tags/core/time/tv_sec_tags.txt
  97. +0 −1 spec/truffle/tags/core/time/tv_usec_tags.txt
  98. +0 −1 spec/truffle/tags/core/time/usec_tags.txt
  99. +0 −1 spec/truffle/tags/core/time/utc_tags.txt
  100. +0 −1 spec/truffle/tags/core/time/wday_tags.txt
  101. +0 −1 spec/truffle/tags/core/time/yday_tags.txt
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/RubyTime.java
Original file line number Diff line number Diff line change
@@ -151,7 +151,7 @@ public static DateTimeZone getLocalTimeZone(Ruby runtime) {
}
}

private static DateTimeZone getTimeZoneFromTZString(Ruby runtime, String zone) {
public static DateTimeZone getTimeZoneFromTZString(Ruby runtime, String zone) {
DateTimeZone cachedZone = runtime.getTimezoneCache().get(zone);
if (cachedZone != null) {
return cachedZone;
Original file line number Diff line number Diff line change
@@ -95,7 +95,6 @@ public void init() {
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, StringNodesFactory.getFactories());
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, SymbolNodesFactory.getFactories());
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, ThreadNodesFactory.getFactories());
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, TimeNodesFactory.getFactories());
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, TrueClassNodesFactory.getFactories());
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, TruffleDebugNodesFactory.getFactories());
CoreMethodNodeManager.addCoreMethodNodes(rubyObjectClass, TrufflePrimitiveNodesFactory.getFactories());
104 changes: 73 additions & 31 deletions core/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved. This
* Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
@@ -192,7 +192,7 @@ public RubyBignum pow(RubyBignum a, RubyBignum b) {

}

@CoreMethod(names = "/", required = 1)
@CoreMethod(names = {"/", "__slash__"}, required = 1)
public abstract static class DivNode extends BignumCoreMethodNode {

public DivNode(RubyContext context, SourceSection sourceSection) {
@@ -246,36 +246,9 @@ public Object mod(RubyBignum a, long b) {
return fixnumOrBignum(a.mod(b));
}

}

@CoreMethod(names = "divmod", required = 1)
public abstract static class DivModNode extends CoreMethodNode {

@Child protected GeneralDivModNode divModNode;

public DivModNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
divModNode = new GeneralDivModNode(context, sourceSection);
}

public DivModNode(DivModNode prev) {
super(prev);
divModNode = prev.divModNode;
}

@Specialization
public RubyArray divMod(RubyBignum a, int b) {
return divModNode.execute(a, b);
}

@Specialization
public RubyArray divMod(RubyBignum a, long b) {
return divModNode.execute(a, b);
}

@Specialization
public RubyArray divMod(RubyBignum a, RubyBignum b) {
return divModNode.execute(a, b);
public Object mod(RubyBignum a, RubyBignum b) {
return fixnumOrBignum(a.mod(b));
}

}
@@ -603,6 +576,75 @@ public Object leftShift(RubyBignum a, int b) {

}

@CoreMethod(names = "abs")
public abstract static class AbsNode extends BignumCoreMethodNode {

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

public AbsNode(AbsNode prev) {
super(prev);
}

@Specialization
public RubyBignum abs(RubyBignum value) {
return value.abs();
}

}

@CoreMethod(names = "even?")
public abstract static class EvenNode extends BignumCoreMethodNode {

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

public EvenNode(EvenNode prev) {
super(prev);
}

@CompilerDirectives.TruffleBoundary
@Specialization
public boolean even(RubyBignum value) {
return value.bigIntegerValue().getLowestSetBit() != 0;
}

}

@CoreMethod(names = "divmod", required = 1)
public abstract static class DivModNode extends CoreMethodNode {

@Child protected GeneralDivModNode divModNode;

public DivModNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
divModNode = new GeneralDivModNode(context, sourceSection);
}

public DivModNode(DivModNode prev) {
super(prev);
divModNode = prev.divModNode;
}

@Specialization
public RubyArray divMod(RubyBignum a, int b) {
return divModNode.execute(a, b);
}

@Specialization
public RubyArray divMod(RubyBignum a, long b) {
return divModNode.execute(a, b);
}

@Specialization
public RubyArray divMod(RubyBignum a, RubyBignum b) {
return divModNode.execute(a, b);
}

}

@CoreMethod(names = {"to_s", "inspect"})
public abstract static class ToSNode extends CoreMethodNode {

48 changes: 46 additions & 2 deletions core/src/main/java/org/jruby/truffle/nodes/core/FixnumNodes.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved. This
* Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
@@ -317,7 +317,7 @@ protected static boolean canShiftIntoInt(int a, int b) {

}

@CoreMethod(names = "/", required = 1)
@CoreMethod(names = {"/", "__slash__"}, required = 1)
public abstract static class DivNode extends CoreMethodNode {

private final BranchProfile bGreaterZero = BranchProfile.create();
@@ -543,6 +543,27 @@ public long mod(long a, long b) {
return mod;
}

@Specialization
public Object mod(int a, RubyBignum b) {
return mod((long) a, b);
}

@Specialization
public Object mod(long a, RubyBignum b) {
notDesignedForCompilation();

// TODO(CS): why are we getting this case?

long mod = BigInteger.valueOf(a).mod(b.bigIntegerValue()).longValue();

if (mod < 0 && b.bigIntegerValue().compareTo(BigInteger.ZERO) > 0 || mod > 0 && b.bigIntegerValue().compareTo(BigInteger.ZERO) < 0) {
adjustProfile.enter();
return new RubyBignum(getContext().getCoreLibrary().getBignumClass(), BigInteger.valueOf(mod).add(b.bigIntegerValue()));
}

return mod;
}

}

@CoreMethod(names = "divmod", required = 1)
@@ -1229,6 +1250,29 @@ public long abs(long n) {

}

@CoreMethod(names = "floor")
public abstract static class FloorNode extends CoreMethodNode {

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

public FloorNode(FloorNode prev) {
super(prev);
}

@Specialization
public int floor(int n) {
return n;
}

@Specialization
public long floor(long n) {
return n;
}

}

@CoreMethod(names = "size", needsSelf = false)
public abstract static class SizeNode extends CoreMethodNode {

44 changes: 42 additions & 2 deletions core/src/main/java/org/jruby/truffle/nodes/core/FloatNodes.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved. This
* Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
@@ -173,7 +173,7 @@ public double pow(double a, RubyBignum b) {

}

@CoreMethod(names = "/", required = 1)
@CoreMethod(names = {"/", "__slash__"}, required = 1)
public abstract static class DivNode extends CoreMethodNode {

public DivNode(RubyContext context, SourceSection sourceSection) {
@@ -509,6 +509,46 @@ public double abs(double n) {

}

@CoreMethod(names = "ceil")
public abstract static class CeilNode extends CoreMethodNode {

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

public CeilNode(CeilNode prev) {
super(prev);
}

@Specialization
public double ceil(double n) {
return Math.ceil(n);
}

}

@CoreMethod(names = "floor")
public abstract static class FloorNode extends CoreMethodNode {

@Child protected FixnumOrBignumNode fixnumOrBignum;

public FloorNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
fixnumOrBignum = new FixnumOrBignumNode(context, sourceSection);
}

public FloorNode(FloorNode prev) {
super(prev);
fixnumOrBignum = prev.fixnumOrBignum;
}

@Specialization
public Object floor(double n) {
return fixnumOrBignum.fixnumOrBignum(Math.floor(n));
}

}

@CoreMethod(names = "infinite?")
public abstract static class InfiniteNode extends CoreMethodNode {

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved. This
* Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
@@ -368,7 +368,7 @@ public ClassNode(ClassNode prev) {
super(prev);
}

public abstract RubyClass executeGetClass(VirtualFrame frame, Object value);
public abstract RubyClass executeGetClass(Object value);

@Specialization
public RubyClass getClass(boolean value) {
@@ -1665,6 +1665,8 @@ public RespondToNode(RespondToNode prev) {
dispatchIgnoreVisibility = prev.dispatchIgnoreVisibility;
}

public abstract boolean executeDoesRespondTo(VirtualFrame frame, Object object, Object name, boolean includePrivate);

@Specialization
public boolean doesRespondTo(VirtualFrame frame, Object object, RubyString name, UndefinedPlaceholder checkVisibility) {
return dispatch.doesRespondTo(frame, name, object);
@@ -1692,7 +1694,6 @@ public boolean doesRespondTo(VirtualFrame frame, Object object, RubySymbol name,
return dispatch.doesRespondTo(frame, name, object);
}
}

}

@CoreMethod(names = "respond_to_missing?", required = 1, optional = 1, visibility = Visibility.PRIVATE)
@@ -2146,7 +2147,7 @@ public ToSNode(RubyContext context, SourceSection sourceSection) {
public RubyString toS(VirtualFrame frame, Object self) {
notDesignedForCompilation();

String className = classNode.executeGetClass(frame, self).getName();
String className = classNode.executeGetClass(self).getName();

if (className == null) {
className = "Class";
Loading