diff options
Diffstat (limited to 'libjava/gnu/gcj/runtime/NameFinder.java')
| -rw-r--r-- | libjava/gnu/gcj/runtime/NameFinder.java | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/libjava/gnu/gcj/runtime/NameFinder.java b/libjava/gnu/gcj/runtime/NameFinder.java index 0c358368390..024a6eeb232 100644 --- a/libjava/gnu/gcj/runtime/NameFinder.java +++ b/libjava/gnu/gcj/runtime/NameFinder.java @@ -1,5 +1,5 @@ /* NameFinder.java -- Translates addresses to StackTraceElements. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2004 Free Software Foundation, Inc. This file is part of libgcj. @@ -241,8 +241,11 @@ public class NameFinder * Given an Throwable and a native stacktrace returns an array of * StackTraceElement containing class, method, file and linenumbers. */ - public StackTraceElement[] lookup(Throwable t, RawData addrs, int length) + public StackTraceElement[] lookup(Throwable t, StackTrace trace) { + RawData addrs = trace.stackTraceAddrs(); + int length = trace.length(); + StackTraceElement[] elements = new StackTraceElement[length]; for (int i=0; i < length; i++) elements[i] = lookup(addrs, i); @@ -353,6 +356,16 @@ public class NameFinder } /** + * Native helper method to create a StackTraceElement. Needed to work + * around normal Java access restrictions. + */ + native private StackTraceElement newElement(String fileName, + int lineNumber, + String className, + String methName, + boolean isNative); + + /** * Creates a StackTraceElement given a string and a filename. * Splits the given string into the class and method part. * The string name will be a demangled to a fully qualified java method @@ -363,7 +376,7 @@ public class NameFinder private StackTraceElement createStackTraceElement(String name, String file) { if (!demangle) - return new StackTraceElement(file, -1, null, name, false); + return newElement(file, -1, null, name, false); String s = demangleName(name); String methodName = s; @@ -409,7 +422,7 @@ public class NameFinder } } - return new StackTraceElement(fileName, line, className, methodName, false); + return newElement(fileName, line, className, methodName, false); } /** |

