Ejemplo n.º 1
0
    def index_compinfo(self, fid, compinfo):
        filename = self.capp.get_file_by_index(fid).name
        ckey = compinfo.get_ckey()
        cname = compinfo.get_name()
        if self.is_hidden_struct(filename, cname):
            logging.info('Hide struct ' + cname + ' in file ' + filename)
            return self.get_opaque_struct()
        gcompinfo = self.get_gcompinfo(fid, ckey)
        if not gcompinfo is None:
            return gcompinfo
        self.pending.append(compinfo.get_ckey())
        tags = ['?']
        fields = [self.index_fieldinfo(f, cname) for f in compinfo.fields]
        args = [-1, 1 if compinfo.isstruct else 0, -1] + fields
        key = (','.join(tags), ','.join([str(x) for x in args]))
        if ckey in self.reserved:
            gckey = self.reserved[ckey]
            gcompinfo = CCompInfo(self, gckey, tags, args)
            self.compinfo_table.commit_reserved(gckey, key, gcompinfo)
            self.reserved.pop(ckey)
            if not gckey in self.compinfo_names:
                self.compinfo_names[gckey] = set([])
            self.compinfo_names[gckey].add(compinfo.get_name())
            self.register_gcompinfo(fid, ckey, gcompinfo)
            return gcompinfo

        def f(index, key):
            if not index in self.compinfo_names:
                self.compinfo_names[index] = set([])
            self.compinfo_names[index].add(compinfo.get_name())
            return CCompInfo(self, index, tags, args)

        compinfoindex = self.compinfo_table.add(key, f)
        gcompinfo = self.get_compinfo(compinfoindex)
        if ckey in self.conjectured:
            conjecturedkey = self.conjectured[ckey]
            gckey = gcompinfo.get_ckey()
            if gckey == conjecturedkey:
                self.ckey2gckey[fid][ckey] = gcompinfo.get_ckey()
                self.conjectured.pop(ckey)
                return gcompinfo
            else:
                logging.info('Conjecture failure for ' + compinfo.get_name() +
                             ' (fid:' + str(fid) + ', ckey:' + str(ckey) +
                             ', gckey: ' + str(gckey) + ', conjectured key: ' +
                             str(conjecturedkey) + ')')
                raise ConjectureFailure(ckey, conjecturedkey)
        else:
            self.register_gcompinfo(fid, ckey, gcompinfo)
            self.pending.remove(compinfo.get_ckey())
            return gcompinfo
Ejemplo n.º 2
0
 def get_value(node):
     rep = IT.get_rep(node)
     args = (self,) + rep
     return CCompInfo(*args)
Ejemplo n.º 3
0
 def f(index, key):
     if not index in self.compinfo_names:
         self.compinfo_names[index] = set([])
     self.compinfo_names[index].add(compinfo.get_name())
     return CCompInfo(self, index, tags, args)
Ejemplo n.º 4
0
 def f(index, key):
     if not index in self.compinfo_names:
         self.compinfo_names[index] = set([])
     self.compinfo_names[index].add('opaque-struct')
     return CCompInfo(self, index, tags, args)
Ejemplo n.º 5
0
 def get_value(node: ET.Element) -> CCompInfo:
     rep = IT.get_rep(node)
     args = (self, ) + rep
     return CCompInfo(*args)
 def f(index: int, key: Tuple[str, str]) -> CCompInfo:
     if index not in self.compinfo_names:
         self.compinfo_names[index] = set([])
     self.compinfo_names[index].add("opaque-struct")
     return CCompInfo(self, index, tags, args)