Mercurial Hosting > luan
comparison src/luan/LuanState.java @ 1330:f41919741100
fix security
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 11 Feb 2019 01:38:55 -0700 |
parents | 503bde9a7c80 |
children |
comparison
equal
deleted
inserted
replaced
1329:5a39b006acd1 | 1330:f41919741100 |
---|---|
18 | 18 |
19 | 19 |
20 public final class LuanState implements LuanCloneable { | 20 public final class LuanState implements LuanCloneable { |
21 private static final Logger logger = LoggerFactory.getLogger(LuanState.class); | 21 private static final Logger logger = LoggerFactory.getLogger(LuanState.class); |
22 | 22 |
23 public LuanJavaOk javaOk; | 23 private final List<LuanClosure> stack = new ArrayList<LuanClosure>(); |
24 private Map registry; | 24 private Map registry; |
25 public boolean isLocked = false; | 25 public boolean isLocked = false; |
26 | 26 |
27 public interface OnClose extends Closeable { | 27 public interface OnClose extends Closeable { |
28 public void onClose(Closeable c); | 28 public void onClose(Closeable c); |
29 } | 29 } |
30 public OnClose onClose; | 30 public OnClose onClose; |
31 | 31 |
32 public LuanState() { | 32 public LuanState() { |
33 javaOk = new LuanJavaOk(); | |
34 registry = new HashMap(); | 33 registry = new HashMap(); |
35 } | 34 } |
36 | 35 |
37 private LuanState(LuanState luan) {} | 36 private LuanState(LuanState luan) {} |
38 | 37 |
41 } | 40 } |
42 | 41 |
43 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { | 42 @Override public void deepenClone(LuanCloneable dc,LuanCloner cloner) { |
44 LuanState clone = (LuanState)dc; | 43 LuanState clone = (LuanState)dc; |
45 clone.registry = cloner.clone(registry); | 44 clone.registry = cloner.clone(registry); |
46 clone.javaOk = (LuanJavaOk)cloner.clone(javaOk); | |
47 if( cloner.type == LuanCloner.Type.INCREMENTAL ) | 45 if( cloner.type == LuanCloner.Type.INCREMENTAL ) |
48 isLocked = true; | 46 isLocked = true; |
47 } | |
48 | |
49 public LuanClosure peek() { | |
50 return peek(1); | |
51 } | |
52 | |
53 public LuanClosure peek(int i) { | |
54 int n = stack.size(); | |
55 return n < i ? null : stack.get(n-i); | |
56 } | |
57 | |
58 void push(LuanClosure closure) { | |
59 stack.add(closure); | |
60 } | |
61 | |
62 void pop() { | |
63 stack.remove(stack.size()-1); | |
49 } | 64 } |
50 | 65 |
51 public Map registry() { | 66 public Map registry() { |
52 return registry; | 67 return registry; |
53 } | 68 } |
82 public Object index(Object obj,Object key) throws LuanException { | 97 public Object index(Object obj,Object key) throws LuanException { |
83 if( obj instanceof LuanTable ) { | 98 if( obj instanceof LuanTable ) { |
84 LuanTable tbl = (LuanTable)obj; | 99 LuanTable tbl = (LuanTable)obj; |
85 return tbl.get(key); | 100 return tbl.get(key); |
86 } | 101 } |
87 if( obj != null && javaOk.ok ) | 102 if( obj != null && peek().javaOk ) |
88 return JavaLuan.__index(this,obj,key); | 103 return JavaLuan.__index(this,obj,key); |
89 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" ); | 104 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" ); |
90 } | 105 } |
91 | 106 |
92 /* | 107 /* |