xo-exprssion: + Expression::xform_layer()

This commit is contained in:
Roland Conybeare 2024-07-03 14:11:02 -04:00
commit 1d99757bca
8 changed files with 72 additions and 4 deletions

View file

@ -35,7 +35,10 @@ namespace xo {
**/
class Expression : public ref::Refcount {
public:
using VisitFn = std::function<void (ref::brw<Expression>)>;
using VisitFn = std::function
<void (ref::brw<Expression>)>;
using TransformFn = std::function
<ref::rp<Expression> (ref::brw<Expression>)>;
using TypeDescr = xo::reflect::TypeDescr;
public:
@ -58,6 +61,9 @@ namespace xo {
**/
virtual std::size_t visit_preorder(VisitFn visitor_fn) = 0;
/** traverse ast @ref visit_preorder but do not visit Lambdas **/
virtual ref::rp<Expression> xform_layer(TransformFn visitor_fn) = 0;
/** attach an environment to each lambda expression X in this subtree,
* that will:
* - resolve names matching X's arguments (formal parameters) to