comparison 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
comparison
equal deleted inserted replaced
1399:38a1c1b4279a 1400:221eedb0f54e
84 i++; 84 i++;
85 } 85 }
86 return list; 86 return list;
87 } 87 }
88 88
89 public static String toString(StackTraceElement ste) { 89 public static String toLuanString(StackTraceElement ste) {
90 int line = ste.getLineNumber();
91 String method = ste.getMethodName();
92 boolean hasMethod = !method.equals("doCall");
93 if( hasMethod ) {
94 int i = method.indexOf('$');
95 if( i != -1 ) {
96 int n = Integer.parseInt(method.substring(i+1));
97 line -= n;
98 method = method.substring(0,i);
99 if( method.equals("_") )
100 hasMethod = false;
101 }
102 }
90 StringBuilder sb = new StringBuilder(); 103 StringBuilder sb = new StringBuilder();
91 sb.append( ste.getFileName() ).append( " line " ).append( ste.getLineNumber() ); 104 sb.append( ste.getFileName() ).append( " line " ).append( line );
92 String method = ste.getMethodName(); 105 if( hasMethod )
93 if( !method.equals("doCall") )
94 sb.append( " in function '" ).append( method.substring(1) ).append( "'" ); 106 sb.append( " in function '" ).append( method.substring(1) ).append( "'" );
95 return sb.toString(); 107 return sb.toString();
96 } 108 }
97 109
98 private StringBuilder luanStackTrace() { 110 private StringBuilder luanStackTrace() {
99 StringBuilder sb = new StringBuilder(); 111 StringBuilder sb = new StringBuilder();
100 sb.append( getMessage() ); 112 sb.append( getMessage() );
101 for( StackTraceElement ste : justLuan(getStackTrace()) ) { 113 for( StackTraceElement ste : justLuan(getStackTrace()) ) {
102 sb.append( "\n\t" ).append( toString(ste) ); 114 sb.append( "\n\t" ).append( toLuanString(ste) );
103 } 115 }
104 return sb; 116 return sb;
105 } 117 }
106 118
107 public String getLuanStackTraceString() { 119 public String getLuanStackTraceString() {
109 Throwable cause = getCause(); 121 Throwable cause = getCause();
110 if( cause != null ) 122 if( cause != null )
111 sb.append( "\nCaused by: " ).append( getJavaStackTraceString(cause) ); 123 sb.append( "\nCaused by: " ).append( getJavaStackTraceString(cause) );
112 return sb.toString(); 124 return sb.toString();
113 } 125 }
114 /* 126
115 public static String currentSource() {
116 LuanException ex = new LuanException("currentSource");
117 List<StackTraceElement> st = ex.justLuan(ex.getStackTrace());
118 return st.isEmpty() ? null : st.get(0).getFileName();
119 }
120 */
121 @Override public void printStackTrace(PrintStream s) { 127 @Override public void printStackTrace(PrintStream s) {
122 s.print("Luan: "); 128 s.print("Luan: ");
123 s.println(luanStackTrace()); 129 s.println(luanStackTrace());
124 s.print("Caused by: "); 130 s.print("Caused by: ");
125 super.printStackTrace(s); 131 super.printStackTrace(s);