Skip to content

Commit

Permalink
[refactor] pass context w internal method; use RubyRange#isExcludeEnd
Browse files Browse the repository at this point in the history
  • Loading branch information
kares committed Jun 5, 2018
1 parent 98d23c8 commit e9c28b0
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 17 deletions.
17 changes: 6 additions & 11 deletions core/src/main/java/org/jruby/RubyKernel.java
Original file line number Diff line number Diff line change
Expand Up @@ -1101,8 +1101,7 @@ public static IRubyObject caller(ThreadContext context, IRubyObject recv, IRubyO
}

private static IRubyObject callerInternal(ThreadContext context, IRubyObject recv, IRubyObject level, IRubyObject length) {
Ruby runtime = context.runtime;
Integer[] ll = levelAndLengthFromArgs(runtime, level, length, 1);
Integer[] ll = levelAndLengthFromArgs(context, level, length, 1);
Integer levelInt = ll[0], lengthInt = ll[1];

return context.createCallerBacktrace(levelInt, lengthInt, Thread.currentThread().getStackTrace());
Expand All @@ -1124,8 +1123,7 @@ public static IRubyObject caller_locations(ThreadContext context, IRubyObject re
}

private static IRubyObject callerLocationsInternal(ThreadContext context, IRubyObject level, IRubyObject length) {
Ruby runtime = context.runtime;
Integer[] ll = levelAndLengthFromArgs(runtime, level, length, 1);
Integer[] ll = levelAndLengthFromArgs(context, level, length, 1);
Integer levelInt = ll[0], lengthInt = ll[1];

return context.createCallerLocations(levelInt, lengthInt, Thread.currentThread().getStackTrace());
Expand All @@ -1134,20 +1132,17 @@ private static IRubyObject callerLocationsInternal(ThreadContext context, IRubyO
/**
* Retrieve the level and length from given args, if non-null.
*/
static Integer[] levelAndLengthFromArgs(Ruby runtime, IRubyObject _level, IRubyObject _length, int defaultLevel) {
static Integer[] levelAndLengthFromArgs(ThreadContext context, IRubyObject _level, IRubyObject _length, int defaultLevel) {
int level;
Integer length = null;
if (_length != null) {
level = RubyNumeric.fix2int(_level);
length = RubyNumeric.fix2int(_length);
} else if (_level != null && _level instanceof RubyRange) {
RubyRange range = (RubyRange) _level;
ThreadContext context = runtime.getCurrentContext();
level = RubyNumeric.fix2int(range.first(context));
length = RubyNumeric.fix2int(range.last(context)) - level;
if (!range.exclude_end_p().isTrue()){
length++;
}
if (!range.isExcludeEnd()) length++;
length = length < 0 ? 0 : length;
} else if (_level != null) {
level = RubyNumeric.fix2int(_level);
Expand All @@ -1156,10 +1151,10 @@ static Integer[] levelAndLengthFromArgs(Ruby runtime, IRubyObject _level, IRubyO
}

if (level < 0) {
throw runtime.newArgumentError("negative level (" + level + ')');
throw context.runtime.newArgumentError("negative level (" + level + ')');
}
if (length != null && length < 0) {
throw runtime.newArgumentError("negative size (" + length + ')');
throw context.runtime.newArgumentError("negative size (" + length + ')');
}

return new Integer[] {level, length};
Expand Down
6 changes: 2 additions & 4 deletions core/src/main/java/org/jruby/RubyThread.java
Original file line number Diff line number Diff line change
Expand Up @@ -1629,8 +1629,7 @@ private IRubyObject backtraceInternal(ThreadContext context, IRubyObject level,
// nativeThread may have finished
if (myContext == null || nativeThread == null || !nativeThread.isAlive()) return context.nil;

Ruby runtime = context.runtime;
Integer[] ll = RubyKernel.levelAndLengthFromArgs(runtime, level, length, 0);
Integer[] ll = RubyKernel.levelAndLengthFromArgs(context, level, length, 0);
Integer levelInt = ll[0], lengthInt = ll[1];

return myContext.createCallerBacktrace(levelInt, lengthInt, getNativeThread().getStackTrace());
Expand Down Expand Up @@ -1660,8 +1659,7 @@ private IRubyObject backtraceLocationsInternal(ThreadContext context, IRubyObjec
// nativeThread may have finished
if (myContext == null || nativeThread == null || !nativeThread.isAlive()) return context.nil;

Ruby runtime = context.runtime;
Integer[] ll = RubyKernel.levelAndLengthFromArgs(runtime, level, length, 0);
Integer[] ll = RubyKernel.levelAndLengthFromArgs(context, level, length, 0);
Integer levelInt = ll[0], lengthInt = ll[1];

return myContext.createCallerLocations(levelInt, lengthInt, getNativeThread().getStackTrace());
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/org/jruby/java/proxies/ArrayJavaProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -733,15 +733,15 @@ private IRubyObject arrayRange(final ThreadContext context, final RubyRange rang
last = last >= 0 ? last : arrayLength + last;

int newLength = last - first;
if ( range.exclude_end_p().isFalse() ) newLength += 1;
if ( range.isExcludeEnd() ) newLength += 1;

if ( newLength <= 0 ) {
return ArrayUtils.emptyJavaArrayDirect(context, array.getClass().getComponentType());
}

return ArrayUtils.javaArraySubarrayDirect(context, array, first, newLength);
}
throw context.runtime.newTypeError("only Fixnum ranges supported");
throw context.runtime.newTypeError("only Integer ranges supported");
}

public IRubyObject getRange(ThreadContext context, IRubyObject first, IRubyObject length) {
Expand Down

0 comments on commit e9c28b0

Please sign in to comment.