mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-21 18:10:42 -04:00
FEATURE: Use the AST Pretty Printer for TRACE and assert output.
This commit is contained in:
parent
cd6307824f
commit
525cdd32e6
@ -1,4 +1,4 @@
|
||||
let host_mod = module{
|
||||
let host_mod = TRACE module{
|
||||
hostname="",
|
||||
mem=2048,
|
||||
cpu=2,
|
||||
|
@ -184,7 +184,7 @@ where
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn render_expr(&mut self, expr: &Expression) -> std::io::Result<()> {
|
||||
pub fn render_expr(&mut self, expr: &Expression) -> std::io::Result<()> {
|
||||
match expr {
|
||||
Expression::Binary(_def) => {
|
||||
let op = match _def.kind {
|
||||
@ -331,7 +331,7 @@ where
|
||||
self.render_expr(e)?;
|
||||
write!(self.w, ") ")?;
|
||||
}
|
||||
write!(self.w, "{{")?;
|
||||
write!(self.w, "{{\n")?;
|
||||
self.curr_indent += self.indent;
|
||||
let indent = self.make_indent();
|
||||
for stmt in _def.statements.iter() {
|
||||
@ -372,7 +372,7 @@ where
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn render_stmt(&mut self, stmt: &Statement) -> std::io::Result<()> {
|
||||
pub fn render_stmt(&mut self, stmt: &Statement) -> std::io::Result<()> {
|
||||
// All statements start at the beginning of a line.
|
||||
match stmt {
|
||||
Statement::Let(def) => {
|
||||
|
@ -1654,11 +1654,17 @@ impl<'a> FileBuilder<'a> {
|
||||
// we are not in validate_mode so build_asserts are noops.
|
||||
return Ok(Rc::new(Val::Empty));
|
||||
}
|
||||
let mut buffer: Vec<u8> = Vec::new();
|
||||
{
|
||||
let mut printer = crate::ast::printer::AstPrinter::new(2, &mut buffer);
|
||||
let _ = printer.render_expr(expr);
|
||||
}
|
||||
let expr_pretty = String::from_utf8(buffer).unwrap();
|
||||
let ok = match self.eval_expr(expr, scope) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
// failure!
|
||||
let msg = format!("CompileError: {}\n", e);
|
||||
let msg = format!("CompileError: {}\nfor expression:\n{}\n", e, expr_pretty);
|
||||
self.record_assert_result(&msg, false);
|
||||
return Ok(Rc::new(Val::Empty));
|
||||
}
|
||||
@ -1965,9 +1971,16 @@ impl<'a> FileBuilder<'a> {
|
||||
};
|
||||
}
|
||||
&Expression::Debug(ref def) => {
|
||||
let mut buffer: Vec<u8> = Vec::new();
|
||||
{
|
||||
let mut printer = crate::ast::printer::AstPrinter::new(2, &mut buffer);
|
||||
let _ = printer.render_expr(&def.expr);
|
||||
}
|
||||
let expr_pretty = String::from_utf8(buffer).unwrap();
|
||||
|
||||
let val = self.eval_expr(&def.expr, scope);
|
||||
if let Ok(ref val) = val {
|
||||
eprintln!("TRACE: {} at {}", val, def.pos);
|
||||
eprintln!("TRACE: {} = {} at {}", expr_pretty, val, def.pos);
|
||||
}
|
||||
val
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user