From 6a2e7e17a4390958de4431a783019c69e1d033c3 Mon Sep 17 00:00:00 2001
From: Elijah Gichev <elijah.gichev@gmail.com>
Date: Sun, 25 Dec 2022 22:07:13 +0300
Subject: [PATCH] added bin op type checking

---
 Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs | 7 +++++++
 TestCodeGenerator/Tests.cs                         | 5 +++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs b/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs
index bd3a2d8..06500be 100644
--- a/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs
+++ b/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs
@@ -63,6 +63,13 @@ namespace SimpleLang.Visitors
 
             binop.Left.Visit(this);
             binop.Right.Visit(this);
+
+
+            if (binOperationsTypes.Count != 0 && !binOperationsTypes.All((t)=>t== binOperationsTypes[0]))
+            {
+
+                throw new Exception("Переменные должны быть одного типа!");
+            }
             switch (binop.Op)
             {
                 case '+':
diff --git a/TestCodeGenerator/Tests.cs b/TestCodeGenerator/Tests.cs
index e7994e2..5df6e77 100644
--- a/TestCodeGenerator/Tests.cs
+++ b/TestCodeGenerator/Tests.cs
@@ -68,7 +68,8 @@ namespace TestCodeGenerator
         [Test]
         public void SmokeTest2()
         {
-            Assert.AreEqual("2.2", TestHelper.GenerateNRun(@"begin float a; a := 1.2; if a then a:=a+1 else a:=a+2; write(a) end"));  
+            Assert.AreEqual("2.2", TestHelper.GenerateNRun(@"begin float a; a := 1.2; if a then a:=a+1.0 else a:=a+2.0; write(a) end"));
+            //Assert.AreEqual("2", TestHelper.GenerateNRun(@"begin int a; a := 1; if a then a:=a+1 else a:=a+2; write(a) end"));
         }
 
         [Test]
@@ -134,7 +135,7 @@ namespace TestCodeGenerator
         [Test]
         public void TestTypes()
         {
-            Assert.AreEqual("2.4", TestHelper.GenerateNRun(@"begin var b; b := (232 / 5) + (232 % 5); write(b) end"));
+            Assert.AreEqual("48", TestHelper.GenerateNRun(@"begin int b1; b1 := (232 / 5) + (232 % 5); write(b1) end"));
 
             //Assert.AreEqual("2.4", TestHelper.GenerateNRun(@"begin int b; b := 1.2; write(b) end"));
         }
-- 
GitLab