Author: kjs
Date: Thu Jan 22 14:45:43 2009
New Revision: 35897

Modified:
   trunk/src/embed.c

Log:
[core] let pbc_disassemble dump the contents of the const-table first, so that 
you know what's meant if you read PMC_CONST(n). Not sure how to print a PMC, 
though.

Modified: trunk/src/embed.c
==============================================================================
--- trunk/src/embed.c   (original)
+++ trunk/src/embed.c   Thu Jan 22 14:45:43 2009
@@ -1025,6 +1025,57 @@
     return NULL;
 }
 
+/*
+
+=item C<static void print_constant_table>
+
+Print the contents of the constants table.
+
+=cut
+
+*/
+static void
+print_constant_table(PARROT_INTERP) {
+    INTVAL numconstants = interp->code->const_table->const_count;
+    INTVAL i;
+
+    /* TODO: would be nice to print the name of the file as well */
+    Parrot_io_printf(interp, "Constant-table\n");
+
+    for (i = 0; i < numconstants; ++i) {
+        PackFile_Constant *c = interp->code->const_table->constants[i];
+
+        switch (c->type) {
+            case PFC_NUMBER:
+                Parrot_io_printf(interp, "PMC_CONST(%d): %f\n", i, 
c->u.number);
+                break;
+            case PFC_STRING:
+                Parrot_io_printf(interp, "PMC_CONST(%d): %S\n", i, 
c->u.string);
+                break;
+            case PFC_KEY:
+                Parrot_io_printf(interp, "PMC_CONST(%d): ", i);
+                /* XXX */
+                /* Parrot_print_p(interp, c->u.key); */
+                Parrot_io_printf(interp, "(PMC constant)");
+                Parrot_io_printf(interp, "\n");
+                break;
+            case PFC_PMC:
+                Parrot_io_printf(interp, "PMC_CONST(%d): ", i);
+                /* XXX */
+                /* Parrot_print_p(interp, c->u.key); */
+                Parrot_io_printf(interp, "(PMC constant)");
+                Parrot_io_printf(interp, "\n");
+                break;
+            default:
+                Parrot_io_printf(interp, "wrong constant type in constant 
table!\n");
+                /* XXX throw an exception? Is it worth the trouble? */
+                break;
+        }
+    }
+
+    Parrot_io_printf(interp, "\n");
+}
+
 
 /*
 
@@ -1057,6 +1108,8 @@
     line   = pdb->file->line;
     debugs = (interp->code->debugs != NULL);
 
+    print_constant_table(interp);
+
     Parrot_io_printf(interp, "%12s-%12s", "Seq_Op_Num", "Relative-PC");
 
     if (debugs) {

Reply via email to