X-Git-Url: https://git.sthu.org/?p=pygdb.git;a=blobdiff_plain;f=Configuration.py;h=778afb2334a15469d08b4c1548a0fbc35256a99f;hp=7dcd2908aca58e6f9013a752c3e8af982ce85908;hb=HEAD;hpb=f2698c930f26434a100e0b4c1e4f39291b55b4f9 diff --git a/Configuration.py b/Configuration.py old mode 100755 new mode 100644 index 7dcd290..778afb2 --- a/Configuration.py +++ b/Configuration.py @@ -13,15 +13,25 @@ import StatusWindow class Configuration: def __init__(self): + self.clear() + + + def clear(self): self.breakpoints = [] self.watches = [] + self.ints = [] + self.currfile, self.currlineno = None, 0 + self.command = None def load(self, filename): try: + self.clear() + cnt = 0 #Parse all lines - for line in file(filename).readlines(): + f = file(filename, "r") + for line in f.readlines(): cnt += 1 #Get command and tail @@ -32,35 +42,60 @@ class Configuration: self.parseBreak(tail) elif cmd == "watch": self.parseWatch(tail) + elif cmd == "int": + self.parseInt(tail) + elif cmd == "currpos": + self.parseCurrpos(tail) + elif cmd == "cmd": + self.parseCommand(tail) else: cnt -= 1 print "Unkown command", cmd + f.close() return cnt + except IOError: return None + def store(self, filename): + try: + f = file(filename, "w") + + for b in self.breakpoints: + self.__writeBreak(f, b) + + for w in self.watches: + self.__writeWatch(f, w) - f = file(filename, "w") + for s in self.ints: + self.__writeInt(f, s) - for b in self.breakpoints: - self.__writeBreak(f, b) + if self.isCurrposSet(): + self.__writeCurrpos(f) + + if self.getCommand() != None: + self.__writeCommand(f) + + f.close() + return True + + except IOError: + return False - for w in self.watches: - self.__writeWatch(f, w) def parseBreak(self, tail): tail = tail.strip() - rx = re.compile("^[\w\._\-]+:\d+(\s+if\s+\S+.*)?$") + rx = re.compile("^[\w/\._\-]+:\d+(\s+if\s+\S+.*)?$") if not rx.search(tail): print "Wrong breakpoint format:", tail return - preif = string.split(tail, "if")[0].strip() - postif = string.join( string.split(tail, "if")[1:], "if").strip() + preif = string.split(tail, " if ")[0].strip() + postif = string.join( string.split(tail, " if ")[1:], " if ").strip() [file,lineno] = string.split(preif, ":") lineno = int(lineno) @@ -71,10 +106,38 @@ class Configuration: self.addBreak(file, lineno, cond) + def parseInt(self, tail): + tail.strip() + rx = re.compile("^[\w_\-]+\s+\d+$") + + if not rx.search(tail): + print "Wrong size format:", tail + return + + [name,val] = string.split(tail) + val = int(val) + self.addInt(name, val) def parseWatch(self, tail): self.addWatch(tail) + def parseCurrpos(self, tail): + + tail = tail.strip() + rx = re.compile("^[\w/\._\-]+:\d+$") + + if not rx.search(tail): + print "Wrong current position format:", tail + return + + [file,lineno] = string.split(tail, ":") + lineno = int(lineno) + + self.setCurrpos(file, lineno) + + def parseCommand(self, tail): + self.command = tail + def __writeBreak(self, f, b): if b["cond"] != None: @@ -82,18 +145,62 @@ class Configuration: else: f.write("break %(file)s:%(lineno)d\n" % b) + def __writeInt(self, f, s): + f.write("int %(name)s %(val)d\n" % s) + def __writeWatch(self, f, w): f.write("watch %(expr)s\n" % w) + def __writeCurrpos(self, f): + f.write("currpos %s:%d\n" % (self.currfile, self.currlineno)) + + def __writeCommand(self, f): + f.write("cmd %s\n" % self.command) - def addBreak(self, file, lineno, cond=None): - self.breakpoints += [ {"file" : file, "lineno" : lineno, "cond" : cond} ] + + def addBreak(self, file, lineno, cond=None): + bp = {"file" : file, "lineno" : lineno, "cond" : cond} + if not bp in self.breakpoints: + self.breakpoints += [bp] + + def addInt(self, name, val): + i = {"name": name, "val": val} + if not i in self.ints: + self.ints += [i] def addWatch(self, expr): - self.watches += [ {"expr" : expr.strip() } ] + w = {"expr" : expr.strip() } + if not w in self.watches: + self.watches += [w] + + def setCurrpos(self, file, lineno): + self.currfile, self.currlineno = file, lineno + + def isCurrposSet(self): + return self.currfile!=None + + + def delCurrpos(self): + self.currfile = None + + def setCommand(self,cmd): + self.command = cmd + + def getCommand(self): + return self.command + + def findInt(self, name): + for i in self.ints: + if i["name"] == name: + return i["val"] + return None + def __str__(self): - return "breakpoints=" + str(self.breakpoints) + ", watches=" + str(self.watches) + return "breakpoints=" + str(self.breakpoints) + \ + ", watches=" + str(self.watches) + \ + ", ints=" + str(self.ints) + \ + ", currpos=" + str((self.currfile, self.currlineno))