[svn:parrot] r38437 - in branches/pmc_pct: compilers/pmc compilers/pmc/src/emitter config/gen/makefiles
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat May 2 05:17:39 UTC 2009
Author: bacek
Date: Sat May 2 05:17:38 2009
New Revision: 38437
URL: https://trac.parrot.org/parrot/changeset/38437
Log:
Extract C emitter from PMC emitter
Added:
branches/pmc_pct/compilers/pmc/src/emitter/c.pir
Modified:
branches/pmc_pct/compilers/pmc/pmc.pir
branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir
branches/pmc_pct/config/gen/makefiles/pmc.in
Modified: branches/pmc_pct/compilers/pmc/pmc.pir
==============================================================================
--- branches/pmc_pct/compilers/pmc/pmc.pir Sat May 2 05:17:12 2009 (r38436)
+++ branches/pmc_pct/compilers/pmc/pmc.pir Sat May 2 05:17:38 2009 (r38437)
@@ -31,6 +31,7 @@
.include 'src/nodes.pir'
.include 'src/vtable_info.pir'
.include 'src/emitter/pmc.pir'
+.include 'src/emitter/c.pir'
.include 'src/gen_emitter.pir'
.include 'src/gen_vtable_info.pir'
Added: branches/pmc_pct/compilers/pmc/src/emitter/c.pir
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/src/emitter/c.pir Sat May 2 05:17:38 2009 (r38437)
@@ -0,0 +1,64 @@
+# $Id$
+# Copyright (C) 2009, Parrot Foundation.
+
+=head1 C emitter.
+
+Generates C from PAST.
+
+=cut
+
+.namespace ['PMC';'Emitter';'C']
+
+.sub '' :load :init
+ .local pmc p6meta
+ p6meta = new 'P6metaclass'
+ p6meta.'new_class'('PMC::Emitter::C')
+.end
+
+=item C<emit>
+
+Generate C function body from PAST.
+
+=cut
+
+.sub 'emit' :method
+ .param pmc entry
+
+ .local pmc res
+ res = new 'ResizableStringArray'
+ $P0 = entry.'iterator'()
+ loop:
+ unless $P0 goto done
+ $P1 = shift $P0
+ #print 'P1 '
+ #say $P1
+ $S0 = self.'!generate_body_part'($P1)
+ push res, $S0
+ goto loop
+ done:
+
+ $S0 = join '', res
+ .return ($S0)
+.end
+
+=item C<!generate_body_part>
+
+Multi-methods for generating C body.
+
+TODO: Parse c_body properly and implement all other functions.
+
+=cut
+
+.sub '!generate_body_part' :method :multi(_, ['PAST';'Op'])
+ .param pmc past
+ $S0 = past['inline']
+ .return ($S0)
+.end
+
+
+
+# Local Variables:
+# mode: pir
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
Modified: branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir
==============================================================================
--- branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir Sat May 2 05:17:12 2009 (r38436)
+++ branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir Sat May 2 05:17:38 2009 (r38437)
@@ -159,7 +159,8 @@
# Generate 2 methods. One for read, one for write.
$S0 = self.'!generate_signature'(pmc_name, entry, 0 :named('ro'))
push res_builder, $S0
- $S0 = self.'!generate_body'(entry)
+ $P0 = new ['PMC';'Emitter';'C']
+ $S0 = $P0.'emit'(entry)
push res_builder, $S0
$S0 = join '', res_builder
@@ -249,7 +250,8 @@
unless $I0 goto no_init
push res, "/* class_init */\n"
- $S0 = self.'!generate_body'($P0)
+ $P1 = new ['PMC';'Emitter';'C']
+ $S0 = $P1.'emit'($P0)
push res, $S0
no_init:
@@ -260,46 +262,6 @@
.return ($S0)
.end
-=item C<!generate_body>
-
-Generate C function body from PAST.
-
-=cut
-
-.sub '!generate_body' :method
- .param pmc entry
-
- .local pmc res
- res = new 'ResizableStringArray'
- $P0 = entry.'iterator'()
- loop:
- unless $P0 goto done
- $P1 = shift $P0
- #print 'P1 '
- #say $P1
- $S0 = self.'!generate_body_part'($P1)
- push res, $S0
- goto loop
- done:
-
- $S0 = join '', res
- .return ($S0)
-.end
-
-=item C<!generate_body_part>
-
-Multi-methods for generating C body.
-
-TODO: Parse c_body properly and implement all other functions.
-
-=cut
-
-.sub '!generate_body_part' :method :multi(_, ['PAST';'Op'])
- .param pmc past
- $S0 = past['inline']
- .return ($S0)
-.end
-
.sub '!class_init' :method
.param pmc past
Modified: branches/pmc_pct/config/gen/makefiles/pmc.in
==============================================================================
--- branches/pmc_pct/config/gen/makefiles/pmc.in Sat May 2 05:17:12 2009 (r38436)
+++ branches/pmc_pct/config/gen/makefiles/pmc.in Sat May 2 05:17:38 2009 (r38437)
@@ -19,6 +19,7 @@
src/nodes.pir \
src/vtable_info.pir \
src/emitter/pmc.pir \
+ src/emitter/c.pir \
src/parser/gen_grammar.pir \
src/parser/gen_actions.pir \
src/gen_emitter.pir \
More information about the parrot-commits
mailing list