[svn:parrot] r44836 - in branches/fix_hll_mmd: lib/Parrot/Pmc2c/PMC src src/call
chromatic at svn.parrot.org
chromatic at svn.parrot.org
Wed Mar 10 00:19:26 UTC 2010
Author: chromatic
Date: Wed Mar 10 00:19:26 2010
New Revision: 44836
URL: https://trac.parrot.org/parrot/changeset/44836
Log:
Checkpoint.
Modified:
branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm
branches/fix_hll_mmd/src/call/args.c
branches/fix_hll_mmd/src/multidispatch.c
Modified: branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm
==============================================================================
--- branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm Wed Mar 10 00:19:21 2010 (r44835)
+++ branches/fix_hll_mmd/lib/Parrot/Pmc2c/PMC/Object.pm Wed Mar 10 00:19:26 2010 (r44836)
@@ -71,6 +71,16 @@
}
/* method name is $vt_method_name */
+EOC
+
+ if ($self->vtable_method_does_multi($vt_method_name)) {
+ $method_body_text .= <<"EOC";
+ if (cur_class->vtable->base_type == enum_class_PMCProxy)
+ break;
+EOC
+ }
+ else {
+ $method_body_text .= <<"EOC";
if (cur_class->vtable->base_type == enum_class_PMCProxy) {
/* Get the PMC instance and call the vtable method on that. */
STRING * const proxy = CONST_STRING_GEN(interp, "proxy");
@@ -81,6 +91,10 @@
$void_return
}
}
+EOC
+ }
+
+ $method_body_text .= <<"EOC";
}
${return}SUPER($superargs);
Modified: branches/fix_hll_mmd/src/call/args.c
==============================================================================
--- branches/fix_hll_mmd/src/call/args.c Wed Mar 10 00:19:21 2010 (r44835)
+++ branches/fix_hll_mmd/src/call/args.c Wed Mar 10 00:19:26 2010 (r44836)
@@ -882,13 +882,13 @@
{
ASSERT_ARGS(Parrot_pcc_build_sig_object_from_varargs)
PMC *type_tuple = PMCNULL;
- PMC *arg_flags = PMCNULL;
- PMC *return_flags = PMCNULL;
+ PMC *arg_flags = PMCNULL;
+ PMC *return_flags = PMCNULL;
PMC * const call_object = pmc_new(interp, enum_class_CallContext);
const INTVAL sig_len = strlen(sig);
INTVAL in_return_sig = 0;
- INTVAL i;
int append_pi = 1;
+ INTVAL i;
if (!sig_len)
return call_object;
Modified: branches/fix_hll_mmd/src/multidispatch.c
==============================================================================
--- branches/fix_hll_mmd/src/multidispatch.c Wed Mar 10 00:19:21 2010 (r44835)
+++ branches/fix_hll_mmd/src/multidispatch.c Wed Mar 10 00:19:26 2010 (r44836)
@@ -308,8 +308,8 @@
if (PMC_IS_NULL(sub))
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_METHOD_NOT_FOUND,
- "Multiple Dispatch: No suitable candidate found for '%s',"
- " with signature '%s'", name, sig);
+ "Multiple Dispatch: No suitable candidate found for '%s',"
+ " with signature '%s'", name, sig);
#if MMD_DEBUG
Parrot_io_eprintf(interp, "candidate found for '%s', with signature '%s'\n",
@@ -513,17 +513,17 @@
Parrot_mmd_build_type_tuple_from_sig_obj(PARROT_INTERP, ARGIN(PMC *sig_obj))
{
ASSERT_ARGS(Parrot_mmd_build_type_tuple_from_sig_obj)
- PMC * const type_tuple = pmc_new(interp, enum_class_ResizableIntegerArray);
- STRING *string_sig = VTABLE_get_string(interp, sig_obj);
- INTVAL tuple_size = 0;
- INTVAL args_ended = 0;
- INTVAL i, seen_invocant = 0;
+ PMC * const type_tuple = pmc_new(interp, enum_class_ResizableIntegerArray);
+ STRING *string_sig = VTABLE_get_string(interp, sig_obj);
+ INTVAL tuple_size = 0;
+ INTVAL args_ended = 0;
+ INTVAL seen_invocant = 0;
INTVAL sig_len;
+ INTVAL i;
- if (STRING_IS_NULL(string_sig)) {
- Parrot_ex_throw_from_c_args(interp, NULL, 1,
- "Call has no signature, unable to dispatch.\n");
- }
+ if (STRING_IS_NULL(string_sig))
+ Parrot_ex_throw_from_c_args(interp, NULL, 1,
+ "Call has no signature, unable to dispatch.\n");
sig_len = Parrot_str_byte_length(interp, string_sig);
@@ -638,9 +638,8 @@
if (type == enum_type_undef)
return PMCNULL;
}
- else if (sig_elem->vtable->base_type == enum_class_Integer) {
+ else if (sig_elem->vtable->base_type == enum_class_Integer)
type = VTABLE_get_integer(interp, sig_elem);
- }
else
type = pmc_type_p(interp, sig_elem);
More information about the parrot-commits
mailing list