示例#1
0
 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()
示例#2
0
    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))
示例#3
0
 def get_mangled(self):
     demangled = self.get_signature(False)
     return itanium_mangler.mangle_function(demangled, database.get().typedefs, self.ctor_type, self.dtor_type)
示例#4
0
 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