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: bd3592803d6c
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: e6452191700c
Choose a head ref
  • 12 commits
  • 53 files changed
  • 1 contributor

Commits on Aug 21, 2015

  1. Copy the full SHA
    209f584 View commit details
  2. Copy the full SHA
    3d7d650 View commit details
  3. Copy the full SHA
    092162f View commit details
  4. Copy the full SHA
    5b1812d View commit details
  5. Copy the full SHA
    21088d4 View commit details
  6. Copy the full SHA
    d56b47e View commit details
  7. Copy the full SHA
    f8a77f4 View commit details
  8. Copy the full SHA
    469a186 View commit details

Commits on Aug 22, 2015

  1. Copy the full SHA
    329425e View commit details
  2. Copy the full SHA
    422e8cf View commit details
  3. Copy the full SHA
    7f602ff View commit details
  4. Copy the full SHA
    e645219 View commit details
Showing with 1,085 additions and 877 deletions.
  1. +0 −3 core/src/main/java/org/jruby/util/cli/Options.java
  2. +3 −3 truffle/src/main/java/org/jruby/truffle/nodes/arguments/ReadRestArgumentNode.java
  3. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/cast/ArrayCastNode.java
  4. +2 −1 truffle/src/main/java/org/jruby/truffle/nodes/cast/SingleValueCastNode.java
  5. +3 −3 truffle/src/main/java/org/jruby/truffle/nodes/cast/SplatCastNode.java
  6. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/control/WhenSplatNode.java
  7. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/BindingNodes.java
  8. +2 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/ExceptionNodes.java
  9. +18 −12 truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
  10. +12 −7 truffle/src/main/java/org/jruby/truffle/nodes/core/MatchDataNodes.java
  11. +3 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/MethodNodes.java
  12. +27 −14 truffle/src/main/java/org/jruby/truffle/nodes/core/ModuleNodes.java
  13. +3 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/ObjectSpaceNodes.java
  14. +3 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/ProcNodes.java
  15. +1 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/RegexpNodes.java
  16. +3 −3 truffle/src/main/java/org/jruby/truffle/nodes/core/StringNodes.java
  17. +2 −3 truffle/src/main/java/org/jruby/truffle/nodes/core/TrufflePrimitiveNodes.java
  18. +3 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/UnboundMethodNodes.java
  19. +42 −33 truffle/src/main/java/org/jruby/truffle/nodes/core/array/AppendManyNode.java
  20. +22 −14 truffle/src/main/java/org/jruby/truffle/nodes/core/array/AppendOneNode.java
  21. +2 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayBuilderNode.java
  22. +73 −2 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayLiteralNode.java
  23. +247 −392 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayNodes.java
  24. +0 −46 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayPushNode.java
  25. +3 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayReadDenormalizedNode.java
  26. +3 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayReadSliceDenormalizedNode.java
  27. +9 −17 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayReadSliceNormalizedNode.java
  28. +3 −1 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayWriteDenormalizedNode.java
  29. +38 −19 truffle/src/main/java/org/jruby/truffle/nodes/core/array/ArrayWriteNormalizedNode.java
  30. +8 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/array/EnsureCapacityArrayNode.java
  31. +9 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/array/GeneralizeArrayNode.java
  32. +5 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/array/PopOneNode.java
  33. +9 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/hash/HashNodes.java
  34. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/exceptions/RescueSplatNode.java
  35. +1 −2 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/FloatPrimitiveNodes.java
  36. +18 −11 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/IOPrimitiveNodes.java
  37. +3 −1 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/StringPrimitiveNodes.java
  38. +9 −5 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/VMPrimitiveNodes.java
  39. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/supercall/GeneralSuperCallNode.java
  40. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/supercall/GeneralSuperReCallNode.java
  41. +2 −2 truffle/src/main/java/org/jruby/truffle/nodes/yield/YieldNode.java
  42. +10 −8 truffle/src/main/java/org/jruby/truffle/runtime/RubyContext.java
  43. +12 −221 truffle/src/main/java/org/jruby/truffle/runtime/array/ArrayMirror.java
  44. +46 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/ArrayReflector.java
  45. +61 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/BasicArrayMirror.java
  46. +59 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/DoubleArrayMirror.java
  47. +44 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/EmptyArrayMirror.java
  48. +64 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/IntegerArrayMirror.java
  49. +59 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/LongArrayMirror.java
  50. +55 −0 truffle/src/main/java/org/jruby/truffle/runtime/array/ObjectArrayMirror.java
  51. +57 −0 truffle/src/main/java/org/jruby/truffle/runtime/core/ArrayOperations.java
  52. +6 −5 truffle/src/main/java/org/jruby/truffle/runtime/core/CoreLibrary.java
  53. +10 −10 truffle/src/main/java/org/jruby/truffle/runtime/subsystems/FeatureManager.java
3 changes: 0 additions & 3 deletions core/src/main/java/org/jruby/util/cli/Options.java
Original file line number Diff line number Diff line change
@@ -147,9 +147,6 @@ public class Options {
public static final Option<Boolean> TRUFFLE_DISPATCH_METHODMISSING_ALWAYS_CLONED = bool(TRUFFLE, "truffle.call.method_missing_always_cloned", true, "Always clone #method_missing call targets.");
public static final Option<Boolean> TRUFFLE_DISPATCH_METHODMISSING_ALWAYS_INLINED = bool(TRUFFLE, "truffle.call.method_missing_always_inlined", true, "Always inline #method_missing call targets.");

public static final Option<Boolean> TRUFFLE_RANDOMIZE_STORAGE_ARRAY = bool(TRUFFLE, "truffle.randomize_storage.array", false, "Randomize Array storage strategy.");
public static final Option<Integer> TRUFFLE_RANDOMIZE_SEED = integer(TRUFFLE, "truffle.randomize.seed", 0, "Seed for any randomization.");

public static final Option<Boolean> NATIVE_ENABLED = bool(NATIVE, "native.enabled", true, "Enable/disable native code, including POSIX features and C exts.");
public static final Option<Boolean> NATIVE_VERBOSE = bool(NATIVE, "native.verbose", false, "Enable verbose logging of native extension loading.");
public static final Option<Boolean> FFI_COMPILE_DUMP = bool(NATIVE, "ffi.compile.dump", false, "Dump bytecode-generated FFI stubs to console.");
Original file line number Diff line number Diff line change
@@ -59,16 +59,16 @@ public Object execute(VirtualFrame frame) {

if (startIndex == 0) {
final Object[] arguments = RubyArguments.extractUserArguments(frame.getArguments());
return ArrayNodes.createArray(arrayClass, arguments, length);
return ArrayNodes.createGeneralArray(arrayClass, arguments, length);
} else {
if (startIndex >= endIndex) {
noArgumentsLeftProfile.enter();
return ArrayNodes.createEmptyArray(arrayClass);
return ArrayNodes.createGeneralArray(arrayClass, null, 0);
} else {
subsetOfArgumentsProfile.enter();
final Object[] arguments = RubyArguments.extractUserArguments(frame.getArguments());
// TODO(CS): risk here of widening types too much - always going to be Object[] - does seem to be something that does happen
return ArrayNodes.createArray(arrayClass, ArrayUtils.extractRange(arguments, startIndex, endIndex), length);
return ArrayNodes.createGeneralArray(arrayClass, ArrayUtils.extractRange(arguments, startIndex, endIndex), length);
}
}
}
Original file line number Diff line number Diff line change
@@ -84,7 +84,7 @@ public Object cast(Object nil) {
return createEmptyArray();

case ARRAY_WITH_NIL:
return ArrayNodes.fromObject(getContext().getCoreLibrary().getArrayClass(), nil());
return ArrayNodes.createGeneralArray(getContext().getCoreLibrary().getArrayClass(), new Object[]{nil()}, 1);

case NIL:
return nil;
Original file line number Diff line number Diff line change
@@ -41,7 +41,8 @@ protected Object castSingle(Object[] args) {
@TruffleBoundary
@Specialization(guards = { "!noArguments(args)", "!singleArgument(args)" })
protected DynamicObject castMany(Object[] args) {
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(), args);
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
return ArrayNodes.createGeneralArray(arrayClass, args, args.length);
}

protected boolean noArguments(Object[] args) {
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ public DynamicObject splat(Object nil) {
return createEmptyArray();

case ARRAY_WITH_NIL:
return ArrayNodes.fromObject(getContext().getCoreLibrary().getArrayClass(), nil());
return ArrayNodes.createGeneralArray(getContext().getCoreLibrary().getArrayClass(), new Object[]{nil()}, 1);

default: {
throw new UnsupportedOperationException();
@@ -101,15 +101,15 @@ public DynamicObject splat(VirtualFrame frame, Object object) {
return (DynamicObject) array;
} else if (array == nil() || array == DispatchNode.MISSING) {
CompilerDirectives.transferToInterpreter();
return ArrayNodes.fromObject(getContext().getCoreLibrary().getArrayClass(), object);
return ArrayNodes.createGeneralArray(getContext().getCoreLibrary().getArrayClass(), new Object[]{object}, 1);
} else {
throw new RaiseException(getContext().getCoreLibrary().typeErrorCantConvertTo(
object, getContext().getCoreLibrary().getArrayClass(), method, array, this)
);
}
}

return ArrayNodes.fromObject(getContext().getCoreLibrary().getArrayClass(), object);
return ArrayNodes.createGeneralArray(getContext().getCoreLibrary().getArrayClass(), new Object[]{object}, 1);
}

}
Original file line number Diff line number Diff line change
@@ -16,10 +16,10 @@
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.RubyNode;
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.RubyContext;
import org.jruby.truffle.runtime.core.ArrayOperations;

public class WhenSplatNode extends RubyNode {

@@ -53,7 +53,7 @@ public boolean executeBoolean(VirtualFrame frame) {
throw new UnsupportedOperationException();
}

for (Object value : ArrayNodes.slowToArray(array)) {
for (Object value : ArrayOperations.toIterable(array)) {
if (dispatchCaseEqual.callBoolean(frame, caseExpression, "===", null, value)) {
return true;
}
Original file line number Diff line number Diff line change
@@ -20,7 +20,6 @@
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.source.SourceSection;
import org.jruby.truffle.nodes.RubyGuards;
import org.jruby.truffle.nodes.core.array.ArrayNodes;
import org.jruby.truffle.nodes.locals.ReadFrameSlotNode;
import org.jruby.truffle.nodes.locals.ReadFrameSlotNodeGen;
import org.jruby.truffle.nodes.locals.WriteFrameSlotNode;
@@ -29,6 +28,7 @@
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.ThreadLocalObject;
import org.jruby.truffle.runtime.control.RaiseException;
import org.jruby.truffle.runtime.core.ArrayOperations;
import org.jruby.truffle.runtime.layouts.Layouts;
import org.jruby.truffle.runtime.methods.InternalMethod;

@@ -267,7 +267,7 @@ public DynamicObject localVariables(DynamicObject binding) {
while (frame != null) {
for (Object name : frame.getFrameDescriptor().getIdentifiers()) {
if (name instanceof String) {
ArrayNodes.slowPush(array, getSymbol((String) name));
ArrayOperations.append(array, getSymbol((String) name));
}
}

Original file line number Diff line number Diff line change
@@ -45,7 +45,8 @@ public static DynamicObject asRubyStringArray(DynamicObject exception) {
array[n] = StringNodes.createString(Layouts.MODULE.getFields(Layouts.BASIC_OBJECT.getLogicalClass(exception)).getContext().getCoreLibrary().getStringClass(), lines.get(n));
}

return ArrayNodes.fromObjects(Layouts.MODULE.getFields(Layouts.BASIC_OBJECT.getLogicalClass(exception)).getContext().getCoreLibrary().getArrayClass(), array);
DynamicObject arrayClass = Layouts.MODULE.getFields(Layouts.BASIC_OBJECT.getLogicalClass(exception)).getContext().getCoreLibrary().getArrayClass();
return ArrayNodes.createGeneralArray(arrayClass, array, array.length);
}

public static void setMessage(DynamicObject exception, Object message) {
30 changes: 18 additions & 12 deletions truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
Original file line number Diff line number Diff line change
@@ -62,6 +62,7 @@
import org.jruby.truffle.runtime.backtrace.Activation;
import org.jruby.truffle.runtime.backtrace.Backtrace;
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.layouts.Layouts;
import org.jruby.truffle.runtime.methods.InternalMethod;
@@ -1056,7 +1057,7 @@ public DynamicObject instanceVariables(DynamicObject self) {

for (Object name : instanceVariableNames) {
if (name instanceof String) {
ArrayNodes.slowPush(array, getSymbol((String) name));
ArrayOperations.append(array, getSymbol((String) name));
}
}

@@ -1207,7 +1208,7 @@ public DynamicObject localVariables() {

for (Object name : RubyCallStack.getCallerFrame(getContext()).getFrame(FrameInstance.FrameAccess.READ_ONLY, false).getFrameDescriptor().getIdentifiers()) {
if (name instanceof String) {
ArrayNodes.slowPush(array, getSymbol((String) name));
ArrayOperations.append(array, getSymbol((String) name));
}
}

@@ -1288,8 +1289,9 @@ public DynamicObject methodsRegular(VirtualFrame frame, Object self, boolean reg
final DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(),
Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(regular, MethodFilter.PUBLIC_PROTECTED).toArray());
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(regular, MethodFilter.PUBLIC_PROTECTED).toArray();
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}

@Specialization(guards = "!regular")
@@ -1345,8 +1347,9 @@ public DynamicObject privateMethods(VirtualFrame frame, Object self, boolean inc
DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(),
Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PRIVATE).toArray());
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PRIVATE).toArray();
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}

}
@@ -1392,8 +1395,9 @@ public DynamicObject protectedMethods(VirtualFrame frame, Object self, boolean i
final DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(),
Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PROTECTED).toArray());
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PROTECTED).toArray();
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}

}
@@ -1422,8 +1426,9 @@ public DynamicObject publicMethods(VirtualFrame frame, Object self, boolean incl
final DynamicObject metaClass = metaClassNode.executeMetaClass(frame, self);

CompilerDirectives.transferToInterpreter();
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(),
Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PUBLIC).toArray());
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterMethodsOnObject(includeAncestors, MethodFilter.PUBLIC).toArray();
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}

}
@@ -1763,8 +1768,9 @@ public DynamicObject singletonMethods(VirtualFrame frame, Object self, boolean i
}

CompilerDirectives.transferToInterpreter();
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(),
Layouts.MODULE.getFields(metaClass).filterSingletonMethods(includeAncestors, MethodFilter.PUBLIC_PROTECTED).toArray());
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = Layouts.MODULE.getFields(metaClass).filterSingletonMethods(includeAncestors, MethodFilter.PUBLIC_PROTECTED).toArray();
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}

}
Original file line number Diff line number Diff line change
@@ -31,6 +31,7 @@
import org.jruby.truffle.runtime.RubyContext;
import org.jruby.truffle.runtime.array.ArrayUtils;
import org.jruby.truffle.runtime.control.RaiseException;
import org.jruby.truffle.runtime.core.ArrayOperations;
import org.jruby.truffle.runtime.layouts.Layouts;
import org.jruby.util.ByteList;
import org.jruby.util.CodeRangeable;
@@ -208,7 +209,7 @@ public Object getIndex(DynamicObject matchData, int index, NotProvided length) {
CompilerDirectives.transferToInterpreter();

final Object[] values = Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length);
final int normalizedIndex = ArrayNodes.normalizeIndex(values.length, index);
final int normalizedIndex = ArrayOperations.normalizeIndex(values.length, index);

if ((normalizedIndex < 0) || (normalizedIndex >= values.length)) {
return nil();
@@ -222,7 +223,7 @@ public Object getIndex(DynamicObject matchData, int index, int length) {
CompilerDirectives.transferToInterpreter();
// TODO BJF 15-May-2015 Need to handle negative indexes and lengths and out of bounds
final Object[] values = Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length);
final int normalizedIndex = ArrayNodes.normalizeIndex(values.length, index);
final int normalizedIndex = ArrayOperations.normalizeIndex(values.length, index);
final Object[] store = Arrays.copyOfRange(values, normalizedIndex, normalizedIndex + length);
return createArray(store, length);
}
@@ -277,9 +278,9 @@ public Object getIndex(VirtualFrame frame, DynamicObject matchData, Object index
@Specialization(guards = "isIntegerFixnumRange(range)")
public Object getIndex(DynamicObject matchData, DynamicObject range, NotProvided len) {
final Object[] values = Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length);
final int normalizedIndex = ArrayNodes.normalizeIndex(values.length, Layouts.INTEGER_FIXNUM_RANGE.getBegin(range));
final int end = ArrayNodes.normalizeIndex(values.length, Layouts.INTEGER_FIXNUM_RANGE.getEnd(range));
final int exclusiveEnd = ArrayNodes.clampExclusiveIndex(values.length, Layouts.INTEGER_FIXNUM_RANGE.getExcludedEnd(range) ? end : end + 1);
final int normalizedIndex = ArrayOperations.normalizeIndex(values.length, Layouts.INTEGER_FIXNUM_RANGE.getBegin(range));
final int end = ArrayOperations.normalizeIndex(values.length, Layouts.INTEGER_FIXNUM_RANGE.getEnd(range));
final int exclusiveEnd = ArrayOperations.clampExclusiveIndex(values.length, Layouts.INTEGER_FIXNUM_RANGE.getExcludedEnd(range) ? end : end + 1);
final int length = exclusiveEnd - normalizedIndex;

final Object[] store = Arrays.copyOfRange(values, normalizedIndex, normalizedIndex + length);
@@ -325,7 +326,9 @@ public CapturesNode(RubyContext context, SourceSection sourceSection) {
public DynamicObject toA(DynamicObject matchData) {
CompilerDirectives.transferToInterpreter();

return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(), getCaptures(matchData));
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = getCaptures(matchData);
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}
}

@@ -445,7 +448,9 @@ public ToANode(RubyContext context, SourceSection sourceSection) {
public DynamicObject toA(DynamicObject matchData) {
CompilerDirectives.transferToInterpreter();

return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(), Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length));
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = Arrays.copyOf(Layouts.MATCH_DATA.getValues(matchData), Layouts.MATCH_DATA.getValues(matchData).length);
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}
}

Original file line number Diff line number Diff line change
@@ -202,8 +202,9 @@ public Object sourceLocation(DynamicObject method) {
return nil();
} else {
DynamicObject file = createString(sourceSection.getSource().getName());
return ArrayNodes.fromObjects(getContext().getCoreLibrary().getArrayClass(),
file, sourceSection.getStartLine());
DynamicObject arrayClass = getContext().getCoreLibrary().getArrayClass();
Object[] objects = new Object[]{file, sourceSection.getStartLine()};
return ArrayNodes.createGeneralArray(arrayClass, objects, objects.length);
}
}

Loading