def get_enumeration(self, tr_type): """Lookup enumerations for translator type. Returns dictionary indexed by integer values, eg. {0x0: 'UNDEFINDED'}. """ if tr_type in self.enumerations.keys(): # Cast values to integer and return dictionary. return dict([ (binutils.integer(value), key) for key, value in self.enumerations.get(tr_type).items() ]) return {}
def translate(self, node, values): """Translate by *node* type. Define methods named tr_<type> to extend type translations. Attribute *values* is a list of values to be passed to the translatior method. """ if isinstance(values, int): values = [ values, ] values = [binutils.integer(value) for value in values] params = node.getParameters() tr_type = params.setdefault(self.type_key, self.tr_type_default) # Enumerations. enums = self.get_enumeration(tr_type) if values[0] in enums.keys(): return enums[values[0]] # Use method to convert values. return (self.get_translator(tr_type) or self.get_translator(self.tr_type_default))(node, values)
def hexstr(self, value): """Returns hex formatted string of attribute *value* with leading zeros according to data width.""" return '{0:0{1}x}'.format( binutils.integer(value) & self.bitmask, self.charcount)
def binstr(self, value): """Returns binary formatted string of attribute *value* with leading zeros according to data width.""" return '{0:0{1}b}'.format( binutils.integer(value) & self.bitmask, self.width)