From cf40d21e1c71b84364f6cdf957a91c4ec2e154b6 Mon Sep 17 00:00:00 2001 From: Nocturn9x Date: Thu, 7 Apr 2022 15:29:19 +0200 Subject: [PATCH] Minor changes to optimizer --- src/frontend/optimizer.nim | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/frontend/optimizer.nim b/src/frontend/optimizer.nim index 1ac7b5d..0a114c7 100644 --- a/src/frontend/optimizer.nim +++ b/src/frontend/optimizer.nim @@ -199,9 +199,9 @@ proc optimizeBinary(self: Optimizer, node: BinaryExpr): ASTNode = z = x or y of Slash: # Special case, yields a float - return FloatExpr(kind: intExpr, literal: Token(kind: Float, lexeme: $(x / y), line: IntExpr(a).literal.line, pos: (start: -1, stop: -1))) + return newFloatExpr(Token(kind: Float, lexeme: $(x / y), line: IntExpr(a).literal.line, pos: (start: -1, stop: -1))) else: - result = BinaryExpr(kind: binaryExpr, a: a, b: b, operator: node.operator, token: node.token) + result = newBinaryExpr(a, node.operator, b) except OverflowDefect: self.newWarning(valueOverflow, node) return BinaryExpr(kind: binaryExpr, a: a, b: b, operator: node.operator) @@ -244,14 +244,14 @@ proc optimizeBinary(self: Optimizer, node: BinaryExpr): ASTNode = result = BinaryExpr(kind: binaryExpr, a: a, b: b, operator: node.operator) except OverflowDefect: self.newWarning(valueOverflow, node) - return BinaryExpr(kind: binaryExpr, a: a, b: b, operator: node.operator) - result = FloatExpr(kind: floatExpr, literal: Token(kind: Float, lexeme: $z, line: LiteralExpr(a).literal.line, pos: (start: -1, stop: -1))) + return newBinaryExpr(a, node.operator, b) + result = newFloatExpr(Token(kind: Float, lexeme: $z, line: LiteralExpr(a).literal.line, pos: (start: -1, stop: -1))) elif a.kind == strExpr and b.kind == strExpr: var a = StrExpr(a) var b = StrExpr(b) case node.operator.kind: of Plus: - result = StrExpr(kind: strExpr, literal: Token(kind: String, lexeme: "'" & a.literal.lexeme[1..<(^1)] & b.literal.lexeme[1..<(^1)] & "'", pos: (start: -1, stop: -1))) + result = newStrExpr(Token(kind: String, lexeme: "'" & a.literal.lexeme[1..<(^1)] & b.literal.lexeme[1..<(^1)] & "'", pos: (start: -1, stop: -1))) else: result = node elif a.kind == strExpr and self.optimizeNode(b).kind == intExpr and not (self.warnings.len() > 0 and self.warnings[^1].kind == valueOverflow and self.warnings[^1].node == b): @@ -261,7 +261,7 @@ proc optimizeBinary(self: Optimizer, node: BinaryExpr): ASTNode = assert parseInt(b.literal.lexeme, bb) == b.literal.lexeme.len() case node.operator.kind: of Star: - result = StrExpr(kind: strExpr, literal: Token(kind: String, lexeme: "'" & a.literal.lexeme[1..<(^1)].repeat(bb) & "'")) + result = newStrExpr(Token(kind: String, lexeme: "'" & a.literal.lexeme[1..<(^1)].repeat(bb) & "'")) else: result = node elif b.kind == strExpr and self.optimizeNode(a).kind == intExpr and not (self.warnings.len() > 0 and self.warnings[^1].kind == valueOverflow and self.warnings[^1].node == a): @@ -271,7 +271,7 @@ proc optimizeBinary(self: Optimizer, node: BinaryExpr): ASTNode = assert parseInt(a.literal.lexeme, aa) == a.literal.lexeme.len() case node.operator.kind: of Star: - result = StrExpr(kind: strExpr, literal: Token(kind: String, lexeme: "'" & b.literal.lexeme[1..<(^1)].repeat(aa) & "'")) + result = newStrExpr(Token(kind: String, lexeme: "'" & b.literal.lexeme[1..<(^1)].repeat(aa) & "'")) else: result = node else: