comparison src/luan/LuaException.java @ 40:e3624b7cd603

implement stack trace git-svn-id: https://luan-java.googlecode.com/svn/trunk@41 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 21 Dec 2012 10:45:54 +0000
parents 8a57ebfdfd78
children 786699c78837
comparison
equal deleted inserted replaced
39:e5bcb1eeafc1 40:e3624b7cd603
1 package luan; 1 package luan;
2 2
3 3
4 public class LuaException extends Exception { 4 public class LuaException extends Exception {
5 5
6 public LuaException(String msg) { 6 public LuaException(LuaState lua,LuaElement el,String msg) {
7 super(msg); 7 super(hideNull(msg)+stackTrace(lua,el));
8 } 8 }
9 9
10 public LuaException(Exception e) { 10 public LuaException(LuaState lua,LuaElement el,Exception cause) {
11 super(e); 11 super(hideNull(cause.getMessage())+stackTrace(lua,el),cause);
12 } 12 }
13 13
14 private static String hideNull(String s) {
15 return s==null ? "" : s;
16 }
17
18 private static String stackTrace(LuaState lua,LuaElement el) {
19 StringBuilder buf = new StringBuilder();
20 int i = lua.stackTrace.size() - 1;
21 do {
22 StackTraceElement stackTraceElement = lua.stackTrace.get(i);
23 buf.append( "\n\t" ).append( el.toString(stackTraceElement.fnName) );
24 el = stackTraceElement.call;
25 } while( --i >= 0 );
26 return buf.toString();
27 }
14 } 28 }