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

Commits on Mar 10, 2016

  1. deprecate ThreadContext's createBacktrace2 in favor of getBacktrace

    ... not really "creating" the backtrace - simply returning raw tracked backtrace elements
    kares committed Mar 10, 2016
    Copy the full SHA
    835caaf View commit details
  2. fix double incrementing caller count + allow for raw backtrace retrie…

    …val for given level
    kares committed Mar 10, 2016
    Copy the full SHA
    8d1083c View commit details
Showing with 29 additions and 20 deletions.
  1. +25 −16 core/src/main/java/org/jruby/runtime/ThreadContext.java
  2. +4 −4 core/src/main/java/org/jruby/runtime/backtrace/TraceType.java
41 changes: 25 additions & 16 deletions core/src/main/java/org/jruby/runtime/ThreadContext.java
Original file line number Diff line number Diff line change
@@ -266,7 +266,7 @@ public StaticScope getCurrentStaticScope() {
}

private void expandFrameStack() {
int newSize = frameStack.length * 2;
final int newSize = frameStack.length * 2;
frameStack = fillNewFrameStack(new Frame[newSize], newSize);
}

@@ -506,7 +506,7 @@ public IRubyObject getLastLine() {
/////////////////// BACKTRACE ////////////////////

private static void expandBacktraceStack(ThreadContext context) {
int newSize = context.backtrace.length * 2;
final int newSize = context.backtrace.length * 2;
context.backtrace = fillNewBacktrace(context, new BacktraceElement[newSize], newSize);
}

@@ -521,11 +521,11 @@ private static BacktraceElement[] fillNewBacktrace(ThreadContext context, Backtr
}

public static void pushBacktrace(ThreadContext context, String method, String file, int line) {
int index = ++context.backtraceIndex;
BacktraceElement[] stack = context.backtrace;
BacktraceElement.update(stack[index], method, file, line);
if (index + 1 == stack.length) {
ThreadContext.expandBacktraceStack(context);
final int index = ++context.backtraceIndex;
BacktraceElement[] backtrace = context.backtrace;
BacktraceElement.update(backtrace[index], method, file, line);
if (index + 1 == backtrace.length) {
expandBacktraceStack(context);
}
}

@@ -683,6 +683,8 @@ public IRubyObject createCallerBacktrace(int level, Integer length, StackTraceEl
* @return an Array with the backtrace locations
*/
public IRubyObject createCallerLocations(int level, Integer length, StackTraceElement[] stacktrace) {
runtime.incrementCallerCount();

RubyStackTraceElement[] trace = getTraceSubset(level, length, stacktrace);

if (trace == null) return nil;
@@ -691,7 +693,6 @@ public IRubyObject createCallerLocations(int level, Integer length, StackTraceEl
}

private RubyStackTraceElement[] getTraceSubset(int level, Integer length, StackTraceElement[] stacktrace) {
runtime.incrementCallerCount();

if (length != null && length == 0) return RubyStackTraceElement.EMPTY_ARRAY;

@@ -741,16 +742,24 @@ public void setEventHooksEnabled(boolean flag) {
eventHooksEnabled = flag;
}

@Deprecated
public BacktraceElement[] createBacktrace2(int level, boolean nativeException) {
return getBacktrace();
}

/**
* Create an Array with backtrace information.
* @param level
* @param nativeException
* @return an Array with the backtrace
* Create a snapshot Array with current backtrace information.
* @return the backtrace
*/
public BacktraceElement[] createBacktrace2(int level, boolean nativeException) {
BacktraceElement[] backtrace = this.backtrace;
BacktraceElement[] newTrace = new BacktraceElement[backtraceIndex + 1];
System.arraycopy(backtrace, 0, newTrace, 0, newTrace.length);
public BacktraceElement[] getBacktrace() {
return getBacktrace(0);
}

public final BacktraceElement[] getBacktrace(int level) {
final int len = backtraceIndex + 1;
if ( level < 0 ) level = len + level;
BacktraceElement[] newTrace = new BacktraceElement[len - level];
System.arraycopy(backtrace, level, newTrace, 0, newTrace.length);
return newTrace;
}

8 changes: 4 additions & 4 deletions core/src/main/java/org/jruby/runtime/backtrace/TraceType.java
Original file line number Diff line number Diff line change
@@ -155,7 +155,7 @@ public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[]
public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[] javaTrace, boolean nativeException) {
return new BacktraceData(
javaTrace,
context.createBacktrace2(0, nativeException),
context.getBacktrace(),
true,
false,
false);
@@ -169,7 +169,7 @@ public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[]
public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[] javaTrace, boolean nativeException) {
return new BacktraceData(
javaTrace,
context.createBacktrace2(0, nativeException),
context.getBacktrace(),
false,
false,
true);
@@ -183,7 +183,7 @@ public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[]
public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[] javaTrace, boolean nativeException) {
return new BacktraceData(
javaTrace,
context.createBacktrace2(0, nativeException),
context.getBacktrace(),
false,
context.runtime.getInstanceConfig().getBacktraceMask(),
false);
@@ -197,7 +197,7 @@ public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[]
public BacktraceData getBacktraceData(ThreadContext context, StackTraceElement[] javaTrace, boolean nativeException) {
return new BacktraceData(
javaTrace,
context.createBacktrace2(0, nativeException),
context.getBacktrace(),
false,
true,
false);