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; }
MRB_API mrb_sym mrb_intern_static(mrb_state *mrb, const char *name, size_t len) { return sym_intern(mrb, name, len, TRUE); }
mrb_sym mrb_intern(mrb_state *mrb, const char *name, size_t len) { return sym_intern(mrb, name, len, 0); }