예제 #1
0
파일: cont.c 프로젝트: hopkinsr/picrin
static pic_value
pic_cont_call_with_values(pic_state *pic)
{
  struct pic_proc *producer, *consumer;
  size_t argc;
  pic_value args[256];

  pic_get_args(pic, "ll", &producer, &consumer);

  pic_apply(pic, producer, pic_nil_value());

  argc = pic_receive(pic, 256, args);

  return pic_apply_trampoline(pic, consumer, pic_list_by_array(pic, argc, args));
}
예제 #2
0
파일: cont.c 프로젝트: ktakashi/picrin
static pic_value
pic_cont_call_with_values(pic_state *pic)
{
  struct pic_proc *producer, *consumer;
  int argc;
  pic_vec *args;

  pic_get_args(pic, "ll", &producer, &consumer);

  pic_apply0(pic, producer);

  argc = pic_receive(pic, 0, NULL);
  args = pic_make_vec(pic, argc);

  pic_receive(pic, argc, args->data);

  return pic_apply_trampoline(pic, consumer, argc, args->data);
}
예제 #3
0
파일: proc.c 프로젝트: omasanori/benz
static pic_value
pic_proc_apply(pic_state *pic)
{
  struct pic_proc *proc;
  pic_value *args;
  size_t argc;
  pic_value arg_list;

  pic_get_args(pic, "l*", &proc, &argc, &args);

  if (argc == 0) {
    pic_errorf(pic, "apply: wrong number of arguments");
  }

  arg_list = args[--argc];
  while (argc--) {
    arg_list = pic_cons(pic, args[argc], arg_list);
  }

  return pic_apply_trampoline(pic, proc, arg_list);
}