Skip to content

Commit 312c3f7

Browse files
committed
more descriptive exception values
1 parent 0f0703a commit 312c3f7

File tree

3 files changed

+24
-66
lines changed

3 files changed

+24
-66
lines changed

mylis/mylis_3/listypes.py

-49
This file was deleted.

mylis/mylis_3/parser.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
#!/usr/bin/env python3
22

3-
################ lis.py: Scheme Interpreter in Python 3.10
4-
## (c) Peter Norvig, 2010-18; See http://norvig.com/lispy.html
3+
################ Scheme Interpreter in Python 3.10
4+
## Based on lis.py (c) Peter Norvig, 2010-18
5+
## See http://norvig.com/lispy.html
56
## Refactorting and additions by Luciano Ramalho (2022)
67

7-
from .listypes import (
8+
from .lis_types import (
89
Atom,
910
Symbol,
1011
Expression,
12+
BlankExpression,
13+
BraceNeverClosed,
1114
UnexpectedCloseBrace,
12-
UnexpectedEndOfSource,
1315
)
1416

1517

@@ -38,17 +40,17 @@ def read_from_tokens(tokens: list[str]) -> Expression:
3840
try:
3941
token = tokens.pop(0)
4042
except IndexError:
41-
raise UnexpectedEndOfSource()
43+
raise BlankExpression()
4244
if token in BRACES:
4345
exp = []
4446
while tokens and tokens[0] != BRACES[token]:
4547
exp.append(read_from_tokens(tokens))
4648
if not tokens:
47-
raise UnexpectedEndOfSource()
49+
raise BraceNeverClosed(token)
4850
tokens.pop(0) # discard close brace
4951
return exp
5052
elif token in CLOSE_BRACES:
51-
raise UnexpectedCloseBrace()
53+
raise UnexpectedCloseBrace(token)
5254
else:
5355
return parse_atom(token)
5456

mylis/mylis_3/parser_test.py

+15-10
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
from .listypes import (
1+
from .lis_types import (
2+
BlankExpression,
23
Expression,
34
ParserException,
45
UnexpectedCloseBrace,
5-
UnexpectedEndOfSource,
6+
BraceNeverClosed,
67
)
78
from .parser import parse
89

@@ -64,15 +65,19 @@ def test_parse_mixed_braces(source: str, expected: Expression) -> None:
6465

6566

6667
@mark.parametrize(
67-
'source, expected',
68+
'source, expected, brace',
6869
[
69-
('', UnexpectedEndOfSource),
70-
('(', UnexpectedEndOfSource),
71-
('([]', UnexpectedEndOfSource),
72-
('(])', UnexpectedCloseBrace),
73-
('([)', UnexpectedCloseBrace),
70+
('', BlankExpression, ''),
71+
('{', BraceNeverClosed, '{'),
72+
('([]', BraceNeverClosed, '('),
73+
('(])', UnexpectedCloseBrace, ']'),
74+
('([)', UnexpectedCloseBrace, ')'),
7475
],
7576
)
76-
def test_parse_malformed(source: str, expected: ParserException) -> None:
77-
with raises(expected): # type: ignore
77+
def test_parse_malformed(
78+
source: str, expected: ParserException, brace: str
79+
) -> None:
80+
with raises(expected) as excinfo: # type: ignore
7881
parse(source)
82+
if brace:
83+
assert repr(brace) in str(excinfo.value)

0 commit comments

Comments
 (0)