|
@@ -2,10 +2,15 @@ import string
|
|
|
from visitor import Visitor
|
|
|
|
|
|
class PrimitivesVisitor(Visitor):
|
|
|
- def __init__(self):
|
|
|
+ def __init__(self, args):
|
|
|
self.output = []
|
|
|
self.free_id = 0
|
|
|
self.function_values = dict()
|
|
|
+ self.debug_symbols = "--debug" in args
|
|
|
+
|
|
|
+ def debug(self, node, tree, msg=""):
|
|
|
+ if self.debug_symbols:
|
|
|
+ self.dict(node, "__debug", self.value("[%s] %s" % (tree.get_reference_line(), msg)))
|
|
|
|
|
|
def node(self):
|
|
|
self.output.append(("N", self.free_id))
|
|
@@ -102,6 +107,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
|
|
|
symbol.node = n
|
|
|
self.dict(d, "var", n)
|
|
|
+ self.debug(d, tree)
|
|
|
|
|
|
self.set_primitive(tree, d)
|
|
|
|
|
@@ -113,6 +119,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
value = self.get_primitive(tree.get_tail()[-1])
|
|
|
self.dict(a, "var", var)
|
|
|
self.dict(a, "value", value)
|
|
|
+ self.debug(a, tree)
|
|
|
|
|
|
self.set_primitive(tree, a)
|
|
|
|
|
@@ -172,6 +179,8 @@ class PrimitivesVisitor(Visitor):
|
|
|
c = self.value("constant")
|
|
|
n = self.value(tree.get_text())
|
|
|
self.dict(c, "node", n)
|
|
|
+ self.debug(c, tree)
|
|
|
+
|
|
|
self.set_primitive(tree, c)
|
|
|
|
|
|
def visit_integer(self, tree):
|
|
@@ -187,6 +196,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
return
|
|
|
a = self.value("access")
|
|
|
self.dict(a, "var", r)
|
|
|
+ self.debug(a, tree)
|
|
|
self.set_primitive(tree, a)
|
|
|
|
|
|
def visit_lvalue(self, tree):
|
|
@@ -196,6 +206,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
r = self.value("resolve")
|
|
|
# print symbol.name, symbol.is_func(), symbol.node
|
|
|
self.dict(r, "var", symbol.node)
|
|
|
+ self.debug(r, tree)
|
|
|
self.set_primitive(tree, r)
|
|
|
|
|
|
def visit_func_call(self, tree):
|
|
@@ -226,6 +237,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
c = self.value("call")
|
|
|
a = self.get_primitive(tree.get_tail()[0])
|
|
|
self.dict(c, "func", a)
|
|
|
+ self.debug(c, tree)
|
|
|
|
|
|
if arg_nodes_reversed:
|
|
|
self.dict(c, "params", arg_nodes_reversed[-1])
|
|
@@ -236,24 +248,17 @@ class PrimitivesVisitor(Visitor):
|
|
|
def visit_input(self, tree):
|
|
|
self.visit_children(tree)
|
|
|
v = self.value("input")
|
|
|
+ self.debug(v, tree)
|
|
|
self.set_primitive(tree, v)
|
|
|
|
|
|
def visit_output(self, tree):
|
|
|
self.visit_children(tree)
|
|
|
v = self.value("output")
|
|
|
+ self.debug(v, tree)
|
|
|
value = self.get_primitive(tree.get_child("expression"))
|
|
|
self.dict(v, "value", value)
|
|
|
self.set_primitive(tree, v)
|
|
|
|
|
|
- def visit_dictionary(self, tree):
|
|
|
- pass # TODO dictionary and list
|
|
|
-
|
|
|
- def visit_list(self, tree):
|
|
|
- pass # TODO dictionary and list
|
|
|
-
|
|
|
- def visit_dict_item(self, tree):
|
|
|
- pass
|
|
|
-
|
|
|
def visit_ifelse(self, tree):
|
|
|
self.visit_children(tree)
|
|
|
expressions = [self.get_primitive(e) for e in
|
|
@@ -264,6 +269,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
prev = None
|
|
|
for e, b in zip(expressions, blocks):
|
|
|
v = self.value("if")
|
|
|
+ self.debug(v, tree)
|
|
|
if first is None:
|
|
|
first = v
|
|
|
self.dict(v, "cond", e)
|
|
@@ -281,6 +287,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
self.visit_children(tree)
|
|
|
|
|
|
w = self.value("while")
|
|
|
+ self.debug(w, tree)
|
|
|
c = self.get_primitive(tree.get_child("expression"))
|
|
|
b = self.get_primitive(tree.get_child("block"))
|
|
|
|
|
@@ -370,6 +377,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
|
|
|
declare = self.value("global")
|
|
|
self.dict(declare, "var", root)
|
|
|
+ self.debug(declare, tree)
|
|
|
|
|
|
resolve = self.value("resolve")
|
|
|
self.dict(resolve, "var", root)
|
|
@@ -389,6 +397,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
|
|
|
declare = self.value("global")
|
|
|
self.dict(declare, "var", root)
|
|
|
+ self.debug(declare, tree)
|
|
|
|
|
|
symbol.node = root
|
|
|
|
|
@@ -423,6 +432,7 @@ class PrimitivesVisitor(Visitor):
|
|
|
def visit_return(self, tree):
|
|
|
self.visit_children(tree)
|
|
|
r = self.value("return")
|
|
|
+ self.debug(r, tree)
|
|
|
if len(tree.get_tail()) > 1:
|
|
|
v = self.get_primitive(tree.get_tail()[1])
|
|
|
self.dict(r, "value", v)
|