[svn:parrot] r38288 - in branches/pmc_pct: compilers/pmc compilers/pmc/src compilers/pmc/src/parser compilers/pmc/t compilers/pmc/t/data config/gen config/gen/makefiles
bacek at svn.parrot.org
bacek at svn.parrot.org
Fri Apr 24 10:46:26 UTC 2009
Author: bacek
Date: Fri Apr 24 10:46:24 2009
New Revision: 38288
URL: https://trac.parrot.org/parrot/changeset/38288
Log:
Initial drop for PMC parsing.
Added:
branches/pmc_pct/compilers/pmc/
branches/pmc_pct/compilers/pmc/README.pod
branches/pmc_pct/compilers/pmc/TODO
branches/pmc_pct/compilers/pmc/pmc.pir
branches/pmc_pct/compilers/pmc/src/
branches/pmc_pct/compilers/pmc/src/builtins.pir
branches/pmc_pct/compilers/pmc/src/parser/
branches/pmc_pct/compilers/pmc/src/parser/actions.pm
branches/pmc_pct/compilers/pmc/src/parser/grammar.pg
branches/pmc_pct/compilers/pmc/t/
branches/pmc_pct/compilers/pmc/t/01-parse.t
branches/pmc_pct/compilers/pmc/t/data/
branches/pmc_pct/compilers/pmc/t/data/class.pmc
branches/pmc_pct/compilers/pmc/t/data/class00.pmc
branches/pmc_pct/compilers/pmc/t/data/class01.pmc
branches/pmc_pct/compilers/pmc/t/data/class02.pmc
branches/pmc_pct/compilers/pmc/t/data/class03.pmc
branches/pmc_pct/compilers/pmc/t/data/class04.pmc
branches/pmc_pct/compilers/pmc/t/data/class05.pmc
branches/pmc_pct/compilers/pmc/t/data/class06.pmc
branches/pmc_pct/compilers/pmc/t/data/class07.pmc
branches/pmc_pct/compilers/pmc/t/data/class08.pmc
branches/pmc_pct/compilers/pmc/t/data/class09.pmc
branches/pmc_pct/compilers/pmc/t/data/class10.pmc
branches/pmc_pct/compilers/pmc/t/data/class11.pmc
branches/pmc_pct/compilers/pmc/t/data/class12.pmc
branches/pmc_pct/config/gen/makefiles/pmc.in
Modified:
branches/pmc_pct/config/gen/makefiles.pm
branches/pmc_pct/config/gen/makefiles/root.in
Added: branches/pmc_pct/compilers/pmc/README.pod
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/README.pod Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,6 @@
+## $Id$
+
+=head1 PMC - experimental PMC compiler written in PCT
+
+=cut
+
Added: branches/pmc_pct/compilers/pmc/TODO
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/TODO Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,6 @@
+Simple todo list for PMC compiler.
+
+1. Implement parsing PMC.
+2. Implement emiting C code.
+3. ...
+4. Profit!
Added: branches/pmc_pct/compilers/pmc/pmc.pir
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/pmc.pir Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,32 @@
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+.namespace [ 'PMC';'Compiler' ]
+
+.sub '__onload' :load :init
+ load_bytecode 'PGE.pbc'
+ load_bytecode 'PCT.pbc'
+ load_bytecode 'compilers/nqp/nqp.pbc'
+
+ $P0 = new [ 'PCT';'HLLCompiler' ]
+ $P0.'language'('PMC')
+ $P0.'parsegrammar'('PMC::Grammar')
+ $P0.'parseactions'('PMC::Grammar::Actions')
+
+.end
+
+.sub 'main' :main
+ .param pmc args
+ $P0 = compreg 'PMC'
+ .tailcall $P0.'command_line'(args, 'encoding'=>'utf8', 'transcode'=>'ascii')
+.end
+
+.include 'src/parser/gen_grammar.pir'
+.include 'src/parser/gen_actions.pir'
+.include 'src/builtins.pir'
+
+# Local Variables:
+# mode: pir
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
Added: branches/pmc_pct/compilers/pmc/src/builtins.pir
==============================================================================
Added: branches/pmc_pct/compilers/pmc/src/parser/actions.pm
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/src/parser/actions.pm Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,63 @@
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+class PMC::Grammar::Actions;
+
+method TOP($/) {
+ #say("TOP");
+ make $( $<pmc> );
+}
+
+method pmc($/) {
+ #say("pmc");
+ my $pmc := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $pmc;
+}
+
+method c_header($/) {
+ say("c_header");
+ say(~$/);
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+method pmc_class($/) {
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+method vtable($/) {
+ #say('VABLE ' ~$<c_signature>);
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+method method($/) {
+ #say('METHOD ' ~$<identifier>);
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+method multi($/) {
+ #say('MULTI ' ~$<identifier>);
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+method body($/) {
+ #say("body");
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+method c_body($/) {
+ #say("c_body: " ~ $/);
+ my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+ make $past;
+}
+
+# Local Variables:
+# mode: pir
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
Added: branches/pmc_pct/compilers/pmc/src/parser/grammar.pg
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/src/parser/grammar.pg Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,111 @@
+# Copyright (C) 2009, Parrot Foundation.
+# $Id$
+
+
+=begin overview
+
+This is PMC grammar.
+
+(ATM) PMC consists of
+1. Some pure C header.
+2. PMC class definition.
+3. Optional ATTRibutes.
+4. Mix of VTABLE and METHODS.
+
+=end overview
+
+grammar PMC::Grammar is PCT::Grammar;
+
+token TOP {
+ #<c_header>
+ <pmc>
+ [ $ || <panic: 'Syntax error'> ]
+ {*}
+}
+
+rule c_header {
+# .* way too gready...
+# [.*] [<!before 'pmclass'> ]
+ {*}
+}
+
+# pmc action will store "header" and "footer"
+rule pmc {
+ 'pmclass' <identifier> <traits>* '{'
+ <attribute>*
+ <body>
+ '}'
+ {*}
+}
+
+rule traits {
+ [
+ | 'extends' <identifier>
+ | 'provides' <identifier>
+ ]
+}
+
+rule attribute {
+ 'ATTR' <c_type> <identifier> ';'
+}
+
+# Body of PMC class.
+rule body {
+ [ <vtable> | <method> | <multi> ]*
+ {*}
+}
+
+rule vtable {
+ 'VTABLE' <c_signature> <c_body>
+ {*}
+}
+
+rule method {
+ 'METHOD' <identifier> '(' <c_arguments> ')' <c_body>
+ {*}
+}
+
+rule multi {
+ 'MULTI' <c_signature> <c_body>
+ {*}
+}
+
+# Nested list of something
+rule c_body {
+ '{' [ <-[{}]> | <c_body> ]* '}'
+ {*}
+}
+
+# It's really bad signature
+rule c_signature {
+ <c_type> <identifier> '(' <c_arguments> ')'
+}
+
+# Very-very simplified C type. E.g. "void", "PMC *", etc
+rule c_type {
+ <identifier> '*'?
+}
+
+# Very-very simplified named? function param.
+rule c_argument {
+ <c_type> <identifier>?
+}
+
+rule c_arguments {
+ [ <c_argument> [ ',' <c_argument> ]* ]*
+}
+
+token identifier {
+ <.ident>
+}
+
+## ws token handles whitespaces and C /* */ comments
+token ws {
+ [
+ | '//' \N* \n
+ | '/*' .*? '*/'
+ | \s+
+ ]*
+}
+
+
Added: branches/pmc_pct/compilers/pmc/t/01-parse.t
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/01-parse.t Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,59 @@
+#!parrot
+
+
+.sub 'main' :main
+.include 'test_more.pir'
+load_bytecode 'compilers/pmc/pmc.pbc'
+ .local int total
+ total = 13
+
+ plan(total)
+ test_parse(total)
+.end
+
+.sub 'test_parse'
+ .param int total
+ .local int i
+ i = 0
+ loop:
+ $P0 = new 'ResizablePMCArray'
+ push $P0, i
+ $S0 = sprintf "./compilers/pmc/t/data/class%02d.pmc", $P0
+ test_parse_one($S0)
+ inc i
+ unless i >= total goto loop
+
+.end
+
+.sub 'test_parse_one'
+ .param string file
+ $S0 = _slurp(file)
+ .local pmc compiler
+ compiler = compreg 'PMC'
+ push_eh fail
+ compiler.'parse'($S0)
+ pop_eh
+ ok(1, file)
+ .return ()
+ fail:
+ pop_eh
+ ok(0, file)
+.end
+
+.sub '_slurp'
+ .param string file
+ .local pmc pio
+ pio = open file
+ $S0 = pio.'readall'()
+ close pio
+ .return ($S0)
+.end
+
+# Don't forget to update plan!
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
Added: branches/pmc_pct/compilers/pmc/t/data/class.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,2 @@
+pmclass Foo {
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class00.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class00.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,2 @@
+pmclass Foo {
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class01.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class01.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,2 @@
+pmclass Foo extends scalar {
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class02.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class02.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,2 @@
+pmclass Foo provides scalar {
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class03.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class03.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,4 @@
+/*
+*/
+pmclass Foo extends scalar provides scalar {
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class04.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class04.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,4 @@
+pmclass Foo extends scalar provides scalar {
+ METHOD foo (void) {
+ }
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class05.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class05.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,6 @@
+pmclass Foo extends scalar provides scalar {
+ METHOD foo (void) {
+ if {
+ }
+ }
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class06.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class06.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,12 @@
+pmclass Foo extends scalar provides scalar {
+/*
+=item C<foo>
+
+=cut
+
+*/
+ METHOD foo (void) {
+ if {
+ }
+ }
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class07.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class07.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,7 @@
+pmclass Integer extends scalar provides integer provides scalar {
+
+ VTABLE PMC *instantiate(PMC *sig) {
+ }
+
+}
+
Added: branches/pmc_pct/compilers/pmc/t/data/class08.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class08.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,93 @@
+/*
+Copyright (C) 2003-2008, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/integer.pmc - Integer PMC class
+
+=head1 DESCRIPTION
+
+C<Integer> provides an integer for languages that want a value-restricted
+integer type without going to an I register.
+
+=head2 Functions
+
+=over 4
+
+=cut
+
+*/
+
+#include "parrot/parrot.h"
+
+#include "pmc_bigint.h"
+
+static void
+maybe_throw_overflow_error(PARROT_INTERP)
+{
+ /* check to see what the behavior is. If the interpreter is set
+ to throw an exception on overflow. If so, throw the exception,
+ otherwise, chill out it's no big deal. */
+ if (PARROT_ERRORS_test(interp, PARROT_ERRORS_OVERFLOW_FLAG))
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ERR_OVERFLOW,
+ "Integer overflow");
+}
+
+static PMC*
+upgrade_self_to_bignum(PARROT_INTERP, PMC *self)
+{
+ /* Do an in-place upgrade to a Bignum of SELF and return a pointer
+ to it (which is probably redundant, but whatever). */
+ const INTVAL a = VTABLE_get_integer(interp, self);
+ pmc_reuse(interp, self, enum_class_BigInt, 0);
+ VTABLE_set_integer_native(interp, self, a);
+ return self;
+}
+
+pmclass Integer extends scalar provides integer provides scalar {
+
+/*
+=item C<PMC instantiate(PMC *sig)>
+
+Create a new Integer with arguments passed according to pdd03.
+
+=item C<void init()>
+
+Initializes the integer with a default value of C<0>.
+
+=item C<void destroy()>
+
+Destroys this PMC.
+
+=cut
+
+*/
+
+ VTABLE PMC *instantiate(PMC *sig) {
+ PMC * const ret = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
+ const opcode_t * const arg_op = interp->current_args;
+ INTVAL init = 0;
+
+ if (VTABLE_elements(interp, sig) == 2) {
+ switch (VTABLE_get_integer_keyed_int(INTERP, sig, 1)) {
+ case PARROT_ARG_I:
+ init = REG_INT(interp, arg_op[3]);
+ break;
+ case PARROT_ARG_IC:
+ init = arg_op[3];
+ break;
+ default:
+ Parrot_ex_throw_from_c_args(INTERP, NULL,
+ EXCEPTION_SYNTAX_ERROR,
+ "Integer.instantiate: unhandled initializer");
+ break;
+ }
+ }
+
+ VTABLE_set_integer_native(INTERP, ret, init);
+ return ret;
+ }
+
+}
+
Added: branches/pmc_pct/compilers/pmc/t/data/class09.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class09.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,3 @@
+pmclass foo {
+ ATTR int int_attribute;
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class10.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class10.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,4 @@
+pmclass foo {
+ ATTR int int_attribute;
+ ATTR PMC* pmc_attribute;
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class11.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class11.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,16 @@
+pmclass foo {
+ ATTR int int_attribute;
+ ATTR PMC* pmc_attribute;
+
+/*
+=item foo
+
+=cut
+*/
+ VTABLE void foo() {
+ /* some foo */
+ if (1) {
+ fprintf(stdout, "Hello");
+ }
+ }
+}
Added: branches/pmc_pct/compilers/pmc/t/data/class12.pmc
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/compilers/pmc/t/data/class12.pmc Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,22 @@
+pmclass Foo {
+
+ MULTI PMC *add(Integer value, PMC *dest) {
+ const INTVAL a = SELF.get_integer();
+ const INTVAL b = VTABLE_get_integer(INTERP, value);
+ const INTVAL c = a + b;
+
+ if ((c^a) >= 0 || (c^b) >= 0) {
+ dest = pmc_new(INTERP, VTABLE_type(interp, SELF));
+
+ /* need this for e.g. Undef PMC */
+ VTABLE_set_integer_native(INTERP, dest, c);
+ return dest;
+ }
+ else {
+ PMC * temp;
+ maybe_throw_overflow_error(interp);
+ temp = VTABLE_get_bignum(interp, SELF);
+ return VTABLE_add(interp, temp, value, dest);
+ }
+ }
+}
Modified: branches/pmc_pct/config/gen/makefiles.pm
==============================================================================
--- branches/pmc_pct/config/gen/makefiles.pm Fri Apr 24 10:21:38 2009 (r38287)
+++ branches/pmc_pct/config/gen/makefiles.pm Fri Apr 24 10:46:24 2009 (r38288)
@@ -48,6 +48,8 @@
{ SOURCE => 'config/gen/makefiles/tge.in' },
'compilers/json/Makefile' =>
{ SOURCE => 'config/gen/makefiles/json.in' },
+ 'compilers/pmc/Makefile' =>
+ { SOURCE => 'config/gen/makefiles/pmc.in' },
'compilers/pirc/Makefile' =>
{ SOURCE => 'config/gen/makefiles/pirc.in' },
'src/dynpmc/Makefile' =>
Added: branches/pmc_pct/config/gen/makefiles/pmc.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pmc_pct/config/gen/makefiles/pmc.in Fri Apr 24 10:46:24 2009 (r38288)
@@ -0,0 +1,81 @@
+# Copyright (C) 2007-2009, Parrot Foundation.
+# $Id$
+
+# Setup some commands
+PERL := @perl@
+RM_F := @rm_f@
+PARROT := ../../parrot at exe@
+
+BUILD_DIR := @build_dir@
+NQP := $(BUILD_DIR)/compilers/nqp/nqp.pbc
+PCT := $(BUILD_DIR)/runtime/parrot/library/PCT.pbc
+PARROT_LIBRARY := @build_dir@/runtime/parrot/library
+PGE_LIBRARY := @build_dir@/runtime/parrot/library/PGE
+
+all: pmc.pbc
+
+SOURCES := \
+ pmc.pir \
+ src/parser/gen_grammar.pir \
+ src/parser/gen_actions.pir \
+ src/builtins.pir
+
+# the default target
+pmc.pbc: $(PARROT) $(PGE_LIBRARY)/Perl6Grammar.pir $(SOURCES)
+ $(PARROT) $(PARROT_ARGS) $(PGE_LIBRARY)/Perl6Grammar.pir \
+ --output=src/parser/gen_grammar.pir src/parser/grammar.pg
+ $(PARROT) -o pmc.pbc pmc.pir
+
+src/parser/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg
+ $(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
+ --output=src/parser/gen_grammar.pir \
+ src/parser/grammar.pg
+
+src/parser/gen_actions.pir: $(NQP) $(PCT) src/parser/actions.pm
+ $(PARROT) $(PARROT_ARGS) $(NQP) --output=src/parser/gen_actions.pir \
+ --target=pir src/parser/actions.pm
+
+
+# This is a listing of all targets, that are meant to be called by users
+help:
+ @echo ""
+ @echo "Following targets are available for the user:"
+ @echo ""
+ @echo " all: nqp.pbc"
+ @echo " This is the default."
+ @echo "Testing:"
+ @echo " test: Run the test suite."
+ @echo " testclean: Clean up test results."
+ @echo ""
+ @echo "Cleaning:"
+ @echo " clean: Basic cleaning up."
+ @echo " realclean: Removes also files generated by 'Configure.pl'"
+ @echo " distclean: Removes also anything built, in theory"
+ @echo ""
+ @echo "Misc:"
+ @echo " help: Print this help message."
+ @echo ""
+
+test: all
+ $(PERL) t/harness t
+
+# this target has nothing to do
+testclean:
+
+CLEANUPS := \
+ pmc.pbc \
+ src/parser/grammar.pir
+
+
+clean:
+ $(RM_F) $(CLEANUPS)
+
+realclean: clean
+ $(RM_F) Makefile
+
+distclean: realclean
+
+# Local variables:
+# mode: makefile
+# End:
+# vim: ft=make:
Modified: branches/pmc_pct/config/gen/makefiles/root.in
==============================================================================
--- branches/pmc_pct/config/gen/makefiles/root.in Fri Apr 24 10:21:38 2009 (r38287)
+++ branches/pmc_pct/config/gen/makefiles/root.in Fri Apr 24 10:46:24 2009 (r38288)
@@ -152,6 +152,7 @@
compilers/pct/Makefile \
compilers/pge/Makefile \
compilers/tge/Makefile \
+ compilers/pmc/Makefile \
editor/Makefile \
ext/Makefile \
src/dynoplibs/Makefile
@@ -1392,6 +1393,7 @@
$(MAKE) compilers/tge
$(MAKE) compilers/nqp
$(MAKE) compilers/json
+ $(MAKE) compilers/pmc
compilers-clean :
$(MAKE) compilers/pct clean
@@ -1400,6 +1402,7 @@
$(MAKE) compilers/nqp clean
$(MAKE) compilers/json clean
$(MAKE) compilers/pirc clean
+ $(MAKE) compilers/pmc clean
###############################################################################
#
More information about the parrot-commits
mailing list