Skip to content

Commit 4d0d836

Browse files
Sets the _name in BaseCode for MultiArityFns
Passing an invalid number of args to a MultiArityFn should throw and error now which includes the name of the function.
1 parent 2fcf979 commit 4d0d836

5 files changed

Lines changed: 11 additions & 10 deletions

File tree

pixie/vm/code.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,15 +130,16 @@ class MultiArityFn(BaseCode):
130130
def type(self):
131131
return MultiArityFn._type
132132

133-
def __init__(self, arities, required_arity=0, rest_fn=None, meta=nil):
133+
def __init__(self, name, arities, required_arity=0, rest_fn=None, meta=nil):
134134
BaseCode.__init__(self)
135+
self._name = name
135136
self._arities = arities
136137
self._required_arity = required_arity
137138
self._rest_fn = rest_fn
138139
self._meta = meta
139140

140141
def with_meta(self, meta):
141-
return MultiArityFn(self._arities, self._required_arity, self._rest_fn, meta)
142+
return MultiArityFn(self._name, self._arities, self._required_arity, self._rest_fn, meta)
142143

143144
@elidable_promote()
144145
def get_fn(self, arity):
@@ -155,7 +156,7 @@ def get_fn(self, arity):
155156
if self._rest_fn:
156157
acc.append(u" or more")
157158

158-
affirm(False, u"Wrong number of args to fn: got " + unicode(str(arity)) + u" expected " + u",".join(acc))
159+
runtime_error(u"Wrong number of args to fn " + unicode(self._name) + " got " + unicode(str(arity)) + u" expected " + u",".join(acc))
159160

160161
def invoke(self, args):
161162
return self.invoke_with(args, self)
@@ -212,7 +213,7 @@ def invoke(self, args):
212213
if len(args) == self.get_arity():
213214
return self.invoke_with(args, self)
214215
else:
215-
runtime_error(u"Invalid number of arguments " + unicode(len(args))
216+
runtime_error(u"Invalid number of arguments " + unicode(str(len(args)))
216217
+ u" for function '" + unicode(str(self._name)) + u"'. Expected "
217218
+ unicode(str(self.get_arity())))
218219

pixie/vm/compiler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def gensym2(prefix):
3333
return rt.symbol(rt.str(prefix, i))
3434

3535
gensym = code.intern_var(u"pixie.stdlib", u"gensym")
36-
gensym.set_root(code.MultiArityFn({0: code.wrap_fn(gensym1), 1: code.wrap_fn(gensym2)}))
36+
gensym.set_root(code.MultiArityFn(u"gensym", {0: code.wrap_fn(gensym1), 1: code.wrap_fn(gensym2)}))
3737

3838
class with_ns(object):
3939
def __init__(self, nm, include_stdlib=False):

pixie/vm/interpreter.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,7 @@ def make_multi_arity(frame, argc):
145145
else:
146146
fn = frame.pop()
147147
d[a] = fn
148-
149-
return code.MultiArityFn(d, required_arity, rest_fn)
148+
return code.MultiArityFn(fn._name, d, required_arity, rest_fn)
150149

151150
class ShallowContinuation(Object):
152151
_type = Type(u"pixie.stdlib.ShallowContinuation")

pixie/vm/libs/string.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def index_of4(a, sep, start, end):
4747
runtime_error(u"Third and fourth argument must be non-negative integers")
4848

4949
index_of = intern_var(u"pixie.string.internal", u"index-of")
50-
index_of.set_root(MultiArityFn({2: wrap_fn(index_of2), 3: wrap_fn(index_of3), 4: wrap_fn(index_of4)},
50+
index_of.set_root(MultiArityFn(u"index-of", {2: wrap_fn(index_of2), 3: wrap_fn(index_of3), 4: wrap_fn(index_of4)},
5151
required_arity = 2))
5252

5353
def substring2(a, start):
@@ -64,7 +64,7 @@ def substring3(a, start, end):
6464
runtime_error(u"Second and third argument must be non-negative integers")
6565

6666
substring = intern_var(u"pixie.string.internal", u"substring")
67-
substring.set_root(MultiArityFn({2: wrap_fn(substring2), 3: wrap_fn(substring3)},
67+
substring.set_root(MultiArityFn(u"substring", {2: wrap_fn(substring2), 3: wrap_fn(substring3)},
6868
required_arity = 2))
6969

7070
@as_var("pixie.string.internal", "upper-case")

tests/pixie/tests/test-fns.pxi

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
(t/deftest test-code-arity-errors
1919
(let [arity-0 (fn arity-0 [])
2020
arity-1 (fn arity-1 [a])
21-
arity-2 (fn arity-2 [a b])]
21+
arity-2 (fn arity-2 [a b])
22+
multi-arity (fn arity-0-or-1)]
2223
(try
2324
(arity-0 :foo)
2425
(catch e

0 commit comments

Comments
 (0)