[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