[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