/* * We have collected all of the sample data. Create a type 0 function stucture. */ static int sampled_data_finish(i_ctx_t *i_ctx_p) { os_ptr op = osp; gs_sampled_data_enum *penum = senum; /* Build a type 0 function using the given parameters */ gs_function_Sd_params_t * params = (gs_function_Sd_params_t *)&penum->pfn->params; gs_function_t * pfn; ref cref; /* closure */ int code = gs_function_Sd_init(&pfn, params, imemory); if (code < 0) return code; code = ialloc_ref_array(&cref, a_executable | a_execute, 2, "sampled_data_finish(cref)"); if (code < 0) return code; make_istruct_new(cref.value.refs, a_executable | a_execute, pfn); make_oper_new(cref.value.refs + 1, 0, zexecfunction); ref_assign(op, &cref); esp -= estack_storage; ifree_object(penum->pfn, "sampled_data_finish(pfn)"); ifree_object(penum, "sampled_data_finish(enum)"); return o_pop_estack; }
/* Create a function procedure from a function structure. */ static int make_function_proc(i_ctx_t *i_ctx_p, ref *op, gs_function_t *pfn) { ref cref; /* closure */ int code; code = ialloc_ref_array(&cref, a_executable | a_execute, 2, ".buildfunction"); if (code < 0) return code; make_istruct_new(cref.value.refs, a_executable | a_execute, pfn); make_oper_new(cref.value.refs + 1, 0, zexecfunction); ref_assign(op, &cref); return 0; }