diff --git a/src/glue/dispatch.pir b/src/glue/dispatch.pir index cb33a4970c5..fc420fceb7f 100644 --- a/src/glue/dispatch.pir +++ b/src/glue/dispatch.pir @@ -165,10 +165,15 @@ Implements the .* operator. Calls one or more matching methods. =cut .sub '!dispatch_.*' - .param pmc invocant - .param string method_name - .param pmc pos_args :slurpy - .param pmc named_args :slurpy :named + .param pmc call_sig :call_sig + + # Deconstruct call signature (no caller side :call_sig yet). + .local pmc invocant, pos_args, named_args + .local string method_name + invocant = shift call_sig + method_name = shift call_sig + (pos_args, named_args) = '!deconstruct_call_sig'(call_sig) + unshift call_sig, invocant # Set up result list. .local pmc result_list @@ -200,9 +205,7 @@ Implements the .* operator. Calls one or more matching methods. push result_list, res_parcel goto it_loop is_multi: - # XXX To do: need a call_sig - die 'Multis and .* NYI.' - #$P0 = $P0.'find_possible_candidates'(call_sig) + $P0 = $P0.'find_possible_candidates'(call_sig) multi_it = iter $P0 multi_it_loop: unless multi_it goto it_loop diff --git a/src/metamodel/RoleToClassApplier.nqp b/src/metamodel/RoleToClassApplier.nqp index 78a4cf967af..3240ef5c5bb 100644 --- a/src/metamodel/RoleToClassApplier.nqp +++ b/src/metamodel/RoleToClassApplier.nqp @@ -24,7 +24,7 @@ class Perl6::Metamodel::RoleToClassApplier; sub has_method($target, $name, $local) { my @methods := $target.HOW.methods($target, :local($local)); for @methods { - if $_.name eq $name { return 1; } + if $_ eq $name { return 1; } } return 0; } diff --git a/t/spectest.data b/t/spectest.data index a8fa17ba17f..ea71f7717a3 100644 --- a/t/spectest.data +++ b/t/spectest.data @@ -354,7 +354,7 @@ S12-enums/anonymous.t S12-introspection/parents.t S12-introspection/roles.t # S12-introspection/walk.t -# S12-methods/calling_sets.t +S12-methods/calling_sets.t S12-methods/calling_syntax.t # S12-methods/chaining.t S12-methods/class-and-instance.t @@ -413,7 +413,7 @@ S29-any/isa.t S29-context/sleep.t S29-conversions/ord_and_chr.t #icu ## S32-array/create.t -# S32-array/delete.t +S32-array/delete.t S32-array/elems.t S32-array/end.t # S32-array/exists.t