The below patches are my guess as to how to fix PGE and TGE for the recent
change in .namespace. (That is, C<.namespace ['']> now means what it says,
and the HLL root is reachable by C<.namespace> w/o parameters.)
The TGE patch seems to work, but I got test failure from my PGE patch.
Patrick? Allison?
=== compilers/tge/TGE/Compiler.pir
==================================================================
--- compilers/tge/TGE/Compiler.pir (revision 13181)
+++ compilers/tge/TGE/Compiler.pir (local)
@@ -380,6 +380,9 @@
.return (code)
.end
+# NOTE - this code assumes that a type of '' is impossible
+# (in older versions of Parrot, it was)
+
.sub 'grammar_string' :method
.param pmc grammar
.local string code
@@ -387,9 +390,13 @@
.local string inherit
type = grammar["type"]
inherit = grammar["inherit"]
- code = "\n.namespace [ '"
+ code = "\n.namespace"
+ if type == '' goto no_type
+ code .= " [ '"
code .= type
- code .= "' ]\n\n"
+ code .= "' ]"
+ no_type:
+ code .= "\n\n"
code .= ".sub '__onload' :load\n"
code .= " load_bytecode 'TGE.pbc'\n"
code .= " $I0 = find_type '"
=== compilers/pge/PGE/P6Regex.pir
==================================================================
--- compilers/pge/PGE/P6Regex.pir (revision 13181)
+++ compilers/pge/PGE/P6Regex.pir (local)
@@ -117,9 +117,14 @@
pir:
.local pmc code
.local string grammar
+ .local string nsformat
grammar = adverbs['grammar']
+ nsformat = ".namespace"
+ if grammar == '' goto pir_emit
+ nsformat = ".namespace [ '%0' ]"
+ pir_emit:
code = new 'PGE::CodeString'
- code.emit(".namespace [ '%0' ]", grammar)
+ code.emit(nsformat, grammar)
$P0 = exp.root_pir(adverbs :flat :named)
code .= $P0
if target != 'PIR' goto bytecode
--
Chip Salzenberg <[EMAIL PROTECTED]>