def invoke(self, args, ctx): form = args[0] if not isinstance(form, space.W_List): return form head = form.first() if not isinstance(head, space.W_Sym): return form st = ctx.st() val = head.val if not st.has_macro(val): return form macro_fn = st.get_fn(st.get_macro(val)) return eval.invoke_fn(macro_fn, space.unwrap(form.rest()), ctx)
def invoke(self, args, ctx): w_atom = space.cast(args[0], space.W_Atom) w_fn = space.cast(args[1], space.W_Fun) w_new = eval.invoke_fn(w_fn, [w_atom.deref()], ctx) w_atom.reset(w_new) return w_new
def invoke(self, args, ctx): w_var = space.cast(args[0], space.W_Var) w_fn = space.cast(args[1], space.W_Fun) w_new = eval.invoke_fn(w_fn, [w_var.w_val], ctx) ctx.bindings().alter_var(w_var, w_new) return w_new
def deliver(self): return eval.invoke_fn(self.w_fn, [], self.ctx)
def invoke(self, args, ctx): w_var = space.cast(args[0], space.W_Var) w_fn = space.cast(args[1], space.W_Fun) w_meta = eval.invoke_fn(w_fn, [w_var.meta()], ctx) w_var.set_meta(w_meta)