Skip to content

Commit

Permalink
Migrate parametric type usage of special return
Browse files Browse the repository at this point in the history
  • Loading branch information
jnthn committed Nov 3, 2021
1 parent 9b499f9 commit 3d21363
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions src/6model/parametric.c
Expand Up @@ -77,18 +77,12 @@ static void finish_parameterizing(MVMThreadContext *tc, void *sr_data) {
}
uv_mutex_unlock(&tc->instance->mutex_parameterization_add);
});

/* Clean up parametric return data, now we're finished with it. */
MVM_free(prd);
}
static void mark_parameterize_sr_data(MVMThreadContext *tc, MVMFrame *frame, MVMGCWorklist *worklist) {
ParameterizeReturnData *prd = (ParameterizeReturnData *)frame->extra->special_return_data;
static void mark_parameterize_sr_data(MVMThreadContext *tc, void *sr_data, MVMGCWorklist *worklist) {
ParameterizeReturnData *prd = (ParameterizeReturnData *)sr_data;
MVM_gc_worklist_add(tc, worklist, &(prd->parametric_type));
MVM_gc_worklist_add(tc, worklist, &(prd->parameters));
}
static void free_parameterize_sr_data(MVMThreadContext *tc, void *sr_data) {
MVM_free(sr_data);
}
void MVM_6model_parametric_parameterize(MVMThreadContext *tc, MVMObject *type, MVMObject *params,
MVMRegister *result) {
/* Ensure we have a parametric type. */
Expand All @@ -104,12 +98,12 @@ void MVM_6model_parametric_parameterize(MVMThreadContext *tc, MVMObject *type, M
}

/* It wasn't found; run parameterizer. */
ParameterizeReturnData *prd = MVM_malloc(sizeof(ParameterizeReturnData));
prd->parametric_type = type;
prd->parameters = params;
prd->result = result;
MVM_frame_special_return(tc, tc->cur_frame, finish_parameterizing, free_parameterize_sr_data,
prd, mark_parameterize_sr_data);
ParameterizeReturnData *prd = MVM_callstack_allocate_special_return(tc,
finish_parameterizing, NULL, mark_parameterize_sr_data,
sizeof(ParameterizeReturnData));
prd->parametric_type = type;
prd->parameters = params;
prd->result = result;
MVMCallStackArgsFromC *args_record = MVM_callstack_allocate_args_from_c(tc,
MVM_callsite_get_common(tc, MVM_CALLSITE_ID_OBJ_OBJ));
args_record->args.source[0].o = st->WHAT;
Expand Down

0 comments on commit 3d21363

Please sign in to comment.