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

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

From:
kjs
Date:
December 27, 2008 11:13
Subject:
[svn:parrot] r34437 - trunk/compilers/pirc/new
Message ID:
20081227191334.9FCCACBA12@x12.develooper.com
Author: kjs
Date: Sat Dec 27 11:13:33 2008
New Revision: 34437

Modified:
   trunk/compilers/pirc/new/bcgen.c
   trunk/compilers/pirc/new/bcgen.h
   trunk/compilers/pirc/new/pircompiler.c
   trunk/compilers/pirc/new/piremit.c

Log:
[pirc] re-organize bytecode generation stuff a bit.
+ the bytecode struct is now created at the start, so we can add constants before generating bytecode.
+ creating a code segment is now done in a separate step, and should be done right before emiting bytecodes.


Modified: trunk/compilers/pirc/new/bcgen.c
==============================================================================
--- trunk/compilers/pirc/new/bcgen.c	(original)
+++ trunk/compilers/pirc/new/bcgen.c	Sat Dec 27 11:13:33 2008
@@ -203,17 +203,15 @@
 /*
 
 =item C<bytecode *
-new_bytecode(Interp *interp, char const * const filename, int bytes, int codesize)>
+new_bytecode(Interp *interp, char const * const filename)>
 
 Create a new bytecode struct, representing the bytecode for file C<filename>
 
-Create a new bytecode struct and return a pointer to it.
-
 =cut
 
 */
 bytecode *
-new_bytecode(Interp *interp, char const * const filename, int bytes, int codesize) {
+new_bytecode(Interp *interp, char const * const filename) {
     PMC      *self;
     bytecode *bc      = (bytecode *)mem_sys_allocate(sizeof (bytecode));
 
@@ -234,15 +232,18 @@
     self              = VTABLE_get_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_INTERPRETER);
     add_pmc_const(bc, self);
 
-    create_codesegment(bc, codesize);
-
     return bc;
 }
 
 /*
 
+=item C<void
+create_codesegment(bytecode * const bc, int codesize)>
+
 Create a code segment of size C<codesize>.
 
+=cut
+
 */
 void
 create_codesegment(bytecode * const bc, int codesize) {
@@ -353,14 +354,7 @@
 /*
 
 =item C<void
-add_sub_pmc(bytecode * const bc,
-            char const * const subname,  -- the name of this sub
-            char const * const nsentry,  -- the value of the :nsentry flag
-            char const * const subid,    -- the value of the :subid flag
-            int vtable_index,            -- vtable index, or -1 if no :vtable
-            unsigned regs_used[],        -- register usage of this sub
-            int startoffset,             -- start offset of this sub in bytecode
-            int endoffset)>              -- end offset of this sub in bytecode
+add_sub_pmc(bytecode * const bc, sub_info *info)>
 
 Add a sub PMC to the constant table. This function initializes the sub PMC.
 

Modified: trunk/compilers/pirc/new/bcgen.h
==============================================================================
--- trunk/compilers/pirc/new/bcgen.h	(original)
+++ trunk/compilers/pirc/new/bcgen.h	Sat Dec 27 11:13:33 2008
@@ -28,7 +28,7 @@
 
 } sub_info;
 
-bytecode *new_bytecode(Interp *interp, char const * const filename, int bytes, int codesize);
+bytecode *new_bytecode(Interp *interp, char const * const filename);
 
 
 void create_codesegment(bytecode * const bc, int codesize);

Modified: trunk/compilers/pirc/new/pircompiler.c
==============================================================================
--- trunk/compilers/pirc/new/pircompiler.c	(original)
+++ trunk/compilers/pirc/new/pircompiler.c	Sat Dec 27 11:13:33 2008
@@ -185,6 +185,8 @@
     if (TEST_FLAG(flags, LEXER_FLAG_REGALLOC))
         lexer->lsr = new_linear_scan_register_allocator(lexer);
 
+    lexer->bc = new_bytecode(lexer->interp, filename);
+
     return lexer;
 }
 

Modified: trunk/compilers/pirc/new/piremit.c
==============================================================================
--- trunk/compilers/pirc/new/piremit.c	(original)
+++ trunk/compilers/pirc/new/piremit.c	Sat Dec 27 11:13:33 2008
@@ -546,8 +546,7 @@
 
     fprintf(stderr, "emit_pbc(): starting...\n");
 
-    lexer->bc = new_bytecode(lexer->interp, lexer->filename,
-                             lexer->codesize * 4, lexer->codesize);
+    create_codesegment(lexer->bc, lexer->codesize);
 
     fprintf(stderr, "ok 1\n");
     subiter = lexer->subs->next;



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