Mercurial > codeOptimizer
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 = [] |
