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());