def set_signature(self, name, args, return_type='void', is_const=False, ctor_type=1, dtor_type=1): signature = Method.s_make_signature(self.owner, name, args, is_const, return_type) itanium_mangler.mangle_function(signature, database.get().typedefs, ctor_type, dtor_type) # throws excption when invalid self.name = name self.args = args self.return_type = return_type self.is_const = is_const self.ctor_type = ctor_type self.dtor_type = dtor_type self.refresh()
def update_signature(self): self.return_type = self.return_type_w.text().encode( 'ascii', 'replace').strip().decode() or 'void' self.owner_type = self.owner_type_w.text().encode( 'ascii', 'replace').strip().decode() self.name = self.name_w.text().encode('ascii', 'replace').strip().decode() self.args = self.args_w.text().encode('ascii', 'replace').strip().decode() self.is_const = self.is_const_w.isChecked() self.ctor_type = self.ctor_type_w.currentIndex() + 1 self.dtor_type = self.dtor_type_w.currentIndex() # ctors and dtors shouldn't have a return type, dtors shouldn't have args if self.owner_type: owner_last_type = self.owner_type.split('::')[-1] if self.name == owner_last_type: self.return_type = '' elif self.name == '~' + owner_last_type: self.return_type = '' self.args = '' signature_segs = [] if self.return_type: signature_segs.append(self.return_type) signature_segs.append(' ') if self.owner_type: signature_segs.append(self.owner_type) signature_segs.append('::') signature_segs.append(self.name) signature_segs.append('(') signature_segs.append(self.args) signature_segs.append(')') if self.is_const: signature_segs.append(' const') self.signature = ''.join(signature_segs) self.signature_w.setText(self.signature) self.is_signature_valid = False self.mangled = None try: if not self.name or (' ' in self.name): raise ValueError('Name is invalid') self.mangled = itanium_mangler.mangle_function( self.signature, database.get().typedefs, self.ctor_type, self.dtor_type) self.is_signature_valid = True self.status = '' self.status_w.setText('Valid') except (ValueError, NotImplementedError) as e: self.status = str(e) self.status_w.setText('Invalid: ' + self.status) self.mangled_w.setText(str(self.mangled))
def get_mangled(self): demangled = self.get_signature(False) return itanium_mangler.mangle_function(demangled, database.get().typedefs, self.ctor_type, self.dtor_type)
def get_mangled(self): return itanium_mangler.mangle_function(self.get_signature(), database.get().typedefs, self.ctor_type, self.dtor_type) # throws excption when invalid