From 3b5eed038d45f493a9b11cedc7882411e181eada Mon Sep 17 00:00:00 2001
From: Xun Yang <x299yang@uwaterloo.ca>
Date: Mon, 24 Feb 2020 21:00:53 -0500
Subject: [PATCH] some more node changes

---
 LineNodes.py   |  2 +-
 MemberNodes.py |  4 ++--
 UnitNodes.py   | 30 ++++++++++++++++++++++++++++++
 3 files changed, 33 insertions(+), 3 deletions(-)
 create mode 100644 UnitNodes.py

diff --git a/LineNodes.py b/LineNodes.py
index 0e3013b..cf12f40 100644
--- a/LineNodes.py
+++ b/LineNodes.py
@@ -1,6 +1,6 @@
 from AST import ASTNode, getParseTreeNodes, getTypeName
 from Environment import Env
-from WordNodes import ExprNode
+from WordNodes import makeNodeFromExpr
 
 # containing line level nodes: block, for/while/if, declaration
 
diff --git a/MemberNodes.py b/MemberNodes.py
index 445f8c6..6a212d7 100644
--- a/MemberNodes.py
+++ b/MemberNodes.py
@@ -1,6 +1,6 @@
 from AST import ASTNode, getParseTreeNodes, getTypeName
 from LineNodes import BlockNode
-from WordNodes import ExprNode
+from WordNodes import makeNodeFromExpr
 from Environment import Env
 from collections import OrderedDict
 
@@ -33,7 +33,7 @@ class FieldNode(ASTNode):
 
                 nameNodes = getParseTreeNodes(['variableInit'], node)
                 for n in nameNodes:
-                    self.fieldInit =  ExprNode(n)
+                    self.fieldInit =  makeNodeFromExpr(n)
 
         if self.fieldInit: self.children.append(self.fieldInit)
 
diff --git a/UnitNodes.py b/UnitNodes.py
new file mode 100644
index 0000000..cac7848
--- /dev/null
+++ b/UnitNodes.py
@@ -0,0 +1,30 @@
+from AST import ASTNode, getParseTreeNodes, getTypeName
+from Environment import Env
+
+
+
+# literals
+class LiteralNode(ASTNode):
+    toLiType = dict({
+        'LITERALBOOL': 'bool',
+        'LITERALCHAR': 'char',
+        'LITERALSTRING': 'String',
+        'NULL': 'null',
+        'NUM': 'int',
+        'ZERO': 'int'
+    })
+    # always list all fields in the init method to show the class structure
+    def __init__(self, parseTree):
+        self.parseTree = parseTree
+        self.liType = toLiType.get(parseTree.children[0].name)  # type of the literal
+        self.value = parseTree.children[0].lex # the value
+        self.env = None
+        self.children = []
+
+        if self.liType == 'int':
+            self.value = int(self.value)
+        if self.liType == 'LITERALBOOL':
+            if self.value == 'false':
+                self.value = False
+            else:
+                self.value = True
-- 
GitLab