6 inline void factor_vm::primitive_getenv()
8 fixnum e = untag_fixnum(dpeek());
14 PRIMITIVE_GETVM()->primitive_getenv();
17 inline void factor_vm::primitive_setenv()
19 fixnum e = untag_fixnum(dpop());
26 PRIMITIVE_GETVM()->primitive_setenv();
29 inline void factor_vm::primitive_exit()
31 exit(to_fixnum(dpop()));
36 PRIMITIVE_GETVM()->primitive_exit();
39 inline void factor_vm::primitive_micros()
41 box_unsigned_8(current_micros());
46 PRIMITIVE_GETVM()->primitive_micros();
49 inline void factor_vm::primitive_sleep()
51 sleep_micros(to_cell(dpop()));
56 PRIMITIVE_GETVM()->primitive_sleep();
59 inline void factor_vm::primitive_set_slot()
61 fixnum slot = untag_fixnum(dpop());
62 object *obj = untag<object>(dpop());
65 obj->slots()[slot] = value;
71 PRIMITIVE_GETVM()->primitive_set_slot();
74 inline void factor_vm::primitive_load_locals()
76 fixnum count = untag_fixnum(dpop());
77 memcpy((cell *)(rs + sizeof(cell)),(cell *)(ds - sizeof(cell) * (count - 1)),sizeof(cell) * count);
78 ds -= sizeof(cell) * count;
79 rs += sizeof(cell) * count;
82 PRIMITIVE(load_locals)
84 PRIMITIVE_GETVM()->primitive_load_locals();
87 cell factor_vm::clone_object(cell obj_)
89 gc_root<object> obj(obj_,this);
91 if(immediate_p(obj.value()))
95 cell size = object_size(obj.value());
96 object *new_obj = allot_object(obj.type(),size);
97 memcpy(new_obj,obj.untagged(),size);
98 return tag_dynamic(new_obj);
102 inline void factor_vm::primitive_clone()
104 drepl(clone_object(dpeek()));
109 PRIMITIVE_GETVM()->primitive_clone();