feat(tvix/eval): implement DisassemblingObserver for compiler
This type implements an observer that is called whenever the compiler emits a chunk (after the toplevel, thunks, or lambdas) and prints the output of the disassembler to its internal writer. This replaces half of the uses of the `disassembler` feature, which has been removed from the Cargo configuration. Note that at this commit runtime tracing is not yet implemented as an observer. Change-Id: I7894ca1ba445761aba4ad51d98e4a7b6445f1aea Reviewed-on: https://cl.tvl.fyi/c/depot/+/6449 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
This commit is contained in:
parent
7ae45342df
commit
8ee4d6d5db
7 changed files with 111 additions and 98 deletions
|
|
@ -28,9 +28,6 @@ pub struct Chunk {
|
|||
pub code: Vec<OpCode>,
|
||||
pub constants: Vec<Value>,
|
||||
spans: Vec<SourceSpan>,
|
||||
|
||||
#[cfg(feature = "disassembler")]
|
||||
pub codemap: std::rc::Rc<codemap::CodeMap>,
|
||||
}
|
||||
|
||||
impl Index<ConstantIdx> for Chunk {
|
||||
|
|
@ -93,11 +90,11 @@ impl Chunk {
|
|||
}
|
||||
|
||||
/// Retrieve the line from which the instruction at `offset` was
|
||||
/// compiled. Only available when the chunk carries a codemap,
|
||||
/// i.e. when the disassembler is enabled.
|
||||
#[cfg(feature = "disassembler")]
|
||||
pub fn get_line(&self, offset: CodeIdx) -> usize {
|
||||
/// compiled in the specified codemap.
|
||||
pub fn get_line(&self, codemap: &codemap::CodeMap, offset: CodeIdx) -> usize {
|
||||
let span = self.get_span(offset);
|
||||
self.codemap.look_up_span(span).begin.line + 1
|
||||
// lines are 0-indexed in the codemap, but users probably want
|
||||
// real line numbers
|
||||
codemap.look_up_span(span).begin.line + 1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue