foldAstStateful<Info, Down, Up>( ast: RNode<Info>, down: Down, folds: { 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; }; },): Up Parameters
- ast: RNode<Info>
- down: Down
- folds: {
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;
};
}Readonly
foldAccess: (
node: RAccess<Info>,
name: Up,
access: readonly ("<>" | Up)[],
down: Down,
) => Up
Readonly
foldBinaryOp: (op: RBinaryOp<Info>, lhs: Up, rhs: Up, down: Down) => Up
Readonly
foldExprList: (
exprList: RExpressionList<Info>,
grouping: undefined | [start: Up, end: Up],
expressions: Up[],
down: Down,
) => Up
Readonly
foldIfThenElse: (
ifThenExpr: RIfThenElse<Info>,
cond: Up,
then: Up,
otherwise: undefined | Up,
down: Down,
) => Up
Readonly
foldLogical: (logical: RLogical<Info>, down: Down) => Up
Readonly
foldNumber: (num: RNumber<Info>, down: Down) => Up
Readonly
foldPipe: (op: RPipe<Info>, lhs: Up, rhs: Up, down: Down) => Up
Readonly
foldString: (str: RString<Info>, down: Down) => Up
Readonly
foldSymbol: (symbol: RSymbol<Info>, down: Down) => Up
Readonly
foldUnaryOp: (op: RUnaryOp<Info>, operand: Up, down: Down) => Up
Readonly
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;
}
Readonly
foldArgument: (
argument: RArgument<Info>,
name: undefined | Up,
value: undefined | Up,
down: Down,
) => Up
Readonly
foldFunctionCall: (
call: RFunctionCall<Info>,
functionNameOrExpression: Up,
args: ("<>" | Up)[],
down: Down,
) => Up
Readonly
foldFunctionDefinition: (
definition: RFunctionDefinition<Info>,
params: Up[],
body: Up,
down: Down,
) => Up
Readonly
foldParameter: (
parameter: RParameter<Info>,
name: Up,
defaultValue: undefined | Up,
down: Down,
) => Up
Readonly
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;
}
Readonly
other: {
foldComment: (comment: RComment<Info>, down: Down) => Up;
foldLineDirective: (comment: RLineDirective<Info>, down: Down) => Up;
}
Returns Up
Folds in old functional-fashion over the AST structure but allowing for a down function which can pass context to child nodes.