6 inline void factor_vm::primitive_getenv()
8 fixnum e = untag_fixnum(dpeek());
12 PRIMITIVE_FORWARD(getenv)
14 inline void factor_vm::primitive_setenv()
16 fixnum e = untag_fixnum(dpop());
21 PRIMITIVE_FORWARD(setenv)
23 inline void factor_vm::primitive_exit()
25 exit(to_fixnum(dpop()));
28 PRIMITIVE_FORWARD(exit)
30 inline void factor_vm::primitive_micros()
32 box_unsigned_8(current_micros());
35 PRIMITIVE_FORWARD(micros)
37 inline void factor_vm::primitive_sleep()
39 sleep_micros(to_cell(dpop()));
42 PRIMITIVE_FORWARD(sleep)
44 inline void factor_vm::primitive_set_slot()
46 fixnum slot = untag_fixnum(dpop());
47 object *obj = untag<object>(dpop());
50 obj->slots()[slot] = value;
54 PRIMITIVE_FORWARD(set_slot)
56 inline void factor_vm::primitive_load_locals()
58 fixnum count = untag_fixnum(dpop());
59 memcpy((cell *)(rs + sizeof(cell)),(cell *)(ds - sizeof(cell) * (count - 1)),sizeof(cell) * count);
60 ds -= sizeof(cell) * count;
61 rs += sizeof(cell) * count;
64 PRIMITIVE_FORWARD(load_locals)
66 cell factor_vm::clone_object(cell obj_)
68 gc_root<object> obj(obj_,this);
70 if(immediate_p(obj.value()))
74 cell size = object_size(obj.value());
75 object *new_obj = allot_object(obj.type(),size);
76 memcpy(new_obj,obj.untagged(),size);
77 return tag_dynamic(new_obj);
81 inline void factor_vm::primitive_clone()
83 drepl(clone_object(dpeek()));
86 PRIMITIVE_FORWARD(clone)