Skip to content

Commit e99e0c0

Browse files
committed
Add python script to refactor most calls to deleteInstance (#870)
1 parent 696cb63 commit e99e0c0

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# Created with python 3.11.4
2+
3+
import glob
4+
import os
5+
6+
7+
def modifyLine(line: str) -> str:
8+
if 'friend_deleteInstance()' in line:
9+
return line
10+
11+
deleteInstanceBegin = line.find('deleteInstance()')
12+
deleteInstanceEnd = deleteInstanceBegin + len('deleteInstance()')
13+
if deleteInstanceBegin >= 0:
14+
i = deleteInstanceBegin
15+
16+
# Skip MemoryPoolObject::deleteInstance()
17+
if i >= 2 and line[i-2:i] == '::':
18+
return line
19+
20+
# Skip void deleteInstance()
21+
if i >= 5 and line[i-5:i] == 'void ':
22+
return line
23+
24+
# Skip void friend_deleteInstance()
25+
if i >= 5 and line[i-5:i] == 'void ':
26+
return line
27+
28+
# Walk back to object end
29+
i -= 1
30+
while i >= 0:
31+
ch = line[i]
32+
if ch != '>' and ch != '-' and not ch.isspace():
33+
break
34+
i -= 1
35+
objectEnd = i + 1
36+
37+
# Walk back to object begin
38+
while i >= 0:
39+
ch = line[i]
40+
if ch.isspace() or ch == '{' or ch == '}':
41+
break
42+
i -= 1
43+
objectBegin = i + 1
44+
objectName = line[objectBegin:objectEnd]
45+
46+
if objectName:
47+
lineCopy = line[:objectBegin]
48+
lineCopy += f'MemoryPoolObject::deleteInstance({objectName})'
49+
lineCopy += line[deleteInstanceEnd:]
50+
return lineCopy
51+
else:
52+
lineCopy = line[:deleteInstanceBegin]
53+
lineCopy += 'MemoryPoolObject::deleteInstance(this)'
54+
lineCopy += line[deleteInstanceEnd:]
55+
return lineCopy
56+
57+
return line
58+
59+
60+
def main():
61+
current_dir = os.path.dirname(os.path.abspath(__file__))
62+
root_dir = os.path.join(current_dir, "..", "..")
63+
root_dir = os.path.normpath(root_dir)
64+
core_dir = os.path.join(root_dir, "Core")
65+
generals_dir = os.path.join(root_dir, "Generals")
66+
generalsmd_dir = os.path.join(root_dir, "GeneralsMD")
67+
fileNames = []
68+
fileNames.extend(glob.glob(os.path.join(core_dir, '**', '*.h'), recursive=True))
69+
fileNames.extend(glob.glob(os.path.join(core_dir, '**', '*.cpp'), recursive=True))
70+
fileNames.extend(glob.glob(os.path.join(core_dir, '**', '*.inl'), recursive=True))
71+
fileNames.extend(glob.glob(os.path.join(generals_dir, '**', '*.h'), recursive=True))
72+
fileNames.extend(glob.glob(os.path.join(generals_dir, '**', '*.cpp'), recursive=True))
73+
fileNames.extend(glob.glob(os.path.join(generals_dir, '**', '*.inl'), recursive=True))
74+
fileNames.extend(glob.glob(os.path.join(generalsmd_dir, '**', '*.h'), recursive=True))
75+
fileNames.extend(glob.glob(os.path.join(generalsmd_dir, '**', '*.cpp'), recursive=True))
76+
fileNames.extend(glob.glob(os.path.join(generalsmd_dir, '**', '*.inl'), recursive=True))
77+
78+
for fileName in fileNames:
79+
with open(fileName, 'r', encoding="cp1252") as file:
80+
try:
81+
lines = file.readlines()
82+
except UnicodeDecodeError:
83+
continue # Not good.
84+
with open(fileName, 'w', encoding="cp1252") as file:
85+
for line in lines:
86+
line = modifyLine(line)
87+
file.write(line)
88+
89+
return
90+
91+
92+
if __name__ == "__main__":
93+
main()

0 commit comments

Comments
 (0)