Skip to content

Commit 408d5bd

Browse files
authored
Create a basic exception type (#90)
1 parent 6ccfe53 commit 408d5bd

File tree

4 files changed

+43
-1
lines changed

4 files changed

+43
-1
lines changed

basilisp/core/__init__.lpy

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,16 @@
125125
(catch TypeError _
126126
(count (apply vector coll))))))
127127

128+
(def
129+
^{:doc "Returns a basilisp.lang.exception/ExceptionInfo instance with
130+
the given message and data."}
131+
ex-info
132+
(fn ex-info [msg data]
133+
(basilisp.lang.exception/ExceptionInfo msg data)))
134+
128135
(def
129136
^{:macro true
130-
:doc ""}
137+
:doc "Define a new function."}
131138
defn
132139
(fn defn [&form name & body]
133140
(let [body (concat body)

basilisp/lang/exception.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import basilisp.lang.map as lmap
2+
from basilisp.lang.util import lrepr
3+
4+
5+
class ExceptionInfo(Exception):
6+
__slots__ = ('_msg', '_data',)
7+
8+
def __init__(self, message: str, data: lmap.Map) -> None:
9+
super().__init__()
10+
self._msg = message
11+
self._data = data
12+
13+
def __repr__(self):
14+
return f"basilisp.lang.exception.ExceptionInfo({self._msg}, {lrepr(self._data)})"
15+
16+
def __str__(self):
17+
return f"{self._msg} {lrepr(self._data)}"
18+
19+
@property
20+
def data(self):
21+
return self._data
22+
23+
@property
24+
def message(self):
25+
return self._data

basilisp/lang/runtime.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class Namespace:
177177
- `imports` is a set of Python modules imported into the current
178178
namespace"""
179179
DEFAULT_IMPORTS = atom.Atom(pset(seq(['builtins',
180+
'basilisp.lang.exception',
180181
'basilisp.lang.keyword',
181182
'basilisp.lang.list',
182183
'basilisp.lang.map',

tests/core_test.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from unittest.mock import Mock
22

3+
import pytest
4+
5+
import basilisp.lang.map as lmap
36
import basilisp.lang.runtime as runtime
7+
from basilisp.lang.exception import ExceptionInfo
48
from basilisp.main import init
59

610
init()
@@ -25,3 +29,8 @@ def teardown_module(module):
2529

2630
def test_first():
2731
assert None is basilisp.core.first(None)
32+
33+
34+
def test_ex_info():
35+
with pytest.raises(ExceptionInfo):
36+
raise basilisp.core.ex_info("This is just an exception", lmap.m())

0 commit comments

Comments
 (0)