Mercurial Hosting > luan
view src/luan/interp/UpValue.java @ 32:c3eab5a3ce3c
implement closures
git-svn-id: https://luan-java.googlecode.com/svn/trunk@33 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 14 Dec 2012 05:40:35 +0000 |
parents | |
children | 0cdc1da466ee |
line wrap: on
line source
package luan.interp; final class UpValue { private Object[] stack; private int index; UpValue(Object[] stack,int index) { this.stack = stack; this.index = index; } Object get() { return stack[index]; } void set(Object value) { stack[index] = value; } void close() { stack = new Object[]{get()}; index = 0; } static interface Getter { public UpValue get(LuaStateImpl lua); } static final class StackGetter implements Getter { private final int index; StackGetter(int index) { this.index = index; } public UpValue get(LuaStateImpl lua) { return lua.getUpValue(index); } } static final class NestedGetter implements Getter { private final int index; NestedGetter(int index) { this.index = index; } public UpValue get(LuaStateImpl lua) { return lua.closure().upValues[index]; } } }