xo-exprssion: + Expression::xform_layer()
This commit is contained in:
parent
14796663b1
commit
1d99757bca
8 changed files with 72 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue