void TrKernel_init(VM) { OBJ m = tr_defmodule("Kernel"); TrModule_include(vm, TR_CORE_CLASS(Object), m); tr_def(m, "puts", TrKernel_puts, -1); tr_def(m, "eval", TrKernel_eval, -1); tr_def(m, "load", TrKernel_load, 1); tr_def(m, "binding", TrKernel_binding, 0); tr_def(m, "raise", TrKernel_raise, -1); }
OBJ TrVM::defclass(OBJ name, TrBlock *b, OBJ super) { TrVM *vm = this; OBJ mod = TrObject_const_get(this, frame->klass, name); if (!mod) /* new module/class */ { mod = (OBJ)new TrClass(this, name, super ? super : TR_CORE_CLASS(Object)); TrObject_const_set(this, frame->klass, name, mod); } OBJ ret = TR_NIL; TR_WITH_FRAME(mod, mod, 0, { ret = vm->interpret(frame, b, 0, 0, 0, 0); });