[svn:parrot] r44688 - in branches/ops_pct/compilers/opsc/src/Ops: . Trans

bacek at svn.parrot.org bacek at svn.parrot.org
Sat Mar 6 11:46:45 UTC 2010


Author: bacek
Date: Sat Mar  6 11:46:44 2010
New Revision: 44688
URL: https://trac.parrot.org/parrot/changeset/44688

Log:
Add more stuff for emitting C source

Modified:
   branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
   branches/ops_pct/compilers/opsc/src/Ops/Trans.pm
   branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm

Modified: branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm	Sat Mar  6 11:46:17 2010	(r44687)
+++ branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm	Sat Mar  6 11:46:44 2010	(r44688)
@@ -83,8 +83,30 @@
 }
 
 method emit_c_source_file($fh) {
+    self._emit_source_preamble($fh);
 }
 
+method _emit_source_preamble($fh) {
+
+    self._emit_preamble($fh);
+    $fh.print(qq|
+#include "{self<include>}"
+#include "pmc/pmc_parrotlibrary.h"
+#include "pmc/pmc_callcontext.h"
+
+{self.trans.defines}
+
+|);
+
+#    if ( $self->{suffix} eq '' && !$self->{flag}->{dynamic} ) {
+#        print $fh <<END_C_2;
+#static int get_op(PARROT_INTERP, const char * name, int full);
+#
+#END_C_2
+#    }
+
+    $fh.print(self.ops_file.preamble);
+}
 
 # given a headerfile name like "include/parrot/oplib/core_ops.h", this
 # returns a string like "PARROT_OPLIB_CORE_OPS_H_GUARD"

Modified: branches/ops_pct/compilers/opsc/src/Ops/Trans.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Trans.pm	Sat Mar  6 11:46:17 2010	(r44687)
+++ branches/ops_pct/compilers/opsc/src/Ops/Trans.pm	Sat Mar  6 11:46:44 2010	(r44688)
@@ -22,6 +22,7 @@
 # Called from Ops::Op.
 method body_prelude() { '' }
 
+method defines() { die('...') }
 
 
 # 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:46:17 2010	(r44687)
+++ branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm	Sat Mar  6 11:46:44 2010	(r44688)
@@ -47,4 +47,29 @@
     }
 }
 
+=begin
+
+=item C<defines()>
+
+Returns the C C<#define> macros for register access etc.
+
+=end
+
+method defines() {
+    return qq|
+#include "pmc/pmc_callcontext.h"
+
+/* defines - Ops::Trans::C */
+#undef CONST
+#define REL_PC     ((size_t)(cur_opcode - (opcode_t *)interp->code->base.data))
+#define CUR_OPCODE cur_opcode
+#define IREG(i) (CUR_CTX->bp.regs_i[cur_opcode[i]])
+#define NREG(i) (CUR_CTX->bp.regs_n[-1L - cur_opcode[i]])
+#define PREG(i) (CUR_CTX->bp_ps.regs_p[-1L - cur_opcode[i]])
+#define SREG(i) (CUR_CTX->bp_ps.regs_s[cur_opcode[i]])
+#define CONST(i) Parrot_pcc_get_constants(interp, interp->ctx)[cur_opcode[i]]
+|;
+
+}
+
 # vim: expandtab shiftwidth=4 ft=perl6:


More information about the parrot-commits mailing list