Skip to content

Commit

Permalink
[extend] special case ext_call "->"
Browse files Browse the repository at this point in the history
might be a worthwile optimization. however:
16.589294527 0.13% => 16.612686915 0.21% on parrot-bench linux
similar on darwin, but darwin bench is more noisy
  • Loading branch information
Reini Urban committed Dec 5, 2014
1 parent 9399cff commit 212ea38
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions src/extend.c
Expand Up @@ -149,17 +149,24 @@ Parrot_ext_call(PARROT_INTERP, ARGIN(Parrot_PMC sub_pmc),
PMC *call_obj = NULL;
const char *arg_sig = NULL, *ret_sig = NULL;
PMC * 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);
if (0 == strcmp(signature, "->")) {
call_obj = Parrot_pmc_new(interp, enum_class_CallContext);
Parrot_pcc_invoke_from_sig_object(interp, sub_pmc, call_obj);
}
else {
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);

Parrot_pcc_invoke_from_sig_object(interp, sub_pmc, 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_pcc_invoke_from_sig_object(interp, sub_pmc, 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);
va_end(args);
}
Parrot_pcc_set_signature(interp, CURRENT_CONTEXT(interp), old_call_obj);
}

Expand Down

0 comments on commit 212ea38

Please sign in to comment.