Author: pmichaud
Date: Fri Jan 16 08:48:10 2009
New Revision: 35633

Modified:
   trunk/languages/perl6/src/classes/Signature.pir

Log:
[rakudo]:  Require arguments to &foo to be callable.


Modified: trunk/languages/perl6/src/classes/Signature.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Signature.pir     (original)
+++ trunk/languages/perl6/src/classes/Signature.pir     Fri Jan 16 08:48:10 2009
@@ -287,6 +287,7 @@
     orig = callerlex[name]
     if sigil == '@' goto param_array
     if sigil == '%' goto param_hash
+    if sigil != '$' goto param_sub
     var = '!CALLMETHOD'('Scalar', orig)
     ##  typecheck the argument
     if null type goto param_val_done
@@ -330,6 +331,11 @@
     ## place the updated variable back into lex
     callerlex[name] = var
     goto param_loop
+  param_sub:
+    $I0 = isa orig, 'Sub'
+    unless $I0 goto err_sub
+    if $I0 goto param_loop
+    
   param_done:
   end:
     .return ()
@@ -343,6 +349,9 @@
     goto err_throw
   err_hash:
     errmsg = 'Non-Associative argument'
+    goto err_throw
+  err_sub:
+    errmsg = 'Non-Callable argument'
   err_throw:
     .local string callername
     callername = callersub

Reply via email to