From 6eb6a0d24c92e44d5c6cb72f5bd587b1cb7e593c Mon Sep 17 00:00:00 2001 From: "Paul R. Tagliamonte" Date: Sun, 3 Mar 2013 12:52:24 -0500 Subject: [PATCH] fiddling with asts --- hy/compilers/ast.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/hy/compilers/ast.py b/hy/compilers/ast.py index d548550..0e600a2 100644 --- a/hy/compilers/ast.py +++ b/hy/compilers/ast.py @@ -21,10 +21,43 @@ from hy.compilers import HyCompiler from hy.models.expression import HyExpression -from hy.modesl.symbol import HySymbol +from hy.models.symbol import HySymbol + +from hy.errors import HyError + + +class HyCompileError(HyError): + pass + + +_compile_table = {} + + +def builds(_type): + def _dec(fn): + _compile_table[_type] = fn + def shim(*args, **kwargs): + return fn(*args, **kwargs) + return shim + return _dec class HyASTCompiler(HyCompiler): - def compile(self, tree): + for _type in _compile_table: + if type(tree) == _type: + return _compile_table[_type](self, tree) + + raise HyCompileError("Unknown type.") + + @builds(list) + def compile_raw_list(self, entries): + return [self.compile(x) for x in entries] + + @builds(HyExpression) + def compile_expression(self, expression): + pass + + @builds(HySymbol) + def compile_symbol(self, symbol): pass