forked from runtimeverification/python-semantics
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtesteval2.py
More file actions
26 lines (21 loc) · 713 Bytes
/
Copy pathtesteval2.py
File metadata and controls
26 lines (21 loc) · 713 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
a = {}
assert eval("globals()", a) is a
assert eval("locals()", a) is a
assert eval("globals()") is globals()
assert eval("locals()") is locals()
assert eval("globals()", None, a) is globals()
assert eval("locals()", None, a) is a
b = {}
assert eval("globals()", a, b) is a
assert eval("locals()", a, b) is b
c = {"__builtins__" : {"int": 5, "eval": eval, "globals": globals}}
assert eval("int", c) == 5
assert eval("(lambda: int)()", c) == 5
assert eval("eval(\"int\")", c) == 5
assert eval("globals().get(\"int\")", c) is None
class A:
def keys(self): return ()
def __getitem__(self, val): raise KeyError
assert eval("locals()", None, A()).__class__ is A
def a(): return 5
assert eval(a.__code__) == 5