Interface StatefulFoldFunctions<Info, Down, Up> interface StatefulFoldFunctions < Info , Down , Up > { down : DownFold < Info , Down > ; foldAccess : ( node : RAccess < Info > , name : Up , access : readonly (
"<>" | Up )
[] , down : Down , ) => Up ; foldBinaryOp : ( op : RBinaryOp < Info > , lhs : Up , rhs : Up , down : Down ) => Up ; foldExprList : ( exprList : RExpressionList < Info > , grouping : undefined | [ start
: Up , end
: Up ] , expressions : Up [] , down : Down , ) => Up ; foldIfThenElse : ( ifThenExpr : RIfThenElse < Info > , cond : Up , then : Up , otherwise : undefined | Up , down : Down , ) => Up ; foldLogical : ( logical : RLogical < Info > , down : Down ) => Up ; foldNumber : ( num : RNumber < Info > , down : Down ) => Up ; foldPipe : ( op : RPipe < Info > , lhs : Up , rhs : Up , down : Down ) => Up ; foldString : ( str : RString < Info > , down : Down ) => Up ; foldSymbol : ( symbol : RSymbol < Info > , down : Down ) => Up ; foldUnaryOp : ( op : RUnaryOp < Info > , operand : Up , down : Down ) => Up ; functions : { foldArgument : ( argument : RArgument < Info > , name : undefined | Up , value : undefined | Up , down : Down , ) => Up ; foldFunctionCall : ( call : RFunctionCall < Info > , functionNameOrExpression : Up , args : (
"<>" | Up )
[] , down : Down , ) => Up ; foldFunctionDefinition : ( definition : RFunctionDefinition < Info > , params : Up [] , body : Up , down : Down , ) => Up ; foldParameter : ( parameter : RParameter < Info > , name : Up , defaultValue : undefined | Up , down : Down , ) => Up ; } ; loop : { foldBreak : ( next : RBreak < Info > , down : Down ) => Up ; foldFor : ( loop : RForLoop < Info > , variable : Up , vector : Up , body : Up , down : Down , ) => Up ; foldNext : ( next : RNext < Info > , down : Down ) => Up ; foldRepeat : ( loop : RRepeatLoop < Info > , body : Up , down : Down ) => Up ; foldWhile : ( loop : RWhileLoop < Info > , condition : Up , body : Up , down : Down , ) => Up ; } ; other : { foldComment : ( comment : RComment < Info > , down : Down ) => Up ; foldLineDirective : ( comment : RLineDirective < Info > , down : Down ) => Up ; } ; } Propertiesfunctions functions : { foldArgument : ( argument : RArgument < Info > , name : undefined | Up , value : undefined | Up , down : Down , ) => Up ; foldFunctionCall : ( call : RFunctionCall < Info > , functionNameOrExpression : Up , args : (
"<>" | Up )
[] , down : Down , ) => Up ; foldFunctionDefinition : ( definition : RFunctionDefinition < Info > , params : Up [] , body : Up , down : Down , ) => Up ; foldParameter : ( parameter : RParameter < Info > , name : Up , defaultValue : undefined | Up , down : Down , ) => Up ; } Type declaration foldArgument : ( argument : RArgument < Info > , name : undefined | Up , value : undefined | Up , down : Down , ) => Up foldFunctionCall : ( call : RFunctionCall < Info > , functionNameOrExpression : Up , args : ("<>" | Up )[] , down : Down , ) => Up foldFunctionDefinition : ( definition : RFunctionDefinition < Info > , params : Up [] , body : Up , down : Down , ) => Up foldParameter : ( parameter : RParameter < Info > , name : Up , defaultValue : undefined | Up , down : Down , ) => Up loop loop : { foldBreak : ( next : RBreak < Info > , down : Down ) => Up ; foldFor : ( loop : RForLoop < Info > , variable : Up , vector : Up , body : Up , down : Down , ) => Up ; foldNext : ( next : RNext < Info > , down : Down ) => Up ; foldRepeat : ( loop : RRepeatLoop < Info > , body : Up , down : Down ) => Up ; foldWhile : ( loop : RWhileLoop < Info > , condition : Up , body : Up , down : Down , ) => Up ; }
All fold functions besides
down
are called after the down-pass in conventional fold-fashion. Thedown
argument holds information obtained during the down-pass, issued by thedown
function.