Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 def deliver(self):
     return eval.invoke_fn(self.w_fn, [], self.ctx)
Exemplo n.º 5
0
 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)