Front page | perl.cvs.parrot |
Postings from December 2008
[svn:parrot] r33475 - trunk/languages/perl6/src/pmc
From:
jonathan
Date:
December 3, 2008 16:56
Subject:
[svn:parrot] r33475 - trunk/languages/perl6/src/pmc
Message ID:
20081204005558.8170ECB9AF@x12.develooper.com
Author: jonathan
Date: Wed Dec 3 16:55:57 2008
New Revision: 33475
Modified:
trunk/languages/perl6/src/pmc/perl6multisub.pmc
Log:
[rakudo] When we have an ambiguous dispatch, report the signatures of the candidates that were ambiguous.
Modified: trunk/languages/perl6/src/pmc/perl6multisub.pmc
==============================================================================
--- trunk/languages/perl6/src/pmc/perl6multisub.pmc (original)
+++ trunk/languages/perl6/src/pmc/perl6multisub.pmc Wed Dec 3 16:55:57 2008
@@ -559,9 +559,24 @@
VTABLE_get_string(interp, candidates[0]->sub));
}
else {
+ /* Get signatures of ambiguous candidates. */
+ STRING *sig_name = CONST_STRING(interp, "signature");
+ STRING *perl_name = CONST_STRING(interp, "perl");
+ STRING *newline = CONST_STRING(interp, "\n");
+ STRING *signatures = string_from_cstring(interp, "", 0);
+ for (i = 0; i < possibles_count; i++) {
+ PMC *sig_meth = VTABLE_find_method(interp, possibles[i]->sub, sig_name);
+ PMC *sig_obj = (PMC *)Parrot_run_meth_fromc_args(interp, sig_meth,
+ possibles[i]->sub, sig_name, "P");
+ PMC *perl_meth = VTABLE_find_method(interp, sig_obj, perl_name);
+ STRING *sig_perl = (STRING *)Parrot_run_meth_fromc_args(interp, perl_meth,
+ sig_obj, perl_name, "S");
+ signatures = string_append(interp, signatures, sig_perl);
+ signatures = string_append(interp, signatures, newline);
+ }
Parrot_ex_throw_from_c_args(interp, next, 1,
- "Ambiguous dispatch to multi '%Ss'",
- VTABLE_get_string(interp, candidates[0]->sub));
+ "Ambiguous dispatch to multi '%Ss'. Ambiguous candidates had signatures:\n%Ss",
+ VTABLE_get_string(interp, candidates[0]->sub), signatures);
}
}
else {
-
[svn:parrot] r33475 - trunk/languages/perl6/src/pmc
by jonathan