From 0a4fea51f5199acf76b5e02b0a36344e528dd018 Mon Sep 17 00:00:00 2001 From: otya128 Date: Thu, 8 Dec 2016 22:06:10 +0900 Subject: [PATCH] Fix fix assign --- SMILEBASIC/parser.d | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/SMILEBASIC/parser.d b/SMILEBASIC/parser.d index d8bdbf4..a3f99fe 100644 --- a/SMILEBASIC/parser.d +++ b/SMILEBASIC/parser.d @@ -90,6 +90,21 @@ class Lexical this.code = input; line = 1; } + this(Lexical lex) + { + this.code = lex.code; + this.reserved = lex.reserved; + this.table = lex.table; + this.pos = lex.pos; + this.token = lex.token; + this.isEmpty = lex.isEmpty; + this.index = lex.index; + this.line = lex.line; + } + Lexical save() + { + return new Lexical(this); + } bool empty() { return index >= code.length; @@ -867,15 +882,24 @@ class Parser } if (token.type != TokenType.Call) { + auto old = lex.save; auto expr = expression; - if (expr.type == NodeType.Variable) + token = lex.front; + if (token.type == TokenType.Assign) { - auto variable = cast(Variable)expr; - node = assign(variable.name); + if (expr.type == NodeType.Variable) + { + auto variable = cast(Variable)expr; + node = assign(variable.name); + return node; + } + node = assign(expr); return node; } - node = assign(expr); - return node; + else + { + lex = old; + } } lex.popFront(); //命令呼び出し