Mercurial Hosting > luan
diff src/luan/LuanException.java @ 1400:221eedb0f54e
fix inner class gc bug
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 13 Sep 2019 05:05:51 -0600 |
parents | e0cf0d108a77 |
children | e1a13e707bf3 |
line wrap: on
line diff
--- a/src/luan/LuanException.java Wed Sep 11 16:28:38 2019 -0600 +++ b/src/luan/LuanException.java Fri Sep 13 05:05:51 2019 -0600 @@ -86,11 +86,23 @@ return list; } - public static String toString(StackTraceElement ste) { + public static String toLuanString(StackTraceElement ste) { + int line = ste.getLineNumber(); + String method = ste.getMethodName(); + boolean hasMethod = !method.equals("doCall"); + if( hasMethod ) { + int i = method.indexOf('$'); + if( i != -1 ) { + int n = Integer.parseInt(method.substring(i+1)); + line -= n; + method = method.substring(0,i); + if( method.equals("_") ) + hasMethod = false; + } + } StringBuilder sb = new StringBuilder(); - sb.append( ste.getFileName() ).append( " line " ).append( ste.getLineNumber() ); - String method = ste.getMethodName(); - if( !method.equals("doCall") ) + sb.append( ste.getFileName() ).append( " line " ).append( line ); + if( hasMethod ) sb.append( " in function '" ).append( method.substring(1) ).append( "'" ); return sb.toString(); } @@ -99,7 +111,7 @@ StringBuilder sb = new StringBuilder(); sb.append( getMessage() ); for( StackTraceElement ste : justLuan(getStackTrace()) ) { - sb.append( "\n\t" ).append( toString(ste) ); + sb.append( "\n\t" ).append( toLuanString(ste) ); } return sb; } @@ -111,13 +123,7 @@ sb.append( "\nCaused by: " ).append( getJavaStackTraceString(cause) ); return sb.toString(); } -/* - public static String currentSource() { - LuanException ex = new LuanException("currentSource"); - List<StackTraceElement> st = ex.justLuan(ex.getStackTrace()); - return st.isEmpty() ? null : st.get(0).getFileName(); - } -*/ + @Override public void printStackTrace(PrintStream s) { s.print("Luan: "); s.println(luanStackTrace());