static void check_range_enumerator(sl_vm_t* vm, sl_range_enumerator_t* range_enum) { if(sl_responds_to2(vm, range_enum->current, vm->id.succ)) { if(sl_responds_to2(vm, range_enum->current, range_enum->method)) { return; } } sl_throw_message2(vm, vm->lib.TypeError, "Uniterable type in range"); }
static void output(sl_vm_t* sub_vm, char* buff, size_t len) { slash_t* sl = sub_vm->data; sl_vm_t* vm = sl->host_vm; if(sl_responds_to2(vm, sl->output_handler, vm->id.call)) { SLVAL ex; sl_vm_frame_t catch_frame; SL_TRY(catch_frame, SL_UNWIND_ALL, { SLVAL string = sl_make_string(vm, (uint8_t*)buff, len); sl_send_id(vm, sl->output_handler, vm->id.call, 1, string); }, ex, {
int sl_responds_to(sl_vm_t* vm, SLVAL object, char* id) { return sl_responds_to2(vm, object, sl_intern(vm, id)); }