From 0638cfa1878dddce2fe8060c7bf141ac7219085c Mon Sep 17 00:00:00 2001 From: Paul Tagliamonte Date: Tue, 5 Mar 2013 18:39:34 -0500 Subject: [PATCH] ideas, ideas. --- hy/compiler.py | 9 ++++++++- hy/lex/machine.py | 10 ++++++---- hy/lex/states.py | 5 ++++- tests/__init__.py | 4 ++++ tests/native_tests/__init__.hy | 0 tests/native_tests/math.hy | 5 +++++ tox.ini | 7 +++++++ 7 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 tests/native_tests/__init__.hy create mode 100644 tests/native_tests/math.hy create mode 100644 tox.ini diff --git a/hy/compiler.py b/hy/compiler.py index 3642195..08e95dd 100644 --- a/hy/compiler.py +++ b/hy/compiler.py @@ -22,6 +22,7 @@ from hy.errors import HyError from hy.models.expression import HyExpression from hy.models.symbol import HySymbol +from hy.models.integer import HyInteger from hy.models.string import HyString import ast @@ -84,7 +85,7 @@ class HyASTCompiler(object): @builds("/") @builds("*") def compile_maths_expression(self, expression): - # operator = Mod | Pow | LShift | RShift | BitOr | + # operator = Mod | Pow | LShift | RShift | BitOr | # BitXor | BitAnd | FloorDiv # (to implement list) XXX @@ -175,6 +176,12 @@ class HyASTCompiler(object): self.returnable = ret_status return ret + @builds(HyInteger) + def compile_number(self, number): + return ast.Num(n=number, + lineno=number.start_line, + col_offset=number.start_column) + @builds(HySymbol) def compile_symbol(self, symbol): return ast.Name(id=str(symbol), ctx=ast.Load(), diff --git a/hy/lex/machine.py b/hy/lex/machine.py index 3b81989..1123a8a 100644 --- a/hy/lex/machine.py +++ b/hy/lex/machine.py @@ -87,12 +87,14 @@ class Machine(object): if self.submachine: self.submachine.process([char]) if type(self.submachine.state) == Idle: - if len(self.submachine.nodes) != 1: + if len(self.submachine.nodes) > 1: raise LexException("Funky Submachine stuff") - result = self.submachine.nodes[0] + + nodes = self.submachine.nodes self.submachine = None - if result: - self.state.nodes.append(result) + + if len(nodes) > 0: + self.state.nodes.append(nodes[0]) continue new = self.state.process(char) diff --git a/hy/lex/states.py b/hy/lex/states.py index aff80bd..c6cb3ba 100644 --- a/hy/lex/states.py +++ b/hy/lex/states.py @@ -120,7 +120,10 @@ class Expression(State): def exit(self): self.commit() - self.result = HyExpression(self.nodes) + if self.nodes != []: + self.result = HyExpression(self.nodes) + else: + self.result = None def process(self, char): """ diff --git a/tests/__init__.py b/tests/__init__.py index e69de29..9699570 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -0,0 +1,4 @@ +# + +import hy +from .native_tests.math import * diff --git a/tests/native_tests/__init__.hy b/tests/native_tests/__init__.hy new file mode 100644 index 0000000..e69de29 diff --git a/tests/native_tests/math.hy b/tests/native_tests/math.hy new file mode 100644 index 0000000..b22d52d --- /dev/null +++ b/tests/native_tests/math.hy @@ -0,0 +1,5 @@ +; copyright .. + + +(def test_basic_math (fn () + (assert (+ 2 2) 4))) diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..ba3898e --- /dev/null +++ b/tox.ini @@ -0,0 +1,7 @@ +[tox] +envlist = py27,pypy,py32 +[testenv] +commands = nosetests +deps = + nose + setuptools