Skip to content

Commit 3693cc9

Browse files
authored
Keywords used in function position should work properly now (#175)
1 parent cb8616b commit 3693cc9

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

basilisp/lang/keyword.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from pyrsistent import pmap, PMap
44

5+
import basilisp.lang.associative as lassoc
56
import basilisp.lang.atom as atom
67

78
__INTERN = atom.Atom(pmap())
@@ -36,8 +37,11 @@ def __eq__(self, other):
3637
def __hash__(self):
3738
return hash(str(self))
3839

39-
def __call__(self, m, default=None):
40-
return m.get(self, default)
40+
def __call__(self, m: lassoc.Associative, default=None):
41+
try:
42+
return m.entry(self, default)
43+
except AttributeError:
44+
return None
4145

4246

4347
def __get_or_create(kw_cache: PMap, h: int, name: str,

tests/keyword_test.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import basilisp.lang.map as lmap
12
from basilisp.lang.keyword import keyword
23

34

@@ -31,3 +32,12 @@ def test_keyword_str_and_repr():
3132
kw = keyword("kw")
3233
assert str(kw) == "kw"
3334
assert repr(kw) == ":kw"
35+
36+
37+
def test_keyword_as_function():
38+
kw = keyword("kw")
39+
assert None is kw(None)
40+
41+
assert 1 == kw(lmap.map({kw: 1}))
42+
assert "hi" == kw(lmap.map({kw: "hi"}))
43+
assert None is kw(lmap.map({"hi": kw}))

0 commit comments

Comments
 (0)