more better working debug

This commit is contained in:
nora 2022-04-24 12:50:12 +02:00
parent 08d1f01802
commit 01e6d7802e
5 changed files with 34 additions and 6 deletions

View file

@ -142,6 +142,7 @@ impl dbg_pls::DebugPls for FnBlock<'_> {
f.debug_struct("FnBlock") f.debug_struct("FnBlock")
.field("arity", &self.arity) .field("arity", &self.arity)
.field("code", &self.code.as_slice()) .field("code", &self.code.as_slice())
.field("stack_sizes", &self.stack_sizes.as_slice())
.finish_non_exhaustive() .finish_non_exhaustive()
} }
} }

View file

@ -473,10 +473,11 @@ impl<'bc, 'gc> Compiler<'bc, 'gc> {
for param in params.iter() { for param in params.iter() {
self.compile_expr(param)?; self.compile_expr(param)?;
todo!("no params yet")
} }
self.push_instr(Instr::Load(offset), StackChange::Grow, call.span); self.push_instr(Instr::Load(offset), StackChange::Grow, call.span);
self.push_instr(Instr::Call, StackChange::Grow, call.span); self.push_instr(Instr::Call, StackChange::None, call.span);
Ok(()) Ok(())
} }

View file

@ -11,9 +11,9 @@ use std::fmt::Debug;
pub use span::Span; pub use span::Span;
mod span { mod span {
use std::fmt::{Debug, Formatter};
#[derive(Debug, Default, Copy, Clone, PartialOrd, PartialEq, Ord, Eq, Hash)] #[derive(Default, Copy, Clone, PartialOrd, PartialEq, Ord, Eq, Hash)]
#[cfg_attr(feature = "_debug", derive(dbg_pls::DebugPls))]
pub struct Span { pub struct Span {
pub start: usize, pub start: usize,
pub end: usize, pub end: usize,
@ -66,6 +66,24 @@ mod span {
self.end - self.start self.end - self.start
} }
} }
impl Debug for Span {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_tuple("Span")
.field(&(self.start..self.end))
.finish()
}
}
#[cfg(feature = "_debug")]
impl dbg_pls::DebugPls for Span {
fn fmt(&self, f: dbg_pls::Formatter<'_>) {
f.debug_tuple_struct("Span")
// todo: wait for https://github.com/conradludgate/dbg-pls/pull/1
.field(&format!("{:?}", (self.start..self.end)))
.finish()
}
}
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]

View file

@ -54,7 +54,6 @@ impl<T: ?Sized> Copy for Gc<T> {}
/// An reference to an interned String. Hashing and Equality are O(1) and just look at the pointer address /// An reference to an interned String. Hashing and Equality are O(1) and just look at the pointer address
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
#[cfg_attr(feature = "_debug", derive(dbg_pls::DebugPls))]
pub struct Symbol { pub struct Symbol {
gc: Gc<str>, gc: Gc<str>,
} }
@ -74,11 +73,13 @@ pub struct Object {
#[derive(Debug)] #[derive(Debug)]
#[repr(C)] #[repr(C)]
#[cfg_attr(feature = "_debug", derive(dbg_pls::DebugPls))]
struct HeapObject { struct HeapObject {
kind: HeapObjectKind, kind: HeapObjectKind,
} }
#[derive(Debug)] #[derive(Debug)]
#[cfg_attr(feature = "_debug", derive(dbg_pls::DebugPls))]
enum HeapObjectKind { enum HeapObjectKind {
String(Gc<str>), String(Gc<str>),
Object(ObjectMap), Object(ObjectMap),
@ -213,6 +214,13 @@ impl Debug for Symbol {
} }
} }
#[cfg(feature = "_debug")]
impl dbg_pls::DebugPls for Symbol {
fn fmt(&self, f: dbg_pls::Formatter<'_>) {
DebugPls::fmt(self.as_str(), f)
}
}
impl Deref for Object { impl Deref for Object {
type Target = ObjectMap; type Target = ObjectMap;
@ -226,6 +234,6 @@ impl Deref for Object {
impl Debug for Object { impl Debug for Object {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
self.gc.deref().fmt(f) Debug::fmt(self.gc.deref(), f)
} }
} }

View file

@ -11,7 +11,7 @@ use std::fmt::Display;
#[cfg(feature = "_debug")] #[cfg(feature = "_debug")]
pub fn dbg(prefix: impl Display, x: impl dbg_pls::DebugPls) { pub fn dbg(prefix: impl Display, x: impl dbg_pls::DebugPls) {
eprintln!("{prefix}{}", dbg_pls::pretty(&x)) eprintln!("{prefix}{}", dbg_pls::color(&x))
} }
#[cfg(not(feature = "_debug"))] #[cfg(not(feature = "_debug"))]