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
def get_value(node): rep = IT.get_rep(node) args = (self,) + rep return CCompInfo(*args)
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)
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)
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)