7 static void r_array_oncopy_rvmreg(rarray_t *array)
12 for (index = 0; index < array->len; index++) {
13 r = (rvmreg_t *)r_array_slot(array, index);
19 static void r_array_ondestroy_rvmreg(rarray_t *array)
24 for (index = 0; index < array->len; index++) {
25 r = (rvmreg_t *)r_array_slot(array, index);
31 rarray_t *r_array_create_rvmreg()
33 rarray_t *array = r_array_create(sizeof(rvmreg_t));
35 array->oncopy = r_array_oncopy_rvmreg;
36 array->ondestroy = r_array_ondestroy_rvmreg;
42 rharray_t *r_harray_create_rvmreg()
44 rharray_t *harray = r_harray_create(sizeof(rvmreg_t));
46 harray->members->oncopy = r_array_oncopy_rvmreg;
47 harray->members->ondestroy = r_array_ondestroy_rvmreg;
53 rvmreg_t rvm_reg_create_string_ansi(const rchar *s)
56 r_memset(&r, 0, sizeof(r));
57 RVM_REG_SETP(&r, r_string_create_from_ansistr(s));
58 RVM_REG_SETTYPE(&r, RVM_DTYPE_STRING);
59 RVM_REG_SETFLAG(&r, RVM_INFOBIT_ROBJECT);
64 rvmreg_t rvm_reg_create_string(const rstr_t *s)
67 r_memset(&r, 0, sizeof(r));
68 RVM_REG_SETP(&r, r_string_create_from_rstr(s));
69 RVM_REG_SETTYPE(&r, RVM_DTYPE_STRING);
70 RVM_REG_SETFLAG(&r, RVM_INFOBIT_ROBJECT);
74 rvmreg_t rvm_reg_create_refreg()
77 r_memset(&r, 0, sizeof(r));
78 RVM_REG_SETP(&r, r_refreg_create());
79 RVM_REG_SETTYPE(&r, RVM_DTYPE_REFREG);
80 RVM_REG_SETFLAG(&r, RVM_INFOBIT_ROBJECT);
85 rvmreg_t rvm_reg_create_array()
88 r_memset(&r, 0, sizeof(r));
89 rvm_reg_setarray(&r, r_array_create_rvmreg());
94 rvmreg_t rvm_reg_create_harray()
97 r_memset(&r, 0, sizeof(r));
98 rvm_reg_setharray(&r, r_harray_create_rvmreg());
102 void rvm_reg_setstring(rvmreg_t *r, rstring_t *ptr)
104 RVM_REG_SETP(r, ptr);
105 RVM_REG_SETTYPE(r, RVM_DTYPE_STRING);
106 RVM_REG_SETFLAG(r, RVM_INFOBIT_ROBJECT);
110 void rvm_reg_setarray(rvmreg_t *r, rarray_t *ptr)
112 RVM_REG_SETP(r, ptr);
113 RVM_REG_SETTYPE(r, RVM_DTYPE_ARRAY);
114 RVM_REG_SETFLAG(r, RVM_INFOBIT_ROBJECT);
118 void rvm_reg_setharray(rvmreg_t *r, rharray_t *ptr)
120 RVM_REG_SETP(r, ptr);
121 RVM_REG_SETTYPE(r, RVM_DTYPE_HARRAY);
122 RVM_REG_SETFLAG(r, RVM_INFOBIT_ROBJECT);
126 rvmreg_t rvm_reg_create_double(rdouble d)
129 r_memset(&r, 0, sizeof(r));
131 RVM_REG_SETTYPE(&r, RVM_DTYPE_DOUBLE);
136 rvmreg_t rvm_reg_create_long(rlong l)
139 r_memset(&r, 0, sizeof(r));
140 rvm_reg_setlong(&r, l);
145 void rvm_reg_cleanup(rvmreg_t *reg)
147 if (rvm_reg_gettype(reg) == RVM_DTYPE_REFREG)
148 r_ref_dec((rref_t*)RVM_REG_GETP(reg));
149 else if (rvm_reg_tstflag(reg, RVM_INFOBIT_ROBJECT)) {
150 r_object_destroy((robject_t*)RVM_REG_GETP(reg));
156 rvmreg_t *rvm_reg_copy(rvmreg_t *dst, const rvmreg_t *src)
160 if (rvm_reg_tstflag(dst, RVM_INFOBIT_ROBJECT))
161 dst->v.p = r_object_copy(dst->v.p);
166 rvmreg_t *rvm_reg_refer(rvmreg_t *dst, const rvmreg_t *src)
168 if (rvm_reg_gettype(dst) == RVM_DTYPE_REFREG) {
171 r_ref_inc((rref_t*)RVM_REG_GETP(dst));
178 void rvm_reg_settype(rvmreg_t *r, ruint type)
180 RVM_REG_SETTYPE(r, type);
184 ruint rvm_reg_gettype(const rvmreg_t *r)
186 return RVM_REG_GETTYPE(r);
190 rboolean rvm_reg_tstflag(const rvmreg_t *r, ruint16 flag)
192 return RVM_REG_TSTFLAG(r, flag);
196 void rvm_reg_setflag(rvmreg_t *r, ruint16 flag)
198 RVM_REG_SETFLAG(r, flag);
202 void rvm_reg_clrflag(rvmreg_t *r, ruint16 flag)
204 RVM_REG_CLRFLAG(r, flag);
208 void rvm_reg_setlong(rvmreg_t *r, rlong l)
211 RVM_REG_SETTYPE(r, RVM_DTYPE_LONG);
212 RVM_REG_CLRFLAG(r, RVM_INFOBIT_ROBJECT);
216 void rvm_reg_setdouble(rvmreg_t *r, rdouble d)
219 RVM_REG_SETTYPE(r, RVM_DTYPE_DOUBLE);
220 RVM_REG_CLRFLAG(r, RVM_INFOBIT_ROBJECT);
225 void rvm_reg_setrefreg(rvmreg_t *r, struct rrefreg_s *ptr)
227 RVM_REG_SETP(r, ptr);
228 RVM_REG_SETTYPE(r, RVM_DTYPE_REFREG);
229 RVM_REG_SETFLAG(r, RVM_INFOBIT_ROBJECT);
233 void rvm_reg_convert_to_refreg(rvmreg_t *reg)
235 rrefreg_t * refreg = NULL;
237 if (rvm_reg_gettype(reg) == RVM_DTYPE_REFREG)
239 refreg = r_refreg_create();
240 *REFREG2REGPTR(refreg) = *reg;
242 rvm_reg_setrefreg(reg, refreg);
246 rvmreg_t *rvm_reg_unshadow(rvmreg_t *reg)
248 if (rvm_reg_gettype(reg) != RVM_DTYPE_REFREG)
250 return REFREG2REGPTR(RVM_REG_GETP(reg));