def symbol_symb(self, s): s = s.strip() if s[0] == '*': return Types.StarDes(self.stardes_symb(s)) elif parse.call_des: return Types.CallDes(self.calldes_symb(s)) return self.jumpdes_symb(s)
def jumpdes_symb(self, s): if '+' in s or '-' in s: return Types.JumpDes(s.split()[0], 16) try: return Types.CallDes(self.calldes_symb(s)) except AttributeError: return None
def jumpdes_symb(self, s): """ Parse jump destination symbol (address or label) :param s: lexeme """ if '+' in s or '-' in s: return Types.JumpDes(s.split()[0], 16) try: return Types.CallDes(self.calldes_symb(s)) except AttributeError: return None
def jmpdes_symb(self, sym): """ Parse jump destination symbol (address or label): b #0x10010 :param s: lexeme """ if sym[0] == '#': if '.' in sym: return None addr = int(sym[1:], 16) & (-2) return Types.JumpDes(addr) try: return Types.CallDes(self.calldes_symb(sym)) except: return None
def symbol_symb(self, s): """ Parse branch destination symbol :param s: lexeme """ s = s.strip() if s[0] == '*': return Types.StarDes(self.stardes_symb(s)) elif self.call_des: return Types.CallDes(self.calldes_symb(s)) return self.jumpdes_symb(s)
def symbol_symb(self, sym): """ Parse branch destination symbol :param s: lexeme """ return Types.CallDes(self.calldes_symb(sym)) if self.call_des else self.jmpdes_symb(sym)