Mercurial Hosting > luan
comparison core/src/luan/impl/LuanStateImpl.java @ 194:08df375e2e5f
remove EnvGetter
git-svn-id: https://luan-java.googlecode.com/svn/trunk@195 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Wed, 02 Jul 2014 04:52:25 +0000 |
parents | 3dcb0f9bee82 |
children | 24ede40ee0aa |
comparison
equal
deleted
inserted
replaced
193:66ed8886abc0 | 194:08df375e2e5f |
---|---|
55 } | 55 } |
56 | 56 |
57 private Frame frame = null; | 57 private Frame frame = null; |
58 Object returnValues; | 58 Object returnValues; |
59 Closure tailFn; | 59 Closure tailFn; |
60 Map<UpValue.EnvGetter,UpValue> envs = new HashMap<UpValue.EnvGetter,UpValue>(); | |
61 | 60 |
62 LuanStateImpl() {} | 61 LuanStateImpl() {} |
63 | 62 |
64 private LuanStateImpl(LuanStateImpl luan) { | 63 private LuanStateImpl(LuanStateImpl luan) { |
65 super(luan); | 64 super(luan); |
67 | 66 |
68 @Override public LuanState shallowClone() { | 67 @Override public LuanState shallowClone() { |
69 // if( frame != null ) | 68 // if( frame != null ) |
70 // throw new IllegalStateException("frame isn't null"); | 69 // throw new IllegalStateException("frame isn't null"); |
71 return new LuanStateImpl(this); | 70 return new LuanStateImpl(this); |
72 } | |
73 | |
74 @Override public void deepenClone(LuanState clone,DeepCloner cloner) { | |
75 super.deepenClone(clone,cloner); | |
76 LuanStateImpl cloneImpl = (LuanStateImpl)clone; | |
77 cloneImpl.envs = new HashMap<UpValue.EnvGetter,UpValue>(); | |
78 for( Map.Entry<UpValue.EnvGetter,UpValue> entry : envs.entrySet() ) { | |
79 cloneImpl.envs.put( entry.getKey(), cloner.deepClone(entry.getValue()) ); | |
80 } | |
81 } | 71 } |
82 | 72 |
83 // returns stack | 73 // returns stack |
84 Object[] newFrame(Closure closure, int stackSize, Object[] varArgs) { | 74 Object[] newFrame(Closure closure, int stackSize, Object[] varArgs) { |
85 returnValues = LuanFunction.NOTHING; | 75 returnValues = LuanFunction.NOTHING; |
116 | 106 |
117 UpValue getUpValue(int index) { | 107 UpValue getUpValue(int index) { |
118 return frame.getUpValue(index); | 108 return frame.getUpValue(index); |
119 } | 109 } |
120 | 110 |
121 UpValue getUpValue(UpValue.EnvGetter getter) throws LuanException { | |
122 UpValue uv = envs.get(getter); | |
123 if( uv == null ) { | |
124 LuanTable env = new LuanTable(); | |
125 uv = new UpValue(env); | |
126 envs.put(getter,uv); | |
127 } | |
128 return uv; | |
129 } | |
130 | |
131 @Override public LuanTable currentEnvironment() { | 111 @Override public LuanTable currentEnvironment() { |
132 if( frame==null ) | 112 if( frame==null ) |
133 return null; | 113 return null; |
134 return (LuanTable)frame.closure.upValues()[0].get(); | 114 return (LuanTable)frame.closure.upValues()[0].get(); |
135 } | 115 } |