7 inline void factorvm::vmprim_getenv()
9 fixnum e = untag_fixnum(dpeek());
15 PRIMITIVE_GETVM()->vmprim_getenv();
18 inline void factorvm::vmprim_setenv()
20 fixnum e = untag_fixnum(dpop());
27 PRIMITIVE_GETVM()->vmprim_setenv();
30 inline void factorvm::vmprim_exit()
32 exit(to_fixnum(dpop()));
37 PRIMITIVE_GETVM()->vmprim_exit();
40 inline void factorvm::vmprim_micros()
42 box_unsigned_8(current_micros());
47 PRIMITIVE_GETVM()->vmprim_micros();
50 inline void factorvm::vmprim_sleep()
52 sleep_micros(to_cell(dpop()));
57 PRIMITIVE_GETVM()->vmprim_sleep();
60 inline void factorvm::vmprim_set_slot()
62 fixnum slot = untag_fixnum(dpop());
63 object *obj = untag<object>(dpop());
66 obj->slots()[slot] = value;
72 PRIMITIVE_GETVM()->vmprim_set_slot();
75 inline void factorvm::vmprim_load_locals()
77 fixnum count = untag_fixnum(dpop());
78 memcpy((cell *)(rs + sizeof(cell)),(cell *)(ds - sizeof(cell) * (count - 1)),sizeof(cell) * count);
79 ds -= sizeof(cell) * count;
80 rs += sizeof(cell) * count;
83 PRIMITIVE(load_locals)
85 PRIMITIVE_GETVM()->vmprim_load_locals();
88 cell factorvm::clone_object(cell obj_)
90 gc_root<object> obj(obj_,this);
92 if(immediate_p(obj.value()))
96 cell size = object_size(obj.value());
97 object *new_obj = allot_object(obj.type(),size);
98 memcpy(new_obj,obj.untagged(),size);
99 return tag_dynamic(new_obj);
103 inline void factorvm::vmprim_clone()
105 drepl(clone_object(dpeek()));
110 PRIMITIVE_GETVM()->vmprim_clone();