def fnReader(rdr, lparen): from clojure.lang.persistenthashmap import EMPTY from clojure.lang.var import popThreadBindings, pushThreadBindings if ARG_ENV.deref() is not None: raise IllegalStateException("Nested #()s are not allowed") pushThreadBindings(RT.map(ARG_ENV, EMPTY)) rdr.back() form = read(rdr, True, None, True) drefed = ARG_ENV.deref() sargs = sorted(list(filter(lambda x: x != -1, drefed))) args = [] if len(sargs): for x in range(1, int(str(sargs[-1])) + 1): if x in drefed: args.append(drefed[x]) else: args.append(garg(x)) retsym = drefed[-1] if retsym is not None: args.append(_AMP_) args.append(retsym) vargs = RT.vector(*args) popThreadBindings() return RT.list(_FN_, vargs, form)
def fnReader(rdr, lparen): """Read an anonymous function #() from reader rdr -- a read/unread-able object lparen -- ignored Return an IPersistentList""" if ARG_ENV.deref() is not None: raise IllegalStateException("Nested #()s are not allowed") with threadBindings(RT.map(ARG_ENV, EMPTY_MAP)): rdr.back() form = read(rdr, True, None, True) drefed = ARG_ENV.deref() sargs = sorted(list(filter(lambda x: x != -1, drefed))) args = [] if len(sargs): for x in range(1, int(str(sargs[-1])) + 1): if x in drefed: args.append(drefed[x]) else: args.append(garg(x)) retsym = drefed[-1] if retsym is not None: args.append(_AMP_) args.append(retsym) vargs = RT.vector(*args) return RT.list(_FN_, vargs, form)