develooper Front page | perl.cvs.parrot | Postings from December 2008

[svn:parrot] r34440 - trunk/compilers/pirc/new

From:
kjs
Date:
December 27, 2008 11:40
Subject:
[svn:parrot] r34440 - trunk/compilers/pirc/new
Message ID:
20081227194028.65778CBA12@x12.develooper.com
Author: kjs
Date: Sat Dec 27 11:40:27 2008
New Revision: 34440

Modified:
   trunk/compilers/pirc/new/bcgen.c
   trunk/compilers/pirc/new/bcgen.h
   trunk/compilers/pirc/new/pircompunit.c

Log:
[pirc] store the constant table index for the sub in the global_label node for that sub.

Modified: trunk/compilers/pirc/new/bcgen.c
==============================================================================
--- trunk/compilers/pirc/new/bcgen.c	(original)
+++ trunk/compilers/pirc/new/bcgen.c	Sat Dec 27 11:40:27 2008
@@ -357,11 +357,12 @@
 add_sub_pmc(bytecode * const bc, sub_info * const info)>
 
 Add a sub PMC to the constant table. This function initializes the sub PMC.
+The index where the PMC is stored in the constant table is returned.
 
 =cut
 
 */
-void
+int
 add_sub_pmc(bytecode * const bc, sub_info * const info) {
     PMC               *sub_pmc;
     Parrot_sub        *sub;
@@ -438,6 +439,9 @@
 
     /* Add a new fixup entry in the fixup table for this sub. */
     PackFile_FixupTable_new_entry(bc->interp, info->subname, enum_fixup_sub, subconst_index);
+
+    /* return the index in the constant table where this sub PMC is stored */
+    return subconst_index;
 }
 
 

Modified: trunk/compilers/pirc/new/bcgen.h
==============================================================================
--- trunk/compilers/pirc/new/bcgen.h	(original)
+++ trunk/compilers/pirc/new/bcgen.h	Sat Dec 27 11:40:27 2008
@@ -83,8 +83,7 @@
 int get_string_const_index(bytecode * const bc, STRING *s);
 /* retrieves the index of s in the constant table */
 
-
-void add_sub_pmc(bytecode * const bc, sub_info * const info);
+int add_sub_pmc(bytecode * const bc, sub_info * const info);
 
 
 #endif /* PARROT_BCGEN_H_GUARD */

Modified: trunk/compilers/pirc/new/pircompunit.c
==============================================================================
--- trunk/compilers/pirc/new/pircompunit.c	(original)
+++ trunk/compilers/pirc/new/pircompunit.c	Sat Dec 27 11:40:27 2008
@@ -2377,6 +2377,8 @@
 void
 close_sub(lexer_state * const lexer) {
     int need_leaving_instr = 1;
+    int sub_const_table_index;
+    global_label *glob;
 
     /* don't generate leaving instructions if the last instruction was already
      * leaving the sub.
@@ -2405,7 +2407,15 @@
     if (TEST_FLAG(lexer->flags, LEXER_FLAG_REGALLOC))
         linear_scan_register_allocation(lexer->lsr);
 
-    add_sub_pmc(lexer->bc, &CURRENT_SUB(lexer)->info);
+    /* store the subroutine in the bytecode constant table. */
+    sub_const_table_index = add_sub_pmc(lexer->bc, &CURRENT_SUB(lexer)->info);
+
+    /* store the sub PMC index in the constant table with the global label,
+     * so that invoking ops can find this index.
+     */
+    glob = find_global_label(lexer, CURRENT_SUB(lexer)->info.subname);
+    PARROT_ASSERT(glob != NULL); /* it was stored in new_subr(), so must be there. */
+    glob->const_table_index = sub_const_table_index;
 }
 
 /*



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About