[svn:parrot] r44683 - in branches/ops_pct/compilers/opsc: src/Ops t

bacek at svn.parrot.org bacek at svn.parrot.org
Sat Mar 6 09:42:54 UTC 2010


Author: bacek
Date: Sat Mar  6 09:42:54 2010
New Revision: 44683
URL: https://trac.parrot.org/parrot/changeset/44683

Log:
Store syn_export and init_func fields. Finish generating headers.

Modified:
   branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
   branches/ops_pct/compilers/opsc/t/06-emitter.t

Modified: branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm	Sat Mar  6 09:40:11 2010	(r44682)
+++ branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm	Sat Mar  6 09:42:54 2010	(r44683)
@@ -26,6 +26,13 @@
     self<include> := "parrot/oplib/$base_ops_h";
     self<header>  := (~%flags<dir>) ~ "include/" ~ self<include>;
 
+    self<sym_export> := %flags<dynamic>
+                        ?? 'PARROT_DYNEXT_EXPORT'
+                        !! '';
+
+    self<init_func>  := join('_',
+        'Parrot', 'DynOp', $base ~ $suffix, |$ops_file.version );
+
     # Prepare ops
     $trans.prepare_ops(self, $ops_file);
 
@@ -37,7 +44,8 @@
 method script()     { self<script> };
 method file()       { self<file> };
 method flags()      { self<flags> };
-
+method sym_export() { self<sym_export> };
+method init_func()  { self<init_func> };
 
 method print_c_header_file() {
     my $fh := pir::open__PSs(self<header>, 'w') || die("Can't open filehandle");
@@ -106,6 +114,7 @@
 }
 
 method _emit_preamble($fh) {
+
     $fh.print(qq|
 /* ex: set ro:
  * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
@@ -117,5 +126,18 @@
  *
  */
 |);
+
+    if self.flags<dynamic> {
+        $fh.print("#define PARROT_IN_EXTENSION\n");
+    }
+
+    $fh.print(qq|
+#include "parrot/parrot.h"
+#include "parrot/oplib.h"
+
+{self.sym_export} op_lib_t *{self.init_func}(PARROT_INTERP, long init);
+
+|);
 }
+
 # vim: expandtab shiftwidth=4 ft=perl6:

Modified: branches/ops_pct/compilers/opsc/t/06-emitter.t
==============================================================================
--- branches/ops_pct/compilers/opsc/t/06-emitter.t	Sat Mar  6 09:40:11 2010	(r44682)
+++ branches/ops_pct/compilers/opsc/t/06-emitter.t	Sat Mar  6 09:42:54 2010	(r44683)
@@ -3,7 +3,7 @@
 pir::load_bytecode("compilers/opsc/opsc.pbc");
 pir::load_bytecode("nqp-settings.pbc");
 
-plan(6);
+plan(7);
 
 my $trans := Ops::Trans::C.new();
 
@@ -38,5 +38,6 @@
 ok($header ~~ /define \s PARROT_OPLIB_CORE_OPS_H_GUARD/, 'Guard generated');
 ok($header ~~ /endif/, 'Close guard generated');
 ok($header ~~ /DO \s NOT \s EDIT \s THIS \s FILE/, 'Preamble generated');
+ok($header ~~ /Parrot_DynOp_core_ \d+ _ \d+ _ \d+/, '... and contains init_func');
 
 # vim: expandtab shiftwidth=4 ft=perl6:


More information about the parrot-commits mailing list