Beispiel #1
0
static OBJ TrKernel_eval(VM, OBJ self, int argc, OBJ argv[]) {
  UNUSED(self);
  if (argc < 1) tr_raise(ArgumentError, "string argument required");
  if (argc > 4) tr_raise(ArgumentError, "Too much arguments");
  OBJ string = argv[0];
  TrFrame *f = (argc > 1 && argv[1]) ? TR_CBINDING(argv[1])->frame : vm->frame;
  char *filename = (argc > 2 && argv[1]) ? TR_STR_PTR(argv[2]) : "<eval>";
  size_t lineno = argc > 3 ? TR_FIX2INT(argv[3]) : 0;
  TrBlock *blk = TrBlock_compile(vm, TR_STR_PTR(string), filename, lineno);
  if (!blk) return TR_UNDEF;
  if (vm->debug) TrBlock_dump(vm, blk);
  return TrVM_run(vm, blk, f->self, f->class, kv_size(blk->locals), f->stack);
}
Beispiel #2
0
static inline int TrArray_at2index(VM, OBJ self, OBJ at) {
  int i = TR_FIX2INT(at);
  if (i < 0) i = TR_ARRAY_SIZE(self) + i;
  return i;
}