diff --git a/hy/emitters/__init__.py b/hy/emitters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hy/emitters/ast27.py b/hy/emitters/ast27.py index e2129f5..b156c6e 100644 --- a/hy/emitters/ast27.py +++ b/hy/emitters/ast27.py @@ -1,5 +1,17 @@ # +import ast + + +def emit_node(node): + print type(node) + body = [] + for sn in node.get_children(): + body.append(emit_node(sn)) + print body def emit(tree): - pass + ret = [] + for node in tree: + ret.append(emit_node(node)) + return ret diff --git a/hy/lang/expression.py b/hy/lang/expression.py index 417cdef..73b64a1 100644 --- a/hy/lang/expression.py +++ b/hy/lang/expression.py @@ -2,6 +2,12 @@ class HYExpression(list): def __init__(self, nodes): self += nodes + def get_children(self): + ret = [] + for node in self.get_invocation()['args']: + ret.append(node) + return ret + def get_invocation(self): fn = self[0] if len(self) > 0 else "" args = self[1:] if len(self) > 1 else [] diff --git a/hy/lang/list.py b/hy/lang/list.py index f0bb973..befeaee 100644 --- a/hy/lang/list.py +++ b/hy/lang/list.py @@ -1,3 +1,6 @@ class HYList(list): def __init__(self, nodes): self += nodes + + def get_children(self): + return [] diff --git a/hy/lang/string.py b/hy/lang/string.py index a49e8e3..2ec66f5 100644 --- a/hy/lang/string.py +++ b/hy/lang/string.py @@ -1,3 +1,6 @@ -class HYString(str): +class HYString(unicode): def __init__(self, string): - self = string # NOQA + self += string + + def get_children(self): + return [] diff --git a/hy/lex/states.py b/hy/lex/states.py index 37ea2b3..23dde2e 100644 --- a/hy/lex/states.py +++ b/hy/lex/states.py @@ -1,5 +1,6 @@ from hy.lang.expression import HYExpression from hy.lex.errors import LexException +from hy.lang.string import HYString from hy.lex.machine import Machine from hy.lang.list import HYList @@ -107,7 +108,7 @@ class String(State): self.esc = False def exit(self): - self.machine.nodes.append(self.buf) + self.machine.nodes.append(HYString(self.buf)) def p(self, x): if x == "\\":