Skip to content

Commit 151ff5a

Browse files
Merge pull request #425 from mpenet/feature/atom-meta
add meta data support to atoms
2 parents d043be3 + 2d8b2a1 commit 151ff5a

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

pixie/vm/atom.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,15 @@ class Atom(object.Object):
1010
def type(self):
1111
return Atom._type
1212

13-
def __init__(self, boxed_value):
13+
def with_meta(self, meta):
14+
return Atom(self._boxed_value, meta)
15+
16+
def meta(self):
17+
return self._meta
18+
19+
def __init__(self, boxed_value, meta=nil):
1420
self._boxed_value = boxed_value
21+
self._meta = meta
1522

1623

1724
@extend(proto._reset_BANG_, Atom)
@@ -26,6 +33,15 @@ def _deref(self):
2633
assert isinstance(self, Atom)
2734
return self._boxed_value
2835

36+
@extend(proto._meta, Atom)
37+
def _meta(self):
38+
assert isinstance(self, Atom)
39+
return self.meta()
40+
41+
@extend(proto._with_meta, Atom)
42+
def _with_meta(self, meta):
43+
assert isinstance(self, Atom)
44+
return self.with_meta(meta)
2945

3046
@as_var("atom")
3147
def atom(val=nil):

tests/pixie/tests/test-stdlib.pxi

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -683,11 +683,12 @@
683683
(t/assert= 5 ((comp inc inc inc inc) 1))
684684
(t/assert= :xyz ((comp) :xyz)))
685685

686-
(t/deftest test-swap-reset
686+
(t/deftest test-atom
687687
(let [a (atom 0)]
688688
(t/assert= 1 (swap! a inc))
689689
(t/assert= 2 (swap! a inc))
690-
(t/assert= 3 (reset! a 3))))
690+
(t/assert= 3 (reset! a 3))
691+
(t/assert= :bar (-> a (with-meta {:foo :bar}) meta :foo))))
691692

692693
(t/deftest pre-post-conds
693694
(let [f (fn ([a] {:pre [(even? a)] :post [(= % 6)]} (/ a 2))

0 commit comments

Comments
 (0)