Mercurial Hosting > luan
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); |