diff --git a/test.py b/test.py index a366b4d..7d21a23 100644 --- a/test.py +++ b/test.py @@ -36,6 +36,9 @@ class TestParser(TestCase): self.assertEqual(str(parser.parse("(+ '1 (* 3 2))")), "(+ . ('1 . ((* . (3 . (2 . NIL))) . NIL)))") + def test_error_unclosed_list(self): + self.assertRaises(ValueError, parser.parse("(42")) + if __name__ == '__main__': import unittest diff --git a/wasp/parser/__init__.py b/wasp/parser/__init__.py index 77f0c0b..c0aa650 100644 --- a/wasp/parser/__init__.py +++ b/wasp/parser/__init__.py @@ -18,8 +18,11 @@ pg = ParserGenerator(["QUOTE", "LPAREN", "RPAREN", "ATOM"], def error_handler(token): type = token.gettokentype() pos = token.getsourcepos() - raise ValueError("unexpected %s at (%s, %s)" % - (type, pos.lineno, pos.colno)) + if pos is None: + raise ValueError("unexpected %s" % type) + else: + raise ValueError("unexpected %s at (%s, %s)" % + (type, pos.lineno, pos.colno)) @pg.production("main : sexpr")