diff src/luan/interp/ExpList.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 5cf15507d77e
children 64ecb7a3aad7
line wrap: on
line diff
--- a/src/luan/interp/ExpList.java	Thu Dec 20 02:54:06 2012 +0000
+++ b/src/luan/interp/ExpList.java	Fri Dec 21 10:45:54 2012 +0000
@@ -4,12 +4,14 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import luan.LuaException;
+import luan.LuaSource;
 
 
 final class ExpList implements Expressions {
 
 	private interface Adder {
 		public void addTo(LuaStateImpl lua,List<Object> list) throws LuaException;
+		public Code code();
 	}
 
 	private static class ExprAdder implements Adder {
@@ -23,6 +25,10 @@
 			list.add( expr.eval(lua) );
 		}
 
+		public Code code() {
+			return expr;
+		}
+
 	}
 
 	private static class ExpressionsAdder implements Adder {
@@ -38,6 +44,10 @@
 			}
 		}
 
+		public Code code() {
+			return expressions;
+		}
+
 	}
 
 	static class Builder {
@@ -70,9 +80,14 @@
 	private static final Object[] EMPTY = new Object[0];
 
 	static final Expressions emptyExpList = new Expressions() {
+
 		@Override public Object[] eval(LuaStateImpl lua) {
 			return EMPTY;
 		}
+
+		@Override public LuaSource.Element se() {
+			return null;
+		}
 	};
 
 	static class SingleExpList implements Expressions {
@@ -85,6 +100,10 @@
 		@Override public Object[] eval(LuaStateImpl lua) throws LuaException {
 			return new Object[]{expr.eval(lua)};
 		}
+
+		@Override public LuaSource.Element se() {
+			return expr.se();
+		}
 	}
 
 	private final Adder[] adders;
@@ -100,4 +119,8 @@
 		}
 		return list.toArray();
 	}
+
+	@Override public LuaSource.Element se() {
+		return new LuaSource.Element(adders[0].code().se().source,adders[0].code().se().start,adders[adders.length-1].code().se().end);
+	}
 }