/**
 * See Copyright Notice in picrin.h
 */

#include "picrin.h"

pic_value
pic_eval(pic_state *pic, pic_value program, struct pic_env *env)
{
  struct pic_proc *proc;

  proc = pic_compile(pic, program, env);

  return pic_apply0(pic, proc);
}

static pic_value
pic_eval_eval(pic_state *pic)
{
  pic_value program, env;

  pic_get_args(pic, "oo", &program, &env);

  pic_assert_type(pic, env, env);

  return pic_eval(pic, program, pic_env_ptr(env));
}

void
pic_init_eval(pic_state *pic)
{
  pic_defun(pic, "eval", pic_eval_eval);
}