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

bacek at svn.parrot.org bacek at svn.parrot.org
Sat Mar 6 11:49:24 UTC 2010


Author: bacek
Date: Sat Mar  6 11:49:24 2010
New Revision: 44694
URL: https://trac.parrot.org/parrot/changeset/44694

Log:
Add emiting op lib description

Modified:
   branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
   branches/ops_pct/compilers/opsc/src/Ops/File.pm
   branches/ops_pct/compilers/opsc/src/Ops/Trans.pm
   branches/ops_pct/compilers/opsc/src/Ops/Trans/C.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 11:48:53 2010	(r44693)
+++ branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm	Sat Mar  6 11:49:24 2010	(r44694)
@@ -93,9 +93,9 @@
     self._emit_source_preamble($fh);
 
     self.trans.emit_source_part($fh);
-
     self.trans.emit_op_lookup(self, $fh);
 
+    self._emit_op_lib_descriptor($fh);
     self._emit_init_func($fh);
     self._emit_dymanic_lib_load($fh);
     self._emit_coda($fh);
@@ -125,6 +125,30 @@
     $fh.print(self.ops_file.preamble);
 }
 
+method _emit_op_lib_descriptor($fh) {
+
+    my $core_type := self.trans.core_type;
+    $fh.print(q|
+/*
+** op lib descriptor:
+*/
+
+static op_lib_t | ~ self.bs ~ q|op_lib = {| ~ qq|
+  "{self.base}",               /* name */
+  "{self.suffix}",             /* suffix */
+  $core_type,                       /* core_type = PARROT_XX_CORE */
+  0,                                /* flags */
+  {self.ops_file.version_major},    /* major_version */
+  {self.ops_file.version_minor},    /* minor_version */
+  {self.ops_file.version_patch},    /* patch_version */
+  {+self.ops_file.ops},             /* op_count */
+  {self.trans.op_info(self)},       /* op_info_table */
+  {self.trans.op_func(self)},       /* op_func_table */
+  {self.trans.getop(self)}          /* op_code() */ | ~ q|
+};
+|);
+}
+
 method _emit_init_func($fh) {
 
     my $init1    := self.trans.init_func_init1;

Modified: branches/ops_pct/compilers/opsc/src/Ops/File.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/File.pm	Sat Mar  6 11:48:53 2010	(r44693)
+++ branches/ops_pct/compilers/opsc/src/Ops/File.pm	Sat Mar  6 11:49:24 2010	(r44694)
@@ -227,6 +227,10 @@
     self<version>;
 }
 
+method version_major() { self<version_major> }
+method version_minor() { self<version_minor> }
+method version_patch() { self<version_patch> }
+
 method _set_version() {
     my $config := _config();
     my $version := $config<VERSION>;

Modified: branches/ops_pct/compilers/opsc/src/Ops/Trans.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Trans.pm	Sat Mar  6 11:48:53 2010	(r44693)
+++ branches/ops_pct/compilers/opsc/src/Ops/Trans.pm	Sat Mar  6 11:49:24 2010	(r44694)
@@ -38,5 +38,8 @@
 method init_func_init1() { '' }
 method init_func_disaptch() { '' }
 
+method op_info($emitter) { 'NULL' }
+method op_func($emitter) { 'NULL' }
+method getop($emitter)   { '( int (*)(PARROT_INTERP, const char *, int) )NULL' };
 
 # vim: expandtab shiftwidth=4 ft=perl6:

Modified: branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm	Sat Mar  6 11:48:53 2010	(r44693)
+++ branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm	Sat Mar  6 11:49:24 2010	(r44694)
@@ -12,6 +12,8 @@
 
 method suffix() { '' };
 
+method core_type() { 'PARROT_FUNCTION_CORE' }
+
 method prepare_ops($emitter, $ops_file) {
 
     my $index := 0;
@@ -78,6 +80,10 @@
 /
 }
 
+method op_info($emitter) { $emitter.bs ~ 'op_info_table' }
+method op_func($emitter) { $emitter.bs ~ 'op_func_table' }
+method getop($emitter)   { 'get_op' };
+
 method emit_source_part($fh) {
 }
 

Modified: branches/ops_pct/compilers/opsc/t/06-emitter.t
==============================================================================
--- branches/ops_pct/compilers/opsc/t/06-emitter.t	Sat Mar  6 11:48:53 2010	(r44693)
+++ branches/ops_pct/compilers/opsc/t/06-emitter.t	Sat Mar  6 11:49:24 2010	(r44694)
@@ -3,7 +3,7 @@
 pir::load_bytecode("compilers/opsc/opsc.pbc");
 pir::load_bytecode("nqp-settings.pbc");
 
-plan(12);
+plan(13);
 
 my $trans := Ops::Trans::C.new();
 
@@ -56,7 +56,7 @@
 
 ok($source ~~ /static \s int \s get_op/, 'Trans::C preamble generated');
 
-
+ok($source ~~ /PARROT_FUNCTION_CORE/, 'Trans::C core_type preserved');
 ok($source ~~ /static \s size_t \s hash_str/, 'Trans::C op_lookup preserved');
 
 #say($source);


More information about the parrot-commits mailing list