Author: kjs
Date: Mon Jan 19 14:06:08 2009
New Revision: 35773

Modified:
   trunk/compilers/pirc/src/bcgen.c
   trunk/compilers/pirc/src/piremit.c
   trunk/compilers/pirc/t/basic.t
   trunk/compilers/pirc/t/stmts.t

Log:
[pirc] add some #if for comments. + add tests

Modified: trunk/compilers/pirc/src/bcgen.c
==============================================================================
--- trunk/compilers/pirc/src/bcgen.c    (original)
+++ trunk/compilers/pirc/src/bcgen.c    Mon Jan 19 14:06:08 2009
@@ -235,6 +235,9 @@
     PackFile_Constant *constant = 
bc->interp->code->const_table->constants[index];
     constant->type              = PFC_NUMBER;
     constant->u.number          = f;
+#if DEBUGBC
+    fprintf(stderr, "add_num_const (%f) at index: %d\n", f, index);
+#endif
     return index;
 }
 
@@ -579,7 +582,10 @@
 
     index = add_key_const(bc, pfc->u.key);
 
+#if DEBUGBC
     fprintf(stderr, "store key at index %d\n", index);
+#endif
+
     mem_sys_free(pfc);
 
     return index;

Modified: trunk/compilers/pirc/src/piremit.c
==============================================================================
--- trunk/compilers/pirc/src/piremit.c  (original)
+++ trunk/compilers/pirc/src/piremit.c  Mon Jan 19 14:06:08 2009
@@ -631,11 +631,12 @@
      * flags/types and the register/constant index.
      */
     keysize = pc - key;
-
+/*
     fprintf(stderr, "key: ");
     for (index = 0; index < keysize; ++index) {
         fprintf(stderr, "%d|", key[index]);
     }
+*/
     /* store the key, and emit the index at which it's stored into the code 
segment */
     index = store_key_bytecode(lexer->bc, key);
     emit_int_arg(lexer->bc, index);

Modified: trunk/compilers/pirc/t/basic.t
==============================================================================
--- trunk/compilers/pirc/t/basic.t      (original)
+++ trunk/compilers/pirc/t/basic.t      Mon Jan 19 14:06:08 2009
@@ -3,7 +3,7 @@
 # $Id$
 
 use lib "../../lib";
-use Parrot::Test tests => 5;
+use Parrot::Test tests => 6;
 
 pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "a local, a reg and an if-stat");
 .sub main
@@ -84,7 +84,7 @@
 OUTPUT
 
 
-pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "indexing a hash");
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "indexing a hash with a string constant");
 .sub main
     .local pmc p
     p = new "Hash"
@@ -100,6 +100,24 @@
 3.3
 OUTPUT
 
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "indexing a hash with a string register");
+.sub main
+    .local pmc p
+    p = new "Hash"
+    $S0 = "hello"
+    p[$S0] = 42
+    $I0 = p[$S0]
+    say $I0
+    # and combine indexing with string constant and register
+    $S1 = "bye"
+    p["bye"] = 3.3
+    $N1 = p["bye"]
+    say $N1
+.end
+CODE
+42
+3.3
+OUTPUT
 
 
 

Modified: trunk/compilers/pirc/t/stmts.t
==============================================================================
--- trunk/compilers/pirc/t/stmts.t      (original)
+++ trunk/compilers/pirc/t/stmts.t      Mon Jan 19 14:06:08 2009
@@ -3,16 +3,76 @@
 # $Id$
 
 use lib "../../lib";
-use Parrot::Test tests => 1;
+use Parrot::Test tests => 4;
 
-pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "a single const declaration");
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "a simple sub call - no params");
 .sub main
+    foo()
+.end
+
+.sub foo
     say "ok"
 .end
 CODE
 ok
 OUTPUT
 
+
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "a simple sub call - single param");
+.sub main
+    foo(42)
+.end
+
+.sub foo
+    .param int i
+    say i
+.end
+CODE
+42
+OUTPUT
+
+
+
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "a simple sub call - boxing");
+.sub main
+    foo(42, 3.14, "hi there")
+.end
+
+.sub foo
+    .param pmc i
+    .param pmc f
+    .param pmc t
+    .local string s
+    s = typeof i
+    say s
+    s = typeof f
+    say s
+    s = typeof t
+    say s
+.end
+CODE
+Integer
+Float
+String
+OUTPUT
+
+
+
+pirc_2_pasm_is(<<'CODE', <<'OUTPUT', "a simple sub call - slurpy param");
+.sub main
+    foo(1, 2, 3)
+.end
+
+.sub foo
+    .param pmc args :slurpy
+    $I0 = args
+    say 3
+.end
+CODE
+3
+OUTPUT
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Reply via email to