7 inline void factorvm::primitive_getenv()
9 fixnum e = untag_fixnum(dpeek());
15 PRIMITIVE_GETVM()->primitive_getenv();
18 inline void factorvm::primitive_setenv()
20 fixnum e = untag_fixnum(dpop());
27 PRIMITIVE_GETVM()->primitive_setenv();
30 inline void factorvm::primitive_exit()
32 exit(to_fixnum(dpop()));
37 PRIMITIVE_GETVM()->primitive_exit();
40 inline void factorvm::primitive_micros()
42 box_unsigned_8(current_micros());
47 PRIMITIVE_GETVM()->primitive_micros();
50 inline void factorvm::primitive_sleep()
52 sleep_micros(to_cell(dpop()));
57 PRIMITIVE_GETVM()->primitive_sleep();
60 inline void factorvm::primitive_set_slot()
62 fixnum slot = untag_fixnum(dpop());
63 object *obj = untag<object>(dpop());
66 obj->slots()[slot] = value;
72 PRIMITIVE_GETVM()->primitive_set_slot();
75 inline void factorvm::primitive_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()->primitive_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::primitive_clone()
105 drepl(clone_object(dpeek()));
110 PRIMITIVE_GETVM()->primitive_clone();