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: 306e7b59f5b6
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 77555e9723d9
Choose a head ref
  • 2 commits
  • 39 files changed
  • 1 contributor

Commits on Aug 22, 2015

  1. Copy the full SHA
    dd2b6e7 View commit details
  2. Copy the full SHA
    77555e9 View commit details
Showing with 431 additions and 392 deletions.
  1. +0 −12 truffle/src/main/java/org/jruby/truffle/nodes/RubyNode.java
  2. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/arguments/CheckArityNode.java
  3. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/arguments/ReadKeywordArgumentNode.java
  4. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/arguments/ReadKeywordRestArgumentNode.java
  5. +3 −3 truffle/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
  6. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/EncodingNodes.java
  7. +2 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/FixnumOrBignumNode.java
  8. +8 −7 truffle/src/main/java/org/jruby/truffle/nodes/core/GeneralDivModNode.java
  9. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/IntegerNodes.java
  10. +10 −11 truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
  11. +4 −5 truffle/src/main/java/org/jruby/truffle/nodes/core/MatchDataNodes.java
  12. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/MathNodes.java
  13. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/MethodNodes.java
  14. +9 −10 truffle/src/main/java/org/jruby/truffle/nodes/core/ModuleNodes.java
  15. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/ObjectSpaceNodes.java
  16. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/ProcNodes.java
  17. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/RangeNodes.java
  18. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/RegexpNodes.java
  19. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/StringNodes.java
  20. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/ThreadNodes.java
  21. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/TrufflePrimitiveNodes.java
  22. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/UnboundMethodNodes.java
  23. +4 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayDropTailNode.java
  24. +4 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayGetTailNode.java
  25. +60 −60 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayNodes.java
  26. +4 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArraySliceNode.java
  27. +2 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/hash/ConcatHashLiteralNode.java
  28. +73 −199 truffle/src/main/java/org/jruby/truffle/nodes/core/hash/HashNodes.java
  29. +14 −11 truffle/src/main/java/org/jruby/truffle/nodes/core/hash/SetNode.java
  30. +4 −6 truffle/src/main/java/org/jruby/truffle/nodes/ext/BigDecimalNodes.java
  31. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/EncodingConverterPrimitiveNodes.java
  32. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/FixnumPrimitiveNodes.java
  33. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/IOPrimitiveNodes.java
  34. +2 −1 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/RubiniusSingleBlockArgNode.java
  35. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/TimePrimitiveNodes.java
  36. +8 −9 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/VMPrimitiveNodes.java
  37. +53 −11 truffle/src/main/java/org/jruby/truffle/runtime/hash/BucketsStrategy.java
  38. +136 −0 truffle/src/main/java/org/jruby/truffle/runtime/hash/HashOperations.java
  39. +7 −3 truffle/src/main/java/org/jruby/truffle/runtime/hash/PackedArrayStrategy.java
12 changes: 0 additions & 12 deletions truffle/src/main/java/org/jruby/truffle/nodes/RubyNode.java
Original file line number Diff line number Diff line change
@@ -167,10 +167,6 @@ public DynamicObject getSymbol(ByteList name) {
return getContext().getSymbol(name);
}

protected DynamicObject createEmptyString() {
return StringNodes.createEmptyString(getContext().getCoreLibrary().getStringClass());
}

protected DynamicObject createString(String string) {
return StringNodes.createString(getContext().getCoreLibrary().getStringClass(), string);
}
@@ -191,14 +187,6 @@ protected DynamicObject createString(ByteList bytes) {
return StringNodes.createString(getContext().getCoreLibrary().getStringFactory(), bytes);
}

protected DynamicObject createArray(Object store, int size) {
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), store, size);
}

protected DynamicObject createBignum(BigInteger value) {
return Layouts.BIGNUM.createBignum(getContext().getCoreLibrary().getBignumFactory(), value);
}

protected POSIX posix() {
return getContext().getPosix();
}
Original file line number Diff line number Diff line change
@@ -14,10 +14,10 @@
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.core.hash.HashNodes;
import org.jruby.truffle.runtime.RubyArguments;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.control.RaiseException;
import org.jruby.truffle.runtime.hash.HashOperations;
import org.jruby.truffle.runtime.methods.Arity;

import java.util.Map;
@@ -68,7 +68,7 @@ public void executeVoid(VirtualFrame frame) {
}

if (!keywordsRest && keywordArguments != null) {
for (Map.Entry<Object, Object> keyValue : HashNodes.iterableKeyValues(keywordArguments)) {
for (Map.Entry<Object, Object> keyValue : HashOperations.iterableKeyValues(keywordArguments)) {
if (!keywordAllowed(keyValue.getKey().toString())) {
CompilerDirectives.transferToInterpreter();
throw new RaiseException(getContext().getCoreLibrary().argumentError("unknown keyword: " + keyValue.getKey().toString(), this));
Original file line number Diff line number Diff line change
@@ -17,9 +17,9 @@
import com.oracle.truffle.api.utilities.ValueProfile;
import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.core.hash.HashNodes;
import org.jruby.truffle.runtime.RubyArguments;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.hash.HashOperations;

import java.util.Map;

@@ -76,7 +76,7 @@ public Object execute(VirtualFrame frame) {
private Object lookupKeywordInHash(DynamicObject hash) {
assert RubyGuards.isRubyHash(hash);

for (Map.Entry<Object, Object> keyValue : HashNodes.iterableKeyValues(hash)) {
for (Map.Entry<Object, Object> keyValue : HashOperations.iterableKeyValues(hash)) {
if (keyValue.getKey().toString().equals(name)) {
return keyValue.getValue();
}
Original file line number Diff line number Diff line change
@@ -15,11 +15,11 @@
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.nodes.core.hash.HashLiteralNode;
import org.jruby.truffle.nodes.core.hash.HashNodes;
import org.jruby.truffle.nodes.methods.MarkerNode;
import org.jruby.truffle.runtime.RubyArguments;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.hash.BucketsStrategy;
import org.jruby.truffle.runtime.hash.HashOperations;
import org.jruby.truffle.runtime.layouts.Layouts;

import java.util.ArrayList;
@@ -68,7 +68,7 @@ private Object lookupRestKeywordArgumentHash(VirtualFrame frame) {

final List<Map.Entry<Object, Object>> entries = new ArrayList<>();

outer: for (Map.Entry<Object, Object> keyValue : HashNodes.iterableKeyValues(hash)) {
outer: for (Map.Entry<Object, Object> keyValue : HashOperations.iterableKeyValues(hash)) {
for (String excludedKeyword : excludedKeywords) {
if (excludedKeyword.equals(keyValue.getKey().toString())) {
continue outer;
Original file line number Diff line number Diff line change
@@ -550,7 +550,7 @@ public DynamicObject coerce(DynamicObject a, int b) {
// TODO (eregon, 16 Feb. 2015): This is NOT spec, but let's try to see if we can make it work.
// b is converted to a Bignum here in other implementations.
Object[] store = new Object[] { b, a };
return createArray(store, store.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), store, store.length);
}

@Specialization
@@ -560,15 +560,15 @@ public DynamicObject coerce(DynamicObject a, long b) {
// TODO (eregon, 16 Feb. 2015): This is NOT spec, but let's try to see if we can make it work.
// b is converted to a Bignum here in other implementations.
Object[] store = new Object[] { b, a };
return createArray(store, store.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), store, store.length);
}

@Specialization(guards = "isRubyBignum(b)")
public DynamicObject coerce(DynamicObject a, DynamicObject b) {
CompilerDirectives.transferToInterpreter();

Object[] store = new Object[] { b, a };
return createArray(store, store.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), store, store.length);
}

}
Original file line number Diff line number Diff line change
@@ -332,7 +332,7 @@ public DynamicObject list() {

final DynamicObject[] encodings = cloneEncodingList();

return createArray(encodings, encodings.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), encodings, encodings.length);
}
}

Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@
import com.oracle.truffle.api.utilities.BranchProfile;
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.layouts.Layouts;

import java.math.BigDecimal;
import java.math.BigInteger;
@@ -53,7 +54,7 @@ public Object fixnumOrBignum(BigInteger value) {
return longValue;
}
} else {
return createBignum(value);
return Layouts.BIGNUM.createBignum(getContext().getCoreLibrary().getBignumFactory(), value);
}
}

Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@
import org.jruby.truffle.nodes.RubyNode;
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.control.RaiseException;
import org.jruby.truffle.runtime.layouts.Layouts;

import java.math.BigInteger;

@@ -106,15 +107,15 @@ private DynamicObject divMod(long a, long b) {

if (integerDiv instanceof Long && ((long) integerDiv) >= Integer.MIN_VALUE && ((long) integerDiv) <= Integer.MAX_VALUE && mod >= Integer.MIN_VALUE && mod <= Integer.MAX_VALUE) {
useFixnumPairProfile.enter();
return createArray(new int[]{(int) (long) integerDiv, (int) mod}, 2);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new int[]{(int) (long) integerDiv, (int) mod}, 2);
} else if (integerDiv instanceof Long) {
useObjectPairProfile.enter();
return createArray(new Object[]{integerDiv, mod}, 2);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new Object[]{integerDiv, mod}, 2);
} else {
useObjectPairProfile.enter();
return createArray(new Object[]{
fixnumOrBignumQuotient.fixnumOrBignum((BigInteger) integerDiv),
mod}, 2);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new Object[]{
fixnumOrBignumQuotient.fixnumOrBignum((BigInteger) integerDiv),
mod}, 2);
}
}

@@ -138,7 +139,7 @@ private DynamicObject divMod(double a, double b) {
mod += b;
}

return createArray(new Object[]{
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new Object[]{
fixnumOrBignumQuotient.fixnumOrBignum(div),
mod}, 2);
}
@@ -158,7 +159,7 @@ private DynamicObject divMod(BigInteger a, BigInteger b) {
bigIntegerResults[1] = b.add(bigIntegerResults[1]);
}

return createArray(new Object[]{
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new Object[]{
fixnumOrBignumQuotient.fixnumOrBignum(bigIntegerResults[0]),
fixnumOrBignumRemainder.fixnumOrBignum(bigIntegerResults[1])}, 2);
}
Original file line number Diff line number Diff line change
@@ -100,7 +100,7 @@ public DynamicObject times(VirtualFrame frame, int n, NotProvided block) {
array[i] = i;
}

return createArray(array, n);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), array, n);
}

@Specialization(guards = "isRubyProc(block)")
21 changes: 10 additions & 11 deletions truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
Original file line number Diff line number Diff line change
@@ -45,8 +45,6 @@
import org.jruby.truffle.nodes.core.KernelNodesFactory.SingletonMethodsNodeFactory;
import org.jruby.truffle.nodes.core.ProcNodes.ProcNewNode;
import org.jruby.truffle.nodes.core.ProcNodesFactory.ProcNewNodeFactory;
import org.jruby.truffle.nodes.core.array.ArrayNodes;
import org.jruby.truffle.nodes.core.hash.HashNodes;
import org.jruby.truffle.nodes.dispatch.*;
import org.jruby.truffle.nodes.methods.LookupMethodNode;
import org.jruby.truffle.nodes.methods.LookupMethodNodeGen;
@@ -64,6 +62,7 @@
import org.jruby.truffle.runtime.control.RaiseException;
import org.jruby.truffle.runtime.core.ArrayOperations;
import org.jruby.truffle.runtime.core.MethodFilter;
import org.jruby.truffle.runtime.hash.HashOperations;
import org.jruby.truffle.runtime.layouts.Layouts;
import org.jruby.truffle.runtime.methods.InternalMethod;
import org.jruby.truffle.runtime.subsystems.FeatureManager;
@@ -113,7 +112,7 @@ public DynamicObject backtick(VirtualFrame frame, DynamicObject command) {
final List<String> envp = new ArrayList<>();

// TODO(CS): cast
for (Map.Entry<Object, Object> keyValue : HashNodes.iterableKeyValues(envAsHash)) {
for (Map.Entry<Object, Object> keyValue : HashOperations.iterableKeyValues(envAsHash)) {
envp.add(keyValue.getKey().toString() + "=" + keyValue.getValue().toString());
}

@@ -361,7 +360,7 @@ public DynamicObject callerLocations(int omit, int length) {
locations[n] = ThreadBacktraceLocationNodes.createRubyThreadBacktraceLocation(threadBacktraceLocationClass, activation);
}

return createArray(locations, locations.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), locations, locations.length);
}
}

@@ -685,7 +684,7 @@ private static void exec(RubyContext context, DynamicObject envAsHash, String[]
final ProcessBuilder builder = new ProcessBuilder(commandLine);
builder.inheritIO();

for (Map.Entry<Object, Object> keyValue : HashNodes.iterableKeyValues(envAsHash)) {
for (Map.Entry<Object, Object> keyValue : HashOperations.iterableKeyValues(envAsHash)) {
builder.environment().put(keyValue.getKey().toString(), keyValue.getValue().toString());
}

@@ -1290,7 +1289,7 @@ public DynamicObject methodsRegular(VirtualFrame frame, Object self, boolean reg

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(regular, MethodFilter.PUBLIC_PROTECTED).toArray();
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

@Specialization(guards = "!regular")
@@ -1347,7 +1346,7 @@ public DynamicObject privateMethods(VirtualFrame frame, Object self, boolean inc

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PRIVATE).toArray();
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

}
@@ -1394,7 +1393,7 @@ public DynamicObject protectedMethods(VirtualFrame frame, Object self, boolean i

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PROTECTED).toArray();
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

}
@@ -1424,7 +1423,7 @@ public DynamicObject publicMethods(VirtualFrame frame, Object self, boolean incl

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PUBLIC).toArray();
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

}
@@ -1765,7 +1764,7 @@ public DynamicObject singletonMethods(VirtualFrame frame, Object self, boolean i

CompilerDirectives.transferToInterpreter();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterSingletonMethods(includeAncestors, MethodFilter.PUBLIC_PROTECTED).toArray();
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}

}
@@ -2015,7 +2014,7 @@ public boolean system(VirtualFrame frame, DynamicObject command) {
final List<String> envp = new ArrayList<>();

// TODO(CS): cast
for (Map.Entry<Object, Object> keyValue : HashNodes.iterableKeyValues(envAsHash)) {
for (Map.Entry<Object, Object> keyValue : HashOperations.iterableKeyValues(envAsHash)) {
envp.add(keyValue.getKey().toString() + "=" + keyValue.getValue().toString());
}

Original file line number Diff line number Diff line change
@@ -24,7 +24,6 @@
import org.jruby.truffle.nodes.cast.TaintResultNode;
import org.jruby.truffle.nodes.coerce.ToIntNode;
import org.jruby.truffle.nodes.coerce.ToIntNodeGen;
import org.jruby.truffle.nodes.core.array.ArrayNodes;
import org.jruby.truffle.nodes.dispatch.CallDispatchHeadNode;
import org.jruby.truffle.nodes.dispatch.DispatchHeadNodeFactory;
import org.jruby.truffle.runtime.NotProvided;
@@ -225,7 +224,7 @@ public Object getIndex(DynamicObject matchData, int index, int length) {
final Object[] values = Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length);
final int normalizedIndex = ArrayOperations.normalizeIndex(values.length, index);
final Object[] store = Arrays.copyOfRange(values, normalizedIndex, normalizedIndex + length);
return createArray(store, length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), store, length);
}

@Specialization(guards = "isRubySymbol(index)")
@@ -284,7 +283,7 @@ public Object getIndex(DynamicObject matchData, DynamicObject range, NotProvided
final int length = exclusiveEnd - normalizedIndex;

final Object[] store = Arrays.copyOfRange(values, normalizedIndex, normalizedIndex + length);
return createArray(store, length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), store, length);
}

}
@@ -327,7 +326,7 @@ public DynamicObject toA(DynamicObject matchData) {
CompilerDirectives.transferToInterpreter();

Object[] objects = getCaptures(matchData);
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}
}

@@ -448,7 +447,7 @@ public DynamicObject toA(DynamicObject matchData) {
CompilerDirectives.transferToInterpreter();

Object[] objects = Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length);
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}
}

Original file line number Diff line number Diff line change
@@ -358,7 +358,7 @@ public DynamicObject frexp(double a) {
for (; mantissa >= 1.0; mantissa *= 0.5, exponent +=1) { }
}

return createArray(new Object[]{sign * mantissa, exponent}, 2);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new Object[]{sign * mantissa, exponent}, 2);
}

@Fallback
@@ -577,7 +577,7 @@ public DynamicObject lgamma(double a) {

final RubyMath.NemesLogGamma l = new RubyMath.NemesLogGamma(a);

return createArray(new Object[]{l.value, l.sign}, 2);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), new Object[]{l.value, l.sign}, 2);
}

@Fallback
Original file line number Diff line number Diff line change
@@ -30,7 +30,6 @@
import org.jruby.truffle.nodes.cast.ProcOrNullNode;
import org.jruby.truffle.nodes.cast.ProcOrNullNodeGen;
import org.jruby.truffle.nodes.core.BasicObjectNodes.ReferenceEqualNode;
import org.jruby.truffle.nodes.core.array.ArrayNodes;
import org.jruby.truffle.nodes.methods.CallMethodNode;
import org.jruby.truffle.nodes.methods.CallMethodNodeGen;
import org.jruby.truffle.nodes.objects.ClassNode;
@@ -203,7 +202,7 @@ public Object sourceLocation(DynamicObject method) {
} else {
DynamicObject file = createString(sourceSection.getSource().getName());
Object[] objects = new Object[]{file, sourceSection.getStartLine()};
return createArray(objects, objects.length);
return Layouts.ARRAY.createArray(getContext().getCoreLibrary().getArrayFactory(), objects, objects.length);
}
}

Loading