comparison Compilable.py @ 1:a1224150b8f6

Cleanup and making code easier to read.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Sun, 16 Sep 2012 10:35:39 +0200
parents 28b636105ed6
children 3a56cd936c59
comparison
equal deleted inserted replaced
0:28b636105ed6 1:a1224150b8f6
32 self.flags = flags 32 self.flags = flags
33 33
34 def worksWithoutModifications(self): 34 def worksWithoutModifications(self):
35 return tryCompileFile(self.path, 'g++', self.flags) 35 return tryCompileFile(self.path, 'g++', self.flags)
36 36
37 def activeBuffer(self): 37 def activeBuffer(self, replace):
38 self.loadFile() 38 self.loadFile()
39 str = '' 39 str = ''
40 for i in range(len(self.lines)): 40 for i in range(len(self.lines)):
41 if not i in self.replace: 41 if not i in replace:
42 str += self.lines[i] 42 str += self.lines[i]
43 else: 43 else:
44 str += self.replace[i] 44 str += replace[i]
45 return str 45 return str
46 46
47 def works(self): 47 def works(self, replace):
48 return tryCompileBuffer(self.activeBuffer(), 'g++', self.flags) 48 return tryCompileBuffer(self.activeBuffer(replace), 'g++', self.flags)
49
50 def deactivateLine(self, i):
51 self.replace[i] = "\n"
52
53 def activateLine(self, i):
54 del self.replace[i]
55 49
56 def loadFile(self): 50 def loadFile(self):
57 if self.lines == None: 51 if self.lines == None:
58 f = open(self.path, 'r') 52 f = open(self.path, 'r')
59 self.lines = f.readlines() 53 self.lines = f.readlines()
60 f.close() 54 f.close()
61 self.replace = {}
62 55
63 def includeLines(self): 56 def includeLines(self):
64 self.loadFile() 57 self.loadFile()
65 pattern = '^\s*#include ' 58 pattern = '^\s*#include '
66 prog = re.compile(pattern) 59 prog = re.compile(pattern)
71 return res 64 return res
72 65
73 def removeRemovableIncludes(self): 66 def removeRemovableIncludes(self):
74 l = self.includeLines() 67 l = self.includeLines()
75 retVal = [] 68 retVal = []
69 replace = {}
76 for n in l: 70 for n in l:
77 self.deactivateLine(n) 71 replace[n] = '\n'
78 print 'Trying to compile ' + self.path + ' without ' + self.getPathname(self.lines[n]) 72 print 'Trying to compile ' + self.path + ' without ' + self.getPathname(self.lines[n])
79 if self.works(): 73 if self.works(replace):
80 retVal.append(n) 74 retVal.append(n)
81 else: 75 else:
82 self.activateLine(n) 76 del replace[n]
83 77
84 return retVal 78 return retVal
85 79
86 @staticmethod 80 @staticmethod
87 def getPathname(str): 81 def getPathname(str):
106 m = prog.search(filename) 100 m = prog.search(filename)
107 basename = m.group(0) 101 basename = m.group(0)
108 102
109 return basename 103 return basename
110 104
111 def replaceIncludes(self): 105 def replaceIncludes(self, replace):
112 l = self.includeLines() 106 l = self.includeLines()
113 retVal = [] 107 retVal = []
114 for n in l: 108 for n in l:
115 if n not in self.replace: 109 if n not in replace:
116 rstring = 'class ' + self.getClassname(self.lines[n]) + ';\n' 110 rstring = 'class ' + self.getClassname(self.lines[n]) + ';\n'
117 self.replace[n] = rstring 111 replace[n] = rstring
118 if self.works(): 112 if self.works(replace):
119 retVal.append(n) 113 retVal.append(n)
120 else: 114 else:
121 self.activateLine(n) 115 del replace[n]
122 return retVal 116 return retVal
123 117
124 def dependencies(self): 118 def dependencies(self):
125 lines = self.includeLines() 119 lines = self.includeLines()
126 retVal = [] 120 retVal = []