Add dump_ast
function for debugging.
This commit is contained in:
parent
880bce1114
commit
047f064cd1
@ -27,6 +27,7 @@ type IteratorFn = dyn Fn(&Dynamic) -> Box<dyn Iterator<Item = Dynamic>>;
|
|||||||
|
|
||||||
pub(crate) const KEYWORD_PRINT: &'static str = "print";
|
pub(crate) const KEYWORD_PRINT: &'static str = "print";
|
||||||
pub(crate) const KEYWORD_DEBUG: &'static str = "debug";
|
pub(crate) const KEYWORD_DEBUG: &'static str = "debug";
|
||||||
|
pub(crate) const KEYWORD_DUMP_AST: &'static str = "dump_ast";
|
||||||
pub(crate) const KEYWORD_TYPE_OF: &'static str = "type_of";
|
pub(crate) const KEYWORD_TYPE_OF: &'static str = "type_of";
|
||||||
pub(crate) const FUNC_GETTER: &'static str = "get$";
|
pub(crate) const FUNC_GETTER: &'static str = "get$";
|
||||||
pub(crate) const FUNC_SETTER: &'static str = "set$";
|
pub(crate) const FUNC_SETTER: &'static str = "set$";
|
||||||
@ -859,6 +860,31 @@ impl Engine<'_> {
|
|||||||
#[cfg(feature = "no_index")]
|
#[cfg(feature = "no_index")]
|
||||||
Expr::Array(_, _) => panic!("encountered an array during no_index!"),
|
Expr::Array(_, _) => panic!("encountered an array during no_index!"),
|
||||||
|
|
||||||
|
// Dump AST
|
||||||
|
Expr::FunctionCall(fn_name, args, _, pos) if fn_name == KEYWORD_DUMP_AST => {
|
||||||
|
let pos = if args.len() == 0 {
|
||||||
|
*pos
|
||||||
|
} else {
|
||||||
|
args[0].position()
|
||||||
|
};
|
||||||
|
|
||||||
|
// Change the argument to a debug dump of the expressions
|
||||||
|
let result = args
|
||||||
|
.into_iter()
|
||||||
|
.map(|expr| format!("{:#?}", expr))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join("\n");
|
||||||
|
|
||||||
|
// Redirect call to `print`
|
||||||
|
self.call_fn_raw(
|
||||||
|
KEYWORD_PRINT,
|
||||||
|
vec![result.into_dynamic().as_mut()],
|
||||||
|
None,
|
||||||
|
pos,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal function call
|
||||||
Expr::FunctionCall(fn_name, args, def_val, pos) => {
|
Expr::FunctionCall(fn_name, args, def_val, pos) => {
|
||||||
let mut args = args
|
let mut args = args
|
||||||
.iter()
|
.iter()
|
||||||
|
Loading…
Reference in New Issue
Block a user