Mercurial Hosting > luan
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 } |