-
Notifications
You must be signed in to change notification settings - Fork 23
/
for_statement.ts
59 lines (51 loc) · 1.7 KB
/
for_statement.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { ASTNode } from "../../ast_node";
import { Expression } from "../expression/expression";
import { StructuredDocumentation } from "../meta";
import { ExpressionStatement } from "./expression_statement";
import { Statement } from "./statement";
import { VariableDeclarationStatement } from "./variable_declaration_statement";
export class ForStatement extends Statement {
/**
* Variable declaration and initialization `uint x = 1`.
* Also accepts other expression statements.
*/
vInitializationExpression?: VariableDeclarationStatement | ExpressionStatement;
/**
* Continuation condition, e.g. `x < 10`
*/
vCondition?: Expression;
/**
* Loop expression, e.g. `x++`
*/
vLoopExpression?: ExpressionStatement;
/**
* Statement that gets executed if the condition is evaluated to `true`
*/
vBody: Statement;
constructor(
id: number,
src: string,
body: Statement,
initializationExpression?: VariableDeclarationStatement | ExpressionStatement,
condition?: Expression,
loopExpression?: ExpressionStatement,
documentation?: string | StructuredDocumentation,
raw?: any
) {
super(id, src, documentation, raw);
this.vInitializationExpression = initializationExpression;
this.vCondition = condition;
this.vLoopExpression = loopExpression;
this.vBody = body;
this.acceptChildren();
}
get children(): readonly ASTNode[] {
return this.pickNodes(
this.documentation,
this.vInitializationExpression,
this.vCondition,
this.vLoopExpression,
this.vBody
);
}
}