def newfn(*args, **kwargs): hh = hf(getattr(casa, fn.__name__), *args, **kwargs) mm = repo.get(hh) if mm: trc("[Cached]", fn.__name__, args, kwargs) return mm else: trc("[Eval] ", fn.__name__, args, kwargs, " -> ", hh) tempf = fn(*args, **kwargs) if not os.path.exists(tempf): raise RuntimeError("No output produced by " + fn.__name__ + "!") return repo.put(tempf, hh)
def php_line_number_from_repo(func, pc): unit = func['m_unit'] repo_id = unit['m_repoId'] sn = int(unit['m_sn']) conn = repo.get(repo_id) if conn is None: return None # Query for the line table. c = conn.cursor() table = repo.table('UnitLineTable') c.execute('SELECT data FROM %s WHERE unitSn == ?;' % table, (sn,)) row = c.fetchone() if row is None: return None buf = row[0] # Unpack the line table structure. line_table = [] decoder = repo.Decoder(buf) size = decoder.decode() for i in xrange(size): line_table.append({ 'm_pastOffset': decoder.decode(), 'm_val': decoder.decode(), }) if not decoder.finished(): # Something went wrong. return None # Find the upper bound for our PC. Note that this relies on the Python # dict comparison operator comparing componentwise lexicographically based # on the alphabetical ordering of keys. key = {'m_pastOffset': int(pc), 'm_val': -1} i = bisect.bisect_right(line_table, key) if i == len(line_table): return None return line_table[i]['m_val']
def php_line_number_from_repo(func, pc): unit = func['m_unit'] repo_id = unit['m_repoId'] sn = int(unit['m_sn']) conn = repo.get(repo_id) if conn is None: return None # Query for the line table. c = conn.cursor() table = repo.table('UnitLineTable') c.execute('SELECT data FROM %s WHERE unitSn == ?;' % table, (sn, )) row = c.fetchone() if row is None: return None buf = row[0] # Unpack the line table structure. line_table = [] decoder = repo.Decoder(buf) size = decoder.decode() for i in xrange(size): line_table.append({ 'm_pastOffset': decoder.decode(), 'm_val': decoder.decode(), }) if not decoder.finished(): # Something went wrong. return None # Find the upper bound for our PC. Note that this relies on the Python # dict comparison operator comparing componentwise lexicographically based # on the alphabetical ordering of keys. key = {'m_pastOffset': int(pc), 'm_val': -1} i = bisect.bisect_right(line_table, key) if i == len(line_table): return None return line_table[i]['m_val']