-
Notifications
You must be signed in to change notification settings - Fork 1
/
ast_transform.py
64 lines (41 loc) · 1.41 KB
/
ast_transform.py
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import ast
class Transformer(ast.NodeTransformer):
def __init__(self,changelist,callname):
self.changelist = changelist
self.callname = callname
self.calllist = []
self.namedic = {}
self.calldic = {}
def handle_call(self):
for item in self.callname:
self.calllist.append((item[1],item[2]))
for item in self.changelist:
postup = (item[1],item[2])
if postup in self.calllist:
self.calldic[postup] = item[0]
else:
self.namedic[postup] =item[0]
def visit_Call(self, node):
if isinstance(node.func, ast.Attribute):
pass
else:
postup = (node.lineno,node.col_offset)
if postup in self.calldic:
node = ast.parse(self.calldic[postup]).body[0].value
self.generic_visit(node)
return node
def visit_Name(self, node):
self.generic_visit(node)
postup = (node.lineno,node.col_offset)
if postup in self.namedic.keys():
if "(" in self.namedic[postup]:
# print(postup)
node = ast.parse(self.namedic[postup]).body[0].value
else:
node.id = self.namedic[postup]
return node
def transform(translist,myast):
trans = Transformer(translist)
newast = trans.visit(myast)
program = ast.unparse(newast)
return program