Author: pmichaud
Date: Sun Dec 28 22:52:40 2008
New Revision: 34556

Modified:
   branches/rvar/languages/perl6/src/classes/Object.pir
   branches/rvar/languages/perl6/src/classes/Signature.pir

Log:
[rakudo]:  Add Hash() coercion and hash parameters.


Modified: branches/rvar/languages/perl6/src/classes/Object.pir
==============================================================================
--- branches/rvar/languages/perl6/src/classes/Object.pir        (original)
+++ branches/rvar/languages/perl6/src/classes/Object.pir        Sun Dec 28 
22:52:40 2008
@@ -225,6 +225,20 @@
     .return ($P0)
 .end
 
+.namespace []
+.sub 'Hash'
+    .param pmc source
+    $I0 = isa source, 'ObjectRef'
+    if $I0 goto make_hash
+    $I0 = can source, 'Hash'
+    unless $I0 goto make_hash
+    .tailcall source.'Hash'()
+  make_hash:
+    $P0 = new 'Perl6Hash'
+    $P0.'!STORE'(source)
+    .return ($P0)
+.end
+
 =item Iterator()
 
 =cut

Modified: branches/rvar/languages/perl6/src/classes/Signature.pir
==============================================================================
--- branches/rvar/languages/perl6/src/classes/Signature.pir     (original)
+++ branches/rvar/languages/perl6/src/classes/Signature.pir     Sun Dec 28 
22:52:40 2008
@@ -200,6 +200,7 @@
     type = param['type']
     orig = callerlex[name]
     if sigil == '@' goto param_array
+    if sigil == '%' goto param_hash
     var = 'Scalar'(orig)
     ##  typecheck the argument
     if null type goto param_val_done
@@ -210,6 +211,8 @@
   param_array:
     var = 'Array'(orig)
     goto param_val_done
+  param_hash:
+    var = 'Hash'(orig)
   param_val_done:
     ## handle readonly/copy traits
     $S0 = param['readtype']

Reply via email to