Mercurial Hosting > luan
view src/luan/interp/UpValue.java @ 73:f86e4f77ef32
add package module
git-svn-id: https://luan-java.googlecode.com/svn/trunk@74 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Tue, 12 Feb 2013 09:46:45 +0000 |
parents | 8ede219cd111 |
children | 4bf3d0c0b6b9 |
line wrap: on
line source
package luan.interp; final class UpValue { private Object[] stack; private int index; private boolean isClosed = false; private Object value; UpValue(Object[] stack,int index) { this.stack = stack; this.index = index; } UpValue(Object value) { this.value = value; this.isClosed = true; } Object get() { return isClosed ? value : stack[index]; } void set(Object value) { if( isClosed ) { this.value = value; } else { stack[index] = value; } } void close() { value = stack[index]; isClosed = true; stack = null; } static interface Getter { public UpValue get(LuanStateImpl luan); } static final class StackGetter implements Getter { private final int index; StackGetter(int index) { this.index = index; } public UpValue get(LuanStateImpl luan) { return luan.getUpValue(index); } } static final class NestedGetter implements Getter { private final int index; NestedGetter(int index) { this.index = index; } public UpValue get(LuanStateImpl luan) { return luan.closure().upValues[index]; } } static final Getter globalGetter = new Getter() { public UpValue get(LuanStateImpl luan) { return new UpValue(luan.global); } }; }