Author: bernhard
Date: Sun May 4 05:44:48 2008
New Revision: 27318
Added:
trunk/languages/plumhead/src/common/driver_nqp.pir
trunk/languages/plumhead/src/phc/past_xml_to_past_nqp.xsl
- copied, changed from r27316,
/trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl
Modified:
trunk/ (props changed)
trunk/MANIFEST
trunk/MANIFEST.SKIP
trunk/languages/plumhead/ (props changed)
trunk/languages/plumhead/config/makefiles/root.in
trunk/languages/plumhead/src/common/builtins.pir
trunk/languages/plumhead/src/common/plumhead.pir
trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl
Log:
[Plumhead]
Start with setting up PAST in NQP for 'Plumhead PHC'.
Some tests are passing, most are failing.
Modified: trunk/MANIFEST
==============================================================================
--- trunk/MANIFEST (original)
+++ trunk/MANIFEST Sun May 4 05:44:48 2008
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Sat May 3 13:24:57 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun May 4 12:40:19 2008 UT
#
# See tools/dev/install_files.pl for documentation on the
# format of this file.
@@ -1981,10 +1981,12 @@
languages/plumhead/src/antlr3/PlumheadLexer.java [plumhead]
languages/plumhead/src/antlr3/PlumheadParser.java [plumhead]
languages/plumhead/src/common/builtins.pir [plumhead]
+languages/plumhead/src/common/driver_nqp.pir [plumhead]
languages/plumhead/src/common/plumhead.pir [plumhead]
languages/plumhead/src/pct/Plumhead.pg [plumhead]
languages/plumhead/src/pct/Plumhead/Grammar.pir [plumhead]
languages/plumhead/src/pct/PlumheadPAST.tg [plumhead]
+languages/plumhead/src/phc/past_xml_to_past_nqp.xsl [plumhead]
languages/plumhead/src/phc/past_xml_to_past_pir.xsl [plumhead]
languages/plumhead/src/phc/phc_xml_to_past_xml.xsl [plumhead]
languages/plumhead/t/harness [plumhead]
Modified: trunk/MANIFEST.SKIP
==============================================================================
--- trunk/MANIFEST.SKIP (original)
+++ trunk/MANIFEST.SKIP Sun May 4 05:44:48 2008
@@ -1,6 +1,6 @@
# ex: set ro:
# $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Sat May 3 13:24:57 2008 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun May 4 12:40:19 2008 UT
#
# This file should contain a transcript of the svn:ignore properties
# of the directories in the Parrot subversion repository. (Needed for
@@ -17,22 +17,10 @@
# generated from svn:ignore of './'
^.*\.core$
^.*\.core/
-^.*\.def$
-^.*\.def/
^.*\.exe$
^.*\.exe/
-^.*\.exp$
-^.*\.exp/
-^.*\.ilk$
-^.*\.ilk/
-^.*\.lib$
-^.*\.lib/
-^.*\.manifest$
-^.*\.manifest/
^.*\.ncb$
^.*\.ncb/
-^.*\.obj$
-^.*\.obj/
^.*\.patch$
^.*\.patch/
^.*\.pdb$
@@ -45,8 +33,6 @@
^.*\.tmp/
^.*\.vcproj.*$
^.*\.vcproj.*/
-^\.parrot_current_rev$
-^\.parrot_current_rev/
^CFLAGS$
^CFLAGS/
^MANIFEST\.configure\.generated$
@@ -61,8 +47,6 @@
^blib/
^config_lib\.pasm$
^config_lib\.pasm/
-^cover_db$
-^cover_db/
^disassemble$
^disassemble/
^install_config\.fpmc$
@@ -81,8 +65,6 @@
^parrot/
^parrot\.ilk$
^parrot\.ilk/
-^parrot\.iss$
-^parrot\.iss/
^parrot\.pc$
^parrot\.pc/
^parrot\.pdb$
@@ -91,16 +73,18 @@
^pbc_info/
^pbc_merge$
^pbc_merge/
-^pbc_to_exe$
-^pbc_to_exe/
-^pbc_to_exe\..*$
-^pbc_to_exe\..*/
^pdb$
^pdb/
^pdump$
^pdump/
-^perl6$
-^perl6/
+^plumhead_past\.nqp$
+^plumhead_past\.nqp/
+^plumhead_past\.pir$
+^plumhead_past\.pir/
+^plumhead_past\.xml$
+^plumhead_past\.xml/
+^plumhead_phc_ast\.xml$
+^plumhead_phc_ast\.xml/
^smoke\.html$
^smoke\.html/
^tags$
@@ -1004,6 +988,8 @@
# generated from svn:ignore of 'languages/plumhead/'
^languages/plumhead/Makefile$
^languages/plumhead/Makefile/
+^languages/plumhead/driver_nqp\.pbc$
+^languages/plumhead/driver_nqp\.pbc/
^languages/plumhead/plumhead\.log$
^languages/plumhead/plumhead\.log/
^languages/plumhead/plumhead\.pbc$
Modified: trunk/languages/plumhead/config/makefiles/root.in
==============================================================================
--- trunk/languages/plumhead/config/makefiles/root.in (original)
+++ trunk/languages/plumhead/config/makefiles/root.in Sun May 4 05:44:48 2008
@@ -79,7 +79,7 @@
build-pct: build-common
-build-phc: build-common
+build-phc: build-common driver_nqp.pbc
build-antlr3: build-common
@echo 'Be sure to have set CLASSPATH as laid out in docs/antlr3.pod'
@@ -103,6 +103,9 @@
src/pct/PlumheadPAST_gen.pir
$(PARROT) -o plumhead.pbc src/common/plumhead.pir
+driver_nqp.pbc: src/common/plumheadlib.pbc src/common/driver_nqp.pir
+ $(PARROT) -o driver_nqp.pbc src/common/driver_nqp.pir
+
test: all test-pct
test-all: all test-php test-phc test-antlr3 test-pct
@@ -130,6 +133,9 @@
clean-antlr3:
$(RM_F) src/antlr3/*.class
+clean-phc:
+ $(RM_F) driver_nqp.pbc
+
clean-test:
$(RM_F) t/php/*.php t/php/*.pir t/php/*.out t/pmc/*.pir
Modified: trunk/languages/plumhead/src/common/builtins.pir
==============================================================================
--- trunk/languages/plumhead/src/common/builtins.pir (original)
+++ trunk/languages/plumhead/src/common/builtins.pir Sun May 4 05:44:48 2008
@@ -1,7 +1,10 @@
# $Id$
+.sub 'print_newline'
+ say ''
+.end
+
# steal builtins from Perl6
-# TODO: put that into php_builtins.pir
.sub 'print'
.param pmc list :slurpy
.local pmc iter
Added: trunk/languages/plumhead/src/common/driver_nqp.pir
==============================================================================
--- (empty file)
+++ trunk/languages/plumhead/src/common/driver_nqp.pir Sun May 4 05:44:48 2008
@@ -0,0 +1,74 @@
+#!/usr/bin/env parrot
+
+.sub 'php_init' :load :init
+
+ load_bytecode 'PGE.pbc'
+ load_bytecode 'PGE/Text.pbc'
+ load_bytecode 'PGE/Util.pbc'
+ load_bytecode 'PGE/Dumper.pbc'
+ load_bytecode 'PCT.pbc'
+
+ load_bytecode 'languages/plumhead/src/common/plumheadlib.pbc'
+ load_bytecode 'MIME/Base64.pbc'
+ load_bytecode 'CGI/QueryHash.pbc'
+
+.end
+
+
+.sub plumhead :main
+
+ .param pmc argv
+
+ .local string program_name, nqp_fn
+ program_name = shift argv
+ nqp_fn = shift argv
+
+ # look for subs in other namespaces
+ .local pmc decode_base64_sub, parse_get_sub, parse_post_sub
+ decode_base64_sub = get_global [ 'MIME'; 'Base64' ], 'decode_base64'
+ parse_get_sub = get_global [ 'CGI'; 'QueryHash' ], 'parse_get'
+ parse_post_sub = get_global [ 'CGI'; 'QueryHash' ], 'parse_post'
+
+ # the superglobals
+ .local pmc superglobal_GET
+ ( superglobal_GET ) = parse_get_sub()
+ set_global '_GET', superglobal_GET
+
+ .local pmc superglobal_POST
+ ( superglobal_POST ) = parse_post_sub()
+ set_global '_POST', superglobal_POST
+
+ # compile NQP to PIR
+ .local string pir_fn, cmd
+ .local int ret
+ clone pir_fn, nqp_fn
+ substr pir_fn, -3, 3, 'pir'
+ cmd = "./parrot ./compilers/nqp/nqp.pbc --target=pir --output="
+ concat cmd, pir_fn
+ concat cmd, " "
+ concat cmd, nqp_fn
+ # say cmd
+ ret = spawnw cmd
+
+ # load the generated PIR
+ #$S1 = concat "languages/eclectus/", pir_fn
+ $S1 = concat "", pir_fn
+ load_bytecode $S1
+
+ .local pmc stmts
+ ( stmts ) = php_entry()
+
+ # compile and evaluate the PAST returned from scheme_entry()
+ .local pmc past_compiler
+ past_compiler = new [ 'PCT::HLLCompiler' ]
+ $P0 = split ' ', 'post pir'
+ past_compiler.'stages'( $P0 )
+ $P1 = past_compiler.'eval'(stmts)
+ #_dumper ($P1)
+ $P0 = split ' ', 'evalpmc'
+ past_compiler.'stages'( $P0 )
+ past_compiler.'eval'( $P1 )
+
+.end
+
+
Modified: trunk/languages/plumhead/src/common/plumhead.pir
==============================================================================
--- trunk/languages/plumhead/src/common/plumhead.pir (original)
+++ trunk/languages/plumhead/src/common/plumhead.pir Sun May 4 05:44:48 2008
@@ -141,12 +141,14 @@
ret = spawnw cmd
if ret goto ERROR
- err_msg = 'Creating PIR with xsltproc failed'
- cmd = 'xsltproc languages/plumhead/src/phc/past_xml_to_past_pir.xsl
plumhead_past.xml > plumhead_past.pir'
+ #err_msg = 'Creating PIR with xsltproc failed'
+ #cmd = 'xsltproc languages/plumhead/src/phc/past_xml_to_past_pir.xsl
plumhead_past.xml > plumhead_past.pir'
+ err_msg = 'Creating NQP with xsltproc failed'
+ cmd = 'xsltproc languages/plumhead/src/phc/past_xml_to_past_nqp.xsl
plumhead_past.xml > plumhead_past.nqp'
ret = spawnw cmd
if ret goto ERROR
err_msg = 'Executing plumhead_past.pir with parrot failed'
- cmd = './parrot plumhead_past.pir'
+ cmd = './parrot languages/plumhead/driver_nqp.pbc plumhead_past.nqp'
ret = spawnw cmd
if ret goto ERROR
Copied: trunk/languages/plumhead/src/phc/past_xml_to_past_nqp.xsl (from r27316,
/trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl)
==============================================================================
--- /trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl (original)
+++ trunk/languages/plumhead/src/phc/past_xml_to_past_nqp.xsl Sun May 4
05:44:48 2008
@@ -2,8 +2,7 @@
<xsl:stylesheet
xmlns:past="http://www.parrotcode.org/PAST-0.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version="1.0"
->
+ version="1.0" >
<!--
$Id$
@@ -18,86 +17,34 @@
<xsl:template match="/" >
# Do not edit this file.
-# This file has been generated by past_xml_to_past_pir.xsl
+# This file has been generated by past_xml_to_past_nqp.xsl
-<xsl:call-template name="php-init" />
-
-
-.sub plumhead :main
+sub php_entry () {
- # look for subs in other namespaces
- .local pmc decode_base64_sub, parse_get_sub, parse_post_sub
- decode_base64_sub = get_global [ "MIME"; "Base64" ], 'decode_base64'
- parse_get_sub = get_global [ 'CGI'; 'QueryHash' ], 'parse_get'
- parse_post_sub = get_global [ 'CGI'; 'QueryHash' ], 'parse_post'
-
- # the superglobals
- .local pmc superglobal_GET
- ( superglobal_GET ) = parse_get_sub()
- set_global "_GET", superglobal_GET
-
- .local pmc superglobal_POST
- ( superglobal_POST ) = parse_post_sub()
- set_global "_POST", superglobal_POST
-
- # The root node of PAST.
- .local pmc past_node_<xsl:value-of select="generate-id(.)" />
- past_node_<xsl:value-of select="generate-id(.)" /> = new 'PAST::Block'
- past_node_<xsl:value-of select="generate-id(.)" />.init('name' =>
'plumhead_main')
-
<xsl:apply-templates />
- # '_dumper'(past_node_<xsl:value-of select="generate-id(.)" />, 'past')
- # '_dumper'(superglobal_POST , 'superglobal_POST')
- # '_dumper'(superglobal_GET , 'superglobal_GET')
-
- # .local pmc post
- # post = past_node_<xsl:value-of select="generate-id(.)" />.'compile'(
'target' => 'post' )
- # '_dumper'(post, 'post')
-
- # .local pmc pir
- # pir = past_node_<xsl:value-of select="generate-id(.)" />.'compile'(
'target' => 'pir' )
- # print pir
+}
- .local pmc past_compiler
- past_compiler = new [ 'PCT::HLLCompiler' ]
- $P0 = split ' ', 'post pir evalpmc'
- past_compiler.'stages'( $P0 )
- past_compiler.'eval'(past_node_<xsl:value-of select="generate-id(.)" />)
+</xsl:template>
-.end
-
+<xsl:template match="past:Stmts" >
+ PAST::Stmts.new(
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates /> );
</xsl:template>
-<xsl:template match="past:Stmts | past:Op | past:Val | past:Var | past:Block" >
+<xsl:template match=" past:Op | past:Val | past:Var | past:Block" >
- # start of generic node
- .local pmc past_node_<xsl:value-of select="generate-id(.)" />
- past_node_<xsl:value-of select="generate-id(.)" /> = new '<xsl:choose>
+ <xsl:choose>
<xsl:when test="name() = 'past:Block'" >PAST::Block</xsl:when>
<xsl:when test="name() = 'past:Exp'" >PAST::Exp</xsl:when>
<xsl:when test="name() = 'past:Op'" >PAST::Op</xsl:when>
<xsl:when test="name() = 'past:Stmt'" >PAST::Stmt</xsl:when>
- <xsl:when test="name() = 'past:Stmts'" >PAST::Stmts</xsl:when>
<xsl:when test="name() = 'past:Var'" >PAST::Var</xsl:when>
- </xsl:choose>'
+ <xsl:when test="name() = 'past:Val'" >PAST::Val</xsl:when>
+ </xsl:choose>.new(
<xsl:apply-templates select="@*"/>
- <xsl:apply-templates />
- past_node_<xsl:value-of select="generate-id(..)" />.'push'(
past_node_<xsl:value-of select="generate-id(.)" /> )
- null past_node_<xsl:value-of select="generate-id(.)" />
- # end of generic node
-
-</xsl:template>
-
-<xsl:template match="past:Val">
-
- # start of past:Val
- .local pmc past_node_<xsl:value-of select="generate-id(.)" />
- past_node_<xsl:value-of select="generate-id(.)" /> = new 'PAST::Val'
- <xsl:apply-templates select="@value"/>
- <xsl:apply-templates select="@returns"/>
- past_node_<xsl:value-of select="generate-id(..)" />.'push'(
past_node_<xsl:value-of select="generate-id(.)" /> )
- # end of past:Val
+ <xsl:apply-templates /> ),
</xsl:template>
@@ -105,37 +52,19 @@
<xsl:template match="@value">
<xsl:choose>
<xsl:when test="../@encoding = 'base64'" >
- .local string decoded
- decoded = decode_base64_sub( "<xsl:value-of select="." />" )
- past_node_<xsl:value-of select="generate-id(..)" />.'attr'(
'<xsl:value-of select="name()" />', decoded, 1 )
- null decoded
+ :<xsl:value-of select="name()" />( "\n" ),
</xsl:when>
<xsl:otherwise>
- past_node_<xsl:value-of select="generate-id(..)" />.'attr'(
'<xsl:value-of select="name()" />', '<xsl:value-of select="." />', 1 )
+ :<xsl:value-of select="name()" />( '<xsl:value-of select="." />' ),
</xsl:otherwise>
</xsl:choose>
</xsl:template>
-<xsl:template match="@*">
- past_node_<xsl:value-of select="generate-id(..)" />.'attr'( '<xsl:value-of
select="name()" />', '<xsl:value-of select="." />', 1 )
+<xsl:template match="@encoding">
</xsl:template>
-<xsl:template name="php-init" >
-
-.sub 'php_init' :load :init
-
- load_bytecode 'PGE.pbc'
- load_bytecode 'PGE/Text.pbc'
- load_bytecode 'PGE/Util.pbc'
- load_bytecode 'PGE/Dumper.pbc'
- load_bytecode 'PCT.pbc'
- load_bytecode 'languages/plumhead/src/common/plumheadlib.pbc'
- load_bytecode 'MIME/Base64.pbc'
- load_bytecode 'dumper.pbc'
- load_bytecode 'CGI/QueryHash.pbc'
-
-.end
-
+<xsl:template match="@*">
+ :<xsl:value-of select="name()" />( '<xsl:value-of select="." />' ),
</xsl:template>
</xsl:stylesheet>
Modified: trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl
==============================================================================
--- trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl (original)
+++ trunk/languages/plumhead/src/phc/past_xml_to_past_pir.xsl Sun May 4
05:44:48 2008
@@ -8,6 +8,8 @@
$Id$
+This file will soon be removed, as it is being replaced by
past_xml_to_past_nqp.xsl.
+
This transformation takes an abstract syntax tree as generated
by phc_xml_to_past_xml.xsl. It generates a PIR-script that creates
a PAST data structure and runs it with the help of a PCT::HLLCompiler.