Mercurial Hosting > luan
annotate src/luan/LuanException.java @ 1122:e15be31cee92
remove LuanException.getFullMessage()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 14 Aug 2017 17:00:37 -0600 |
parents | 4cf541886663 |
children | 442abdfff437 |
rev | line source |
---|---|
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1 package luan; |
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
200
9fb218211763
add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
3 import java.io.StringWriter; |
9fb218211763
add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
4 import java.io.PrintWriter; |
682 | 5 import java.util.List; |
6 import java.util.ArrayList; | |
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 |
200
9fb218211763
add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
8 |
781
fbbdd369a13a
rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents:
775
diff
changeset
|
9 public final class LuanException extends Exception implements LuanCloneable { |
689 | 10 private LuanTable table; |
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
11 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
12 public LuanException(String msg,Throwable cause) { |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
200
diff
changeset
|
13 super(msg,cause); |
42
786699c78837
implement try-catch
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
14 } |
786699c78837
implement try-catch
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
15 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
16 public LuanException(String msg) { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
17 super(msg); |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
18 } |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
19 |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
20 public LuanException(Throwable cause) { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
21 super(cause); |
689 | 22 } |
23 | |
24 private LuanException(String msg,Throwable cause,int nonsense) { | |
25 super(msg,cause); | |
26 } | |
27 | |
784
6a7c6879158d
revert shallowClone()
Franklin Schmidt <fschmidt@gmail.com>
parents:
783
diff
changeset
|
28 @Override public LuanException shallowClone() { |
689 | 29 return new LuanException(getMessage(),getCause(),99); |
30 } | |
31 | |
781
fbbdd369a13a
rename DeepCloner to LuanCloner
Franklin Schmidt <fschmidt@gmail.com>
parents:
775
diff
changeset
|
32 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { |
689 | 33 LuanException clone = (LuanException)dc; |
782
655280eab1e2
start limited cloning
Franklin Schmidt <fschmidt@gmail.com>
parents:
781
diff
changeset
|
34 clone.table = (LuanTable)cloner.clone(table); |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
35 } |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
36 |
682 | 37 public LuanTable table() { |
783 | 38 if( table==null ) { |
39 table = new LuanTable(); | |
40 table.rawPut( "java", this ); | |
41 LuanTable metatable = new LuanTable(); | |
42 table.setMetatable(metatable); | |
43 try { | |
44 table.rawPut( "get_message", new LuanJavaFunction( | |
45 LuanException.class.getMethod( "getMessage" ), this | |
46 ) ); | |
47 table.rawPut( "throw", new LuanJavaFunction( | |
48 LuanException.class.getMethod( "throwThis" ), this | |
49 ) ); | |
1122
e15be31cee92
remove LuanException.getFullMessage()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1121
diff
changeset
|
50 table.rawPut( "get_stack_trace_string", new LuanJavaFunction( |
e15be31cee92
remove LuanException.getFullMessage()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1121
diff
changeset
|
51 LuanException.class.getMethod( "getLuanStackTraceString" ), this |
e15be31cee92
remove LuanException.getFullMessage()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1121
diff
changeset
|
52 ) ); |
783 | 53 table.rawPut( "get_java_stack_trace_string", new LuanJavaFunction( |
54 LuanException.class.getMethod( "getJavaStackTraceString" ), this | |
55 ) ); | |
56 metatable.rawPut( "__to_string", new LuanJavaFunction( | |
1121
4cf541886663
check for too many arguments to java fns
Franklin Schmidt <fschmidt@gmail.com>
parents:
784
diff
changeset
|
57 LuanException.class.getMethod( "__to_string", LuanTable.class ), this |
783 | 58 ) ); |
59 } catch(NoSuchMethodException e) { | |
60 throw new RuntimeException(e); | |
61 } | |
62 } | |
689 | 63 return table; |
64 } | |
65 | |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
200
diff
changeset
|
66 public void throwThis() throws LuanException { |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
200
diff
changeset
|
67 throw this; |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
200
diff
changeset
|
68 } |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
200
diff
changeset
|
69 |
1121
4cf541886663
check for too many arguments to java fns
Franklin Schmidt <fschmidt@gmail.com>
parents:
784
diff
changeset
|
70 public String __to_string(LuanTable ignore) { |
682 | 71 return getLuanStackTraceString(); |
72 } | |
73 | |
74 public String getJavaStackTraceString() { | |
75 return getJavaStackTraceString(this); | |
76 } | |
77 | |
78 private static String getJavaStackTraceString(Throwable th) { | |
645 | 79 StringWriter sw = new StringWriter(); |
682 | 80 th.printStackTrace(new PrintWriter(sw)); |
645 | 81 return sw.toString(); |
37
8a57ebfdfd78
add JavaLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
2
diff
changeset
|
82 } |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
200
diff
changeset
|
83 |
772
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
84 public static List<StackTraceElement> justLuan(StackTraceElement[] orig) { |
682 | 85 List<StackTraceElement> list = new ArrayList<StackTraceElement>(); |
86 for( int i=0; i<orig.length; i++ ) { | |
87 StackTraceElement ste = orig[i]; | |
88 if( !ste.getClassName().startsWith("luan.impl.EXP") ) | |
89 continue; | |
90 list.add(ste); | |
91 if( !ste.getMethodName().equals("doCall") ) | |
92 i++; | |
93 } | |
94 return list; | |
95 } | |
96 | |
772
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
97 public static String toString(StackTraceElement ste) { |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
98 StringBuilder sb = new StringBuilder(); |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
99 sb.append( ste.getFileName() ).append( " line " ).append( ste.getLineNumber() ); |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
100 String method = ste.getMethodName(); |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
101 if( !method.equals("doCall") ) |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
102 sb.append( " in function '" ).append( method.substring(1) ).append( "'" ); |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
103 return sb.toString(); |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
104 } |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
105 |
682 | 106 public String getLuanStackTraceString() { |
107 StringBuilder sb = new StringBuilder(); | |
108 sb.append( getMessage() ); | |
772
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
109 for( StackTraceElement ste : justLuan(getStackTrace()) ) { |
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
110 sb.append( "\n\t" ).append( toString(ste) ); |
682 | 111 } |
112 Throwable cause = getCause(); | |
113 if( cause != null ) | |
114 sb.append( "\nCaused by: " ).append( getJavaStackTraceString(cause) ); | |
115 return sb.toString(); | |
116 } | |
117 | |
683 | 118 public static String currentSource() { |
119 LuanException ex = new LuanException("currentSource"); | |
772
bffbef96ca6d
add public static methods to LuanException for building luan stack traces
Franklin Schmidt <fschmidt@gmail.com>
parents:
693
diff
changeset
|
120 List<StackTraceElement> st = ex.justLuan(ex.getStackTrace()); |
683 | 121 return st.isEmpty() ? null : st.get(0).getFileName(); |
122 } | |
123 | |
1
2df768b926aa
start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
124 } |