From c2b87efc6c4c9f4ac5df5798b2d94c38ecb7e22d Mon Sep 17 00:00:00 2001 From: Paul Tagliamonte Date: Sun, 16 Dec 2012 09:39:37 -0500 Subject: [PATCH] Tooling around with some things. --- hy/emitters/__init__.py | 0 hy/emitters/ast27.py | 14 +++++++++++++- hy/lang/expression.py | 6 ++++++ hy/lang/list.py | 3 +++ hy/lang/string.py | 7 +++++-- hy/lex/states.py | 3 ++- 6 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 hy/emitters/__init__.py 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 == "\\":