diff src/luan/interp/Block.java @ 17:09d41f7490a8

add local variables git-svn-id: https://luan-java.googlecode.com/svn/trunk@18 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 30 Nov 2012 11:46:34 +0000
parents b7d7069fee58
children c93d8c781853
line wrap: on
line diff
--- a/src/luan/interp/Block.java	Thu Nov 29 10:36:38 2012 +0000
+++ b/src/luan/interp/Block.java	Fri Nov 30 11:46:34 2012 +0000
@@ -6,14 +6,25 @@
 
 final class Block implements Stmt {
 	private final Stmt[] stmts;
+	private final int stackStart;
+	private final int stackEnd;
 
-	Block(Stmt[] stmts) {
+	Block(Stmt[] stmts,int stackStart,int stackEnd) {
 		this.stmts = stmts;
+		this.stackStart = stackStart;
+		this.stackEnd = stackEnd;
 	}
 
 	@Override public void eval(LuaState lua) throws LuaException {
-		for( Stmt stmt : stmts ) {
-			stmt.eval(lua);
+		try {
+			for( Stmt stmt : stmts ) {
+				stmt.eval(lua);
+			}
+		} finally {
+			Object[] stack = lua.stack();
+			for( int i=stackStart; i<stackEnd; i++ ) {
+				stack[i] = null;
+			}
 		}
 	}