|
2 | 2 | BinOpNode, ConstNode, AstBlock, Token, ParserOptions, AstNode, Operators, AssignNode, TokenTypes, |
3 | 3 | GetSingleVarNode, FunctionCallNode, getTokenType, getTokenValue, isTokenTypeLiteral, getStartLine, |
4 | 4 | getStartColumn, getEndColumn, getEndLine, findOperators, splitTokens, DotObjectAccessNode, BracketObjectAccessNode, |
5 | | - findTokenValueIndex, FunctionDefNode, CreateObjectNode, ObjectPropertyInfo, CreateArrayNode, ArrowFuncDefNode, ExpressionOperators, IfNode, ForNode |
| 5 | + findTokenValueIndex, FunctionDefNode, CreateObjectNode, ObjectPropertyInfo, CreateArrayNode, ArrowFuncDefNode, ExpressionOperators, IfNode, ForNode, WhileNode |
6 | 6 | } from '../common'; |
7 | 7 |
|
8 | 8 | export class InstructionLine { |
@@ -125,6 +125,19 @@ export class Parser { |
125 | 125 |
|
126 | 126 | ast.body.push(new ForNode(sourceArray, itemVarName, forBody)) |
127 | 127 |
|
| 128 | + } else if (getTokenValue(instruction.tokens[0]) === 'while') { |
| 129 | + |
| 130 | + const endDefOfDef = findTokenValueIndex(instruction.tokens, v => v === ':'); |
| 131 | + |
| 132 | + if (endDefOfDef === -1) { |
| 133 | + throw (`Can't find : for [while]`) |
| 134 | + } |
| 135 | + |
| 136 | + const condition = this.createExpressionNode(instruction.tokens.slice(1, endDefOfDef)) |
| 137 | + const body = getBody(instruction.tokens, endDefOfDef + 1); |
| 138 | + |
| 139 | + ast.body.push(new WhileNode(condition, body)) |
| 140 | + |
128 | 141 | } else if (assignTokens.length > 1) { |
129 | 142 | const target = this.createExpressionNode(assignTokens[0]); |
130 | 143 | const source = this.createExpressionNode(assignTokens[1]); |
|
0 commit comments