static STRING *get_str(PARROT_INTERP, STable *st, void *data) { CStrBody *body = (CStrBody *) data; PMC *old_ctx, *cappy, *meth, *enc_pmc; STRING *enc; STR_VTABLE *encoding; if (!body->cstr) return (STRING *) NULL; /* Look up "encoding" method. */ meth = VTABLE_find_method(interp, st->WHAT, Parrot_str_new_constant(interp, "encoding")); if (PMC_IS_NULL(meth)) Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, "CStr representation expects an 'encoding' method, specifying the encoding"); old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, st->WHAT); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); enc_pmc = decontainerize(interp, VTABLE_get_pmc_keyed_int(interp, cappy, 0)); enc = REPR(enc_pmc)->box_funcs->get_str(interp, STABLE(enc_pmc), OBJECT_BODY(enc_pmc)); return new_from_cstring(interp, body->cstr, enc); }
PARROT_EXPORT void Parrot_pcc_invoke_sub_from_c_args(PARROT_INTERP, ARGIN(PMC *sub_obj), ARGIN(const char *sig), ...) { ASSERT_ARGS(Parrot_pcc_invoke_sub_from_c_args) PMC *call_obj; va_list args; const char *arg_sig, *ret_sig; PMC * const old_call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_split_signature_string(sig, &arg_sig, &ret_sig); va_start(args, sig); call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_obj); Parrot_pcc_invoke_from_sig_object(interp, sub_obj, call_obj); call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args, PARROT_ERRORS_RESULT_COUNT_FLAG); va_end(args); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_call_obj); }
/* Sets up a very simple attribute meta-object. Just supports having a * name, and even uses the P6str representation to store it, so that's * really all that it supports. */ PMC * SixModelObject_setup_knowhow_attribute(PARROT_INTERP, PMC *sc, PMC *knowhow) { PMC *old_ctx, *cappy, *meth, *knowhow_attr, *how; /* Create a new KnowHOWAttribute type using P6str repr.. */ meth = STABLE(knowhow)->find_method(interp, knowhow, Parrot_str_new_constant(interp, "new_type"), NO_HINT); old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, knowhow); VTABLE_set_string_keyed_str(interp, cappy, name_str, Parrot_str_new_constant(interp, "KnowHOWAttribute")); VTABLE_set_string_keyed_str(interp, cappy, repr_str, Parrot_str_new_constant(interp, "P6str")); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); knowhow_attr = VTABLE_get_pmc_keyed_int(interp, cappy, 0); how = STABLE(knowhow_attr)->HOW; /* Add new method. */ meth = STABLE(how)->find_method(interp, how, Parrot_str_new_constant(interp, "add_method"), NO_HINT); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, how); VTABLE_push_pmc(interp, cappy, knowhow_attr); VTABLE_push_string(interp, cappy, Parrot_str_new_constant(interp, "new")); VTABLE_push_pmc(interp, cappy, wrap_c(interp, F2DPTR(attr_new))); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); /* Add name method. */ cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, how); VTABLE_push_pmc(interp, cappy, knowhow_attr); VTABLE_push_string(interp, cappy, name_str); VTABLE_push_pmc(interp, cappy, wrap_c(interp, F2DPTR(attr_name))); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); /* Compose. */ meth = STABLE(knowhow)->find_method(interp, how, Parrot_str_new_constant(interp, "compose"), NO_HINT); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, how); VTABLE_push_pmc(interp, cappy, knowhow_attr); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); /* Associate the created object with the intial core serialization * context. */ VTABLE_set_pmc_keyed_int(interp, sc, 2, knowhow_attr); SC_PMC(knowhow_attr) = sc; STABLE(knowhow_attr)->sc = sc; return knowhow_attr; }
/* Introspects the name. */ static void name(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); STRING *name = ((KnowHOWREPRInstance *)PMC_data(self))->body.name; unused = Parrot_pcc_build_call_from_c_args(interp, capture, "S", name); }
static void pcf_ptr_ptr_STRING(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef void *(* func_t)(void *, STRING *); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); PMC * t_0; void * v_0; PMC * t_1; void * v_1; STRING * t_2; STRING * v_2; Parrot_pcc_fill_params_from_c_args(interp, call_object, "PS", &t_1, &t_2); v_1 = PMC_IS_NULL(t_1) ? NULL : VTABLE_get_pointer(interp, t_1);; v_2 = t_2; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(v_1, v_2); if (v_0 != NULL) { t_0 = Parrot_pmc_new(interp, enum_class_UnManagedStruct); VTABLE_set_pointer(interp, t_0, v_0); } else { t_0 = PMCNULL; }; Parrot_pcc_set_call_from_c_args(interp, call_object, "P", t_0); }
static void pcf_ptr_int_int_int_int(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef void *(* func_t)(int, int, int, int); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); PMC * t_0; void * v_0; INTVAL t_1; int v_1; INTVAL t_2; int v_2; INTVAL t_3; int v_3; INTVAL t_4; int v_4; Parrot_pcc_fill_params_from_c_args(interp, call_object, "IIII", &t_1, &t_2, &t_3, &t_4); v_1 = (int)t_1; v_2 = (int)t_2; v_3 = (int)t_3; v_4 = (int)t_4; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(v_1, v_2, v_3, v_4); if (v_0 != NULL) { t_0 = Parrot_pmc_new(interp, enum_class_UnManagedStruct); VTABLE_set_pointer(interp, t_0, v_0); } else { t_0 = PMCNULL; }; Parrot_pcc_set_call_from_c_args(interp, call_object, "P", t_0); }
/* Attribute name introspection. */ static void attr_name(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); STRING *name = REPR(self)->box_funcs->get_str(interp, STABLE(self), OBJECT_BODY(self)); unused = Parrot_pcc_build_call_from_c_args(interp, capture, "S", name); }
/* Creates a new type with this HOW as its meta-object. */ static void new_type(PARROT_INTERP, PMC *nci) { PMC * unused; /* We first create a new HOW instance. */ PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); PMC *HOW = REPR(self)->allocate(interp, STABLE(self)); /* See if we have a representation name; if not default to P6opaque. */ STRING *repr_name = VTABLE_exists_keyed_str(interp, capture, repr_str) ? VTABLE_get_string_keyed_str(interp, capture, repr_str) : p6opaque_str; /* Create a new type object of the desired REPR. (Note that we can't * default to KnowHOWREPR here, since it doesn't know how to actually * store attributes, it's just for bootstrapping knowhow's. */ REPROps *repr_to_use = REPR_get_by_name(interp, repr_name); PMC *type_object = repr_to_use->type_object_for(interp, HOW); /* See if we were given a name; put it into the meta-object if so. */ STRING *name = VTABLE_exists_keyed_str(interp, capture, name_str) ? VTABLE_get_string_keyed_str(interp, capture, name_str) : empty_str; REPR(HOW)->initialize(interp, STABLE(HOW), OBJECT_BODY(HOW)); ((KnowHOWREPRInstance *)PMC_data(HOW))->body.name = name; PARROT_GC_WRITE_BARRIER(interp, HOW); /* Set .WHO to an empty hash. */ STABLE(type_object)->WHO = Parrot_pmc_new(interp, enum_class_Hash); PARROT_GC_WRITE_BARRIER(interp, STABLE_PMC(type_object)); /* Put it into capture to act as return value. */ unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", type_object); }
/* Introspects the methods. For now just hand back real method table. */ static void methods(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); PMC *meths = ((KnowHOWREPRInstance *)PMC_data(self))->body.methods; unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", meths); }
/* Introspects the MRO. That's just a list with ourself. */ static void mro(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *obj = VTABLE_get_pmc_keyed_int(interp, capture, 1); PMC *mro = Parrot_pmc_new(interp, enum_class_ResizablePMCArray); VTABLE_push_pmc(interp, mro, STABLE(obj)->WHAT); unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", mro); }
/* Introspects the parents. Since a KnowHOW doesn't support inheritance, * just hand back an empty list. */ static void parents(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *empty = Parrot_pmc_new(interp, enum_class_FixedPMCArray); UNUSED(nci); unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", empty); }
/* Attribute new method. */ static void attr_new(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *type = VTABLE_get_pmc_keyed_int(interp, capture, 0); STRING *name = VTABLE_get_string_keyed_str(interp, capture, name_str); PMC *self = REPR(type)->allocate(interp, STABLE(type)); REPR(self)->box_funcs->set_str(interp, STABLE(self), OBJECT_BODY(self), name); unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", self); }
PARROT_EXPORT void Parrot_pcc_invoke_method_from_c_args(PARROT_INTERP, ARGIN(PMC* pmc), ARGMOD(STRING *method_name), ARGIN(const char *signature), ...) { ASSERT_ARGS(Parrot_pcc_invoke_method_from_c_args) PMC *call_obj; PMC *sub_obj; va_list args; const char *arg_sig, *ret_sig; PMC *arg_flags; PMC * const old_call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_split_signature_string(signature, &arg_sig, &ret_sig); va_start(args, signature); call_obj = Parrot_pcc_build_call_from_varargs(interp, PMCNULL, arg_sig, &args); /* inlined version of pcc_add_invocant */ arg_flags = PARROT_CALLCONTEXT(call_obj)->arg_flags; VTABLE_unshift_integer(interp, arg_flags, PARROT_ARG_PMC | PARROT_ARG_INVOCANT); Parrot_CallContext_unshift_pmc(interp, call_obj, pmc); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), call_obj); /* Find the subroutine object as a named method on pmc */ sub_obj = VTABLE_find_method(interp, pmc, method_name); if (UNLIKELY(PMC_IS_NULL(sub_obj))) Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_METHOD_NOT_FOUND, "Method '%Ss' not found", method_name); /* Invoke the subroutine object with the given CallContext object */ Parrot_pcc_invoke_from_sig_object(interp, sub_obj, call_obj); call_obj = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_fill_params_from_varargs(interp, call_obj, ret_sig, &args, PARROT_ERRORS_RESULT_COUNT_FLAG); va_end(args); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_call_obj); }
/* Composes the meta-object. */ static void compose(PARROT_INTERP, PMC *nci) { PMC * unused; PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); PMC *obj = VTABLE_get_pmc_keyed_int(interp, capture, 1); STABLE(obj)->method_cache = ((KnowHOWREPRInstance *)PMC_data(self))->body.methods; STABLE(obj)->mode_flags = METHOD_CACHE_AUTHORITATIVE; STABLE(obj)->type_check_cache_length = 1; STABLE(obj)->type_check_cache = (PMC **)mem_sys_allocate(sizeof(PMC *)); STABLE(obj)->type_check_cache[0] = obj; unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", obj); }
/* Finds a method. */ static void find_method(PARROT_INTERP, PMC *nci) { PMC * unused; /* Get methods table out of meta-object and look up method. */ PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); PMC *methods = ((KnowHOWREPRInstance *)PMC_data(self))->body.methods; STRING *name = VTABLE_get_string_keyed_int(interp, capture, 2); PMC *method = VTABLE_get_pmc_keyed_str(interp, methods, name); /* Put into capture to act as return value. */ unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", method); }
/* Adds an attribute meta-object to the list. */ static void add_attribute(PARROT_INTERP, PMC *nci) { PMC * unused; /* Get attributes list out of meta-object. */ PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); PMC *attrs = ((KnowHOWREPRInstance *)PMC_data(self))->body.attributes; /* Add meta-attribute to it. */ PMC *meta_attr = VTABLE_get_pmc_keyed_int(interp, capture, 2); VTABLE_push_pmc(interp, attrs, meta_attr); unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", meta_attr); }
/* Helper to make an accessor call. */ static PMC * accessor_call(PARROT_INTERP, PMC *obj, STRING *name) { PMC *old_ctx, *cappy; /* Look up method; if there is none hand back a null. */ PMC *meth = VTABLE_find_method(interp, obj, name); if (PMC_IS_NULL(meth)) return meth; /* Set up call capture. */ old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, obj); /* Call. */ Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); /* Grab result. */ cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); return VTABLE_get_pmc_keyed_int(interp, cappy, 0); }
/* This takes a signature element and either runs the closure to get a default * value if there is one, or creates an appropriate undefined-ish thingy. */ static PMC * Rakudo_binding_handle_optional(PARROT_INTERP, Rakudo_Parameter *param, PMC *lexpad) { PMC *cur_lex; /* Is the "get default from outer" flag set? */ if (param->flags & SIG_ELEM_DEFAULT_FROM_OUTER) { PMC *outer_ctx = Parrot_pcc_get_outer_ctx(interp, CURRENT_CONTEXT(interp)); PMC *outer_lexpad = Parrot_pcc_get_lex_pad(interp, outer_ctx); return VTABLE_get_pmc_keyed_str(interp, outer_lexpad, param->variable_name); } /* Do we have a default value or value closure? */ else if (!PMC_IS_NULL(param->default_value)) { if (param->flags & SIG_ELEM_DEFAULT_IS_LITERAL) { return param->default_value; } else { /* Thunk; run it to get a value. */ PMC *old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *cappy = Parrot_pmc_new(interp, enum_class_CallContext); Parrot_pcc_invoke_from_sig_object(interp, param->default_value, cappy); cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); return VTABLE_get_pmc_keyed_int(interp, cappy, 0); } } /* Otherwise, go by sigil to pick the correct default type of value. */ else { if (param->flags & SIG_ELEM_ARRAY_SIGIL) { return Rakudo_binding_create_positional(interp, PMCNULL); } else if (param->flags & SIG_ELEM_HASH_SIGIL) { return Rakudo_binding_create_hash(interp, Parrot_pmc_new(interp, enum_class_Hash)); } else { return param->nominal_type; } } }
static void set_str(PARROT_INTERP, STable *st, void *data, STRING *value) { CStrBody *body = (CStrBody *) data; PMC *old_ctx, *cappy, *meth, *enc_pmc; STRING *enc; STR_VTABLE *encoding; if(body->cstr) mem_sys_free(body->cstr); /* Look up "encoding" method. */ meth = VTABLE_find_method(interp, st->WHAT, Parrot_str_new_constant(interp, "encoding")); if (PMC_IS_NULL(meth)) Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, "CStr representation expects an 'encoding' method, specifying the encoding"); old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, st->WHAT); Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); enc_pmc = decontainerize(interp, VTABLE_get_pmc_keyed_int(interp, cappy, 0)); enc = REPR(enc_pmc)->box_funcs->get_str(interp, STABLE(enc_pmc), OBJECT_BODY(enc_pmc)); if (STRING_equal(interp, enc, Parrot_str_new_constant(interp, "utf8"))) encoding = Parrot_utf8_encoding_ptr; else if (STRING_equal(interp, enc, Parrot_str_new_constant(interp, "utf16"))) encoding = Parrot_utf16_encoding_ptr; else if (STRING_equal(interp, enc, Parrot_str_new_constant(interp, "ascii"))) encoding = Parrot_ascii_encoding_ptr; else Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, "Unknown encoding passed to CStr representation"); body->cstr = Parrot_str_to_encoded_cstring(interp, value, encoding); }
/* Helper to make an introspection call, possibly with :local. */ static PMC * introspection_call(PARROT_INTERP, PMC *WHAT, PMC *HOW, STRING *name, INTVAL local) { PMC *old_ctx, *cappy; /* Look up method; if there is none hand back a null. */ PMC *meth = VTABLE_find_method(interp, HOW, name); if (PMC_IS_NULL(meth)) return meth; /* Set up call capture. */ old_ctx = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); cappy = Parrot_pmc_new(interp, enum_class_CallContext); VTABLE_push_pmc(interp, cappy, HOW); VTABLE_push_pmc(interp, cappy, WHAT); if (local) VTABLE_set_integer_keyed_str(interp, cappy, Parrot_str_new_constant(interp, "local"), 1); /* Call. */ Parrot_pcc_invoke_from_sig_object(interp, meth, cappy); /* Grab result. */ cappy = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_ctx); return VTABLE_get_pmc_keyed_int(interp, cappy, 0); }
/* Adds a method. */ static void add_method(PARROT_INTERP, PMC *nci) { PMC * unused; /* Get methods table out of meta-object. */ PMC *capture = Parrot_pcc_get_signature(interp, CURRENT_CONTEXT(interp)); PMC *self = VTABLE_get_pmc_keyed_int(interp, capture, 0); PMC *methods = ((KnowHOWREPRInstance *)PMC_data(self))->body.methods; /* Get name and method to add. */ STRING *name = VTABLE_get_string_keyed_int(interp, capture, 2); PMC *method = VTABLE_get_pmc_keyed_int(interp, capture, 3); /* Add it, and return added method as result. */ VTABLE_set_pmc_keyed_str(interp, methods, name, method); unused = Parrot_pcc_build_call_from_c_args(interp, capture, "P", method); }
static void pcf_void_PMC(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef void(* func_t)(PMC *); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); PMC * t_1; PMC * v_1; Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1); v_1 = t_1; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); (*fn_pointer)(v_1); Parrot_pcc_set_call_from_c_args(interp, call_object, ""); }
static void pcf_double(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef double(* func_t)(void); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); FLOATVAL t_0; double v_0; Parrot_pcc_fill_params_from_c_args(interp, call_object, ""); ; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(); t_0 = (FLOATVAL)v_0; Parrot_pcc_set_call_from_c_args(interp, call_object, "N", t_0); }
static void pcf_cstr(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef char *(* func_t)(void); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); STRING * t_0; char * v_0; Parrot_pcc_fill_params_from_c_args(interp, call_object, ""); ; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(); t_0 = Parrot_str_new(interp, v_0, 0); Parrot_pcc_set_call_from_c_args(interp, call_object, "S", t_0); }
static void pcf_int_ptr(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef int(* func_t)(void *); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); INTVAL t_0; int v_0; PMC * t_1; void * v_1; Parrot_pcc_fill_params_from_c_args(interp, call_object, "P", &t_1); v_1 = PMC_IS_NULL(t_1) ? NULL : VTABLE_get_pointer(interp, t_1);; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(v_1); t_0 = (INTVAL)v_0; Parrot_pcc_set_call_from_c_args(interp, call_object, "I", t_0); }
static void pcf_int_cstr(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef int(* func_t)(char *); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); INTVAL t_0; int v_0; STRING * t_1; char * v_1; Parrot_pcc_fill_params_from_c_args(interp, call_object, "S", &t_1); v_1 = STRING_IS_NULL(t_1) ? NULL : Parrot_str_to_cstring(interp, t_1); GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(v_1); t_0 = (INTVAL)v_0; t_1 = Parrot_str_new(interp, v_1, 0); Parrot_pcc_set_call_from_c_args(interp, call_object, "IS", t_0, t_1); }
static void pcf_void_ptr_int_int(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef void(* func_t)(void *, int, int); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); PMC * t_1; void * v_1; INTVAL t_2; int v_2; INTVAL t_3; int v_3; Parrot_pcc_fill_params_from_c_args(interp, call_object, "PII", &t_1, &t_2, &t_3); v_1 = PMC_IS_NULL(t_1) ? NULL : VTABLE_get_pointer(interp, t_1);; v_2 = (int)t_2; v_3 = (int)t_3; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); (*fn_pointer)(v_1, v_2, v_3); Parrot_pcc_set_call_from_c_args(interp, call_object, ""); }
static void pcf_void_float_float_float(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef void(* func_t)(float, float, float); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); FLOATVAL t_1; float v_1; FLOATVAL t_2; float v_2; FLOATVAL t_3; float v_3; Parrot_pcc_fill_params_from_c_args(interp, call_object, "NNN", &t_1, &t_2, &t_3); v_1 = (float)t_1; v_2 = (float)t_2; v_3 = (float)t_3; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); (*fn_pointer)(v_1, v_2, v_3); Parrot_pcc_set_call_from_c_args(interp, call_object, ""); }
static void pcf_char_short_char(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef char(* func_t)(short, char); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); INTVAL t_0; char v_0; INTVAL t_1; short v_1; INTVAL t_2; char v_2; Parrot_pcc_fill_params_from_c_args(interp, call_object, "II", &t_1, &t_2); v_1 = (short)t_1; v_2 = (char)t_2; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(v_1, v_2); t_0 = (INTVAL)v_0; Parrot_pcc_set_call_from_c_args(interp, call_object, "I", t_0); }
static void pcf_int_int_int_int(PARROT_INTERP, PMC *nci, SHIM(PMC *self)) { typedef int(* func_t)(int, int, int); func_t fn_pointer; void *orig_func; PMC * const ctx = CURRENT_CONTEXT(interp); PMC * const call_object = Parrot_pcc_get_signature(interp, ctx); INTVAL t_0; int v_0; INTVAL t_1; int v_1; INTVAL t_2; int v_2; INTVAL t_3; int v_3; Parrot_pcc_fill_params_from_c_args(interp, call_object, "III", &t_1, &t_2, &t_3); v_1 = (int)t_1; v_2 = (int)t_2; v_3 = (int)t_3; GETATTR_NCI_orig_func(interp, nci, orig_func); fn_pointer = (func_t)D2FPTR(orig_func); v_0 = (*fn_pointer)(v_1, v_2, v_3); t_0 = (INTVAL)v_0; Parrot_pcc_set_call_from_c_args(interp, call_object, "I", t_0); }