changeset 132:14281d5bd36f

minor git-svn-id: https://luan-java.googlecode.com/svn/trunk@133 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Tue, 10 Jun 2014 09:17:25 +0000
parents 15a8e6588f3c
children 98aba462c422
files src/luan/LuanBit.java src/luan/LuanException.java src/luan/interp/Closure.java src/luan/interp/ConstExpr.java src/luan/interp/ExpList.java src/luan/interp/FnCall.java src/luan/interp/LuanStateImpl.java
diffstat 7 files changed, 32 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/LuanBit.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/LuanBit.java	Tue Jun 10 09:17:25 2014 +0000
@@ -16,6 +16,21 @@
 		return new LuanException(this,msg);
 	}
 
+	public String stackTrace() {
+		StringBuilder buf = new StringBuilder();
+		LuanElement el = this.el;
+		for( int i  = luan.stackTrace.size() - 1; i>=0; i-- ) {
+			StackTraceElement stackTraceElement = luan.stackTrace.get(i);
+			buf.append( "\n\t" ).append( el.toString(stackTraceElement.fnName) );
+			el = stackTraceElement.call;
+		}
+		return buf.toString();
+	}
+
+	public void dumpStack() {
+		System.err.println( stackTrace() );
+	}
+
 	public Object call(LuanFunction fn,String fnName,Object[] args) throws LuanException {
 		List<StackTraceElement> stackTrace = luan.stackTrace;
 		stackTrace.add( new StackTraceElement(el,fnName) );
--- a/src/luan/LuanException.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/LuanException.java	Tue Jun 10 09:17:25 2014 +0000
@@ -6,7 +6,7 @@
 
 	LuanException(LuanBit bit,Object msg) {
 		super(message(msg),cause(msg));
-		stackTrace = stackTrace(bit.luan,bit.el,msg);
+		stackTrace = stackTrace(bit,msg);
 	}
 
 	@Override public String getMessage() {
@@ -35,13 +35,9 @@
 		}
 	}
 
-	private static String stackTrace(LuanState luan,LuanElement el,Object msg) {
+	private static String stackTrace(LuanBit bit,Object msg) {
 		StringBuilder buf = new StringBuilder();
-		for( int i  = luan.stackTrace.size() - 1; i>=0; i-- ) {
-			StackTraceElement stackTraceElement = luan.stackTrace.get(i);
-			buf.append( "\n\t" ).append( el.toString(stackTraceElement.fnName) );
-			el = stackTraceElement.call;
-		}
+		buf.append( bit.stackTrace() );
 		if( msg instanceof LuanException ) {
 			LuanException le = (LuanException)msg;
 			buf.append( "\ncaused by:" ).append( le.stackTrace );
--- a/src/luan/interp/Closure.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/interp/Closure.java	Tue Jun 10 09:17:25 2014 +0000
@@ -62,7 +62,6 @@
 				stack[i] = args[i];
 			}
 			Object returnValues;
-			Closure tailFn;
 			try {
 				fnDef.block.eval(luan);
 			} catch(ReturnException e) {
--- a/src/luan/interp/ConstExpr.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/interp/ConstExpr.java	Tue Jun 10 09:17:25 2014 +0000
@@ -18,4 +18,8 @@
 	@Override public Object eval(LuanStateImpl luan) {
 		return obj;
 	}
+
+	@Override public String toString() {
+		return "(ConstExpr "+obj+")";
+	}
 }
--- a/src/luan/interp/ExpList.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/interp/ExpList.java	Tue Jun 10 09:17:25 2014 +0000
@@ -121,12 +121,17 @@
 		}
 
 		@Override public Object eval(LuanStateImpl luan) throws LuanException {
+//System.out.println("SingleExpList "+expr);
 			return expr.eval(luan);
 		}
 
 		@Override public LuanSource.Element se() {
 			return expr.se();
 		}
+
+		@Override public String toString() {
+			return "(SingleExpList "+expr+")";
+		}
 	}
 
 	private final Adder[] adders;
--- a/src/luan/interp/FnCall.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/interp/FnCall.java	Tue Jun 10 09:17:25 2014 +0000
@@ -32,4 +32,8 @@
 			return call(luan,h);
 		throw luan.bit(fnExpr.se()).exception( "attempt to call '"+fnExpr.se().text()+"' (a " + Luan.type(o) + " value)" );
 	}
+
+	@Override public String toString() {
+		return "(FnCall "+fnName+" "+fnExpr+" "+args+")";
+	}
 }
--- a/src/luan/interp/LuanStateImpl.java	Tue Jun 10 04:15:19 2014 +0000
+++ b/src/luan/interp/LuanStateImpl.java	Tue Jun 10 09:17:25 2014 +0000
@@ -83,6 +83,7 @@
 	// returns stack
 	Object[] newFrame(Closure closure, int stackSize, Object[] varArgs) {
 		returnValues = LuanFunction.NOTHING;
+		tailFn = null;
 		frame = new Frame(frame,closure,stackSize,varArgs);
 		return frame.stack;
 	}