include 'parser/walker'
include 'peg/sexp'
m = walker.new
m.init = { ast |
my.ast = ast
}
m.prototype.replace_walk = { nodes |
w = my
nodes.map! { n |
true? sexp?(n)
{ w.process n }
{ true? n.array?
{ n.map! { i |
true? sexp?(i) { w.process i } { i }}
}
{ n }
}
}
}
m.prototype.unhandled = { node |
p "Unhandled: #{node.name}"
replace_walk node
node
}
m.walk :not { node |
replace_walk node
true? node.last.name == :anything
{ p :hi; s[:nothing] }
{ node }
}
export m, :peg_maker