Ejemplo n.º 1
0
Archivo: eval.c Proyecto: samsonjs/lake
static LakeVal *_cond(LakeCtx *ctx, Env *env, LakeList *expr)
{
  static LakeVal *ELSE = NULL;
  if (!ELSE) ELSE = VAL(sym_intern(ctx, "else"));

  list_shift(expr); /* "cond" token */
  LakeVal *pred;
  LakeList *conseq;
  while (LIST_N(expr)) {
    if (!lake_is_type(TYPE_LIST, LIST_VAL(expr, 0))) {
      invalid_special_form(expr, "expected a (predicate consequence) pair");
      return NULL;
    }
    conseq = LIST(list_shift(expr));
    pred = list_shift(conseq);
    if (pred == ELSE || lake_is_truthy(ctx, eval(ctx, env, pred))) {
      return eval_exprs1(ctx, env, conseq);
    }
  }
  return NULL;
}
Ejemplo n.º 2
0
MRB_API mrb_sym
mrb_intern_static(mrb_state *mrb, const char *name, size_t len)
{
  return sym_intern(mrb, name, len, TRUE);
}
Ejemplo n.º 3
0
mrb_sym
mrb_intern(mrb_state *mrb, const char *name, size_t len)
{
  return sym_intern(mrb, name, len, 0);
}