bool UnitRepoProxy::GetSourceLocPastOffsetsStmt ::get(int64 unitSn, int line, OffsetRangeVec& ranges) { try { RepoTxn txn(m_repo); if (!prepared()) { std::stringstream ssSelect; ssSelect << "SELECT pastOffset FROM " << m_repo.table(m_repoId, "UnitSourceLoc") << " WHERE unitSn == @unitSn AND line0 <= @line" " AND line1 >= @line;"; txn.prepare(*this, ssSelect.str()); } RepoTxnQuery query(txn, *this); query.bindInt64("@unitSn", unitSn); query.bindInt("@line", line); do { query.step(); if (query.row()) { Offset pastOffset; /**/ query.getOffset(0, pastOffset); ranges.push_back(OffsetRange(pastOffset, pastOffset)); } } while (!query.done()); txn.commit(); } catch (RepoExc& re) { return true; } return false; }
// Ensure we interpret an entire function when the debugger is attached. static void blacklistFuncInJit(const Func* f) { Unit* unit = f->unit(); OffsetRangeVec ranges; ranges.push_back(OffsetRange(f->base(), f->past())); blacklistRangesInJit(unit, ranges); }