[experimental] use attributes for cv implementation
This commit is contained in:
parent
98bb47dfb6
commit
f46114ca03
src
24
src/proc.c
24
src/proc.c
|
@ -61,42 +61,24 @@ pic_proc_attr(pic_state *pic, struct pic_proc *proc)
|
||||||
void
|
void
|
||||||
pic_proc_cv_init(pic_state *pic, struct pic_proc *proc, size_t cv_size)
|
pic_proc_cv_init(pic_state *pic, struct pic_proc *proc, size_t cv_size)
|
||||||
{
|
{
|
||||||
struct pic_env *env;
|
|
||||||
|
|
||||||
if (proc->env != NULL) {
|
|
||||||
pic_error(pic, "env slot already in use");
|
|
||||||
}
|
|
||||||
env = (struct pic_env *)pic_obj_alloc(pic, sizeof(struct pic_env), PIC_TT_ENV);
|
|
||||||
env->regc = cv_size;
|
|
||||||
env->regs = (pic_value *)pic_calloc(pic, cv_size, sizeof(pic_value));
|
|
||||||
env->up = NULL;
|
|
||||||
|
|
||||||
proc->env = env;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
pic_proc_cv_size(pic_state *pic, struct pic_proc *proc)
|
pic_proc_cv_size(pic_state *pic, struct pic_proc *proc)
|
||||||
{
|
{
|
||||||
UNUSED(pic);
|
return 0;
|
||||||
return proc->env ? proc->env->regc : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pic_value
|
pic_value
|
||||||
pic_proc_cv_ref(pic_state *pic, struct pic_proc *proc, size_t i)
|
pic_proc_cv_ref(pic_state *pic, struct pic_proc *proc, size_t i)
|
||||||
{
|
{
|
||||||
if (proc->env == NULL) {
|
return pic_dict_ref(pic, pic_proc_attr(pic, proc), i); /* FIXME */
|
||||||
pic_error(pic, "no closed env");
|
|
||||||
}
|
|
||||||
return proc->env->regs[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pic_proc_cv_set(pic_state *pic, struct pic_proc *proc, size_t i, pic_value v)
|
pic_proc_cv_set(pic_state *pic, struct pic_proc *proc, size_t i, pic_value v)
|
||||||
{
|
{
|
||||||
if (proc->env == NULL) {
|
pic_dict_set(pic, pic_proc_attr(pic, proc), i, v); /* FIXME */
|
||||||
pic_error(pic, "no closed env");
|
|
||||||
}
|
|
||||||
proc->env->regs[i] = v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static pic_value
|
static pic_value
|
||||||
|
|
Loading…
Reference in New Issue