[svn:mod_parrot] r550 - mod_parrot/trunk/languages/perl6/lib/ModPerl6

[email protected] Wed, 17 Dec 2008 13:59:00 -0800 (PST)
Newsgroups perl.cvs.mod_parrot
Message-ID <[email protected]>
Author: jhorwitz
Date: Wed Dec 17 13:58:59 2008
New Revision: 550

Modified:
   mod_parrot/trunk/languages/perl6/lib/ModPerl6/Fudge.pir
   mod_parrot/trunk/languages/perl6/lib/ModPerl6/Registry.pm

Log:
fudge setting %*ENV until hash value binding works again
fix header parsing


Modified: mod_parrot/trunk/languages/perl6/lib/ModPerl6/Fudge.pir
==============================================================================
--- mod_parrot/trunk/languages/perl6/lib/ModPerl6/Fudge.pir	(original)
+++ mod_parrot/trunk/languages/perl6/lib/ModPerl6/Fudge.pir	Wed Dec 17 13:58:59 2008
@@ -68,3 +68,14 @@
   return_result:
     .return($P0)
 .end
+
+# NAME: setenv
+# PURPOSE: sets the value of an environment variable
+# FUDGES: %*ENV<foo> = 'bar' and its workaround %*ENV<foo> := 'bar';
+.sub setenv
+    .param pmc key
+    .param pmc val
+
+    $P0 = get_hll_global '%ENV'
+    $P0[key] = val
+.end

Modified: mod_parrot/trunk/languages/perl6/lib/ModPerl6/Registry.pm
==============================================================================
--- mod_parrot/trunk/languages/perl6/lib/ModPerl6/Registry.pm	(original)
+++ mod_parrot/trunk/languages/perl6/lib/ModPerl6/Registry.pm	Wed Dec 17 13:58:59 2008
@@ -26,7 +26,12 @@
     my $out = '';
     my $headers_out = $r.headers_out();
     for $in.split(/\n/) -> $line {
-        if (!$headers_done && $line ~~ /<header_regex>/) {
+        if ($line eq '') {
+            if ($headers_done) {
+                $out ~= "\n";
+            }
+        }
+        elsif (!$headers_done && $line ~~ /<header_regex>/) {
             my $key = ~$<header_regex>[0];
             my $val = ~$<header_regex>[1];
             given $key.lc {
@@ -36,9 +41,7 @@
         }
         # this will catch non-headers as well as the blank line postamble
         else {
-            if ($headers_done) {
-            }
-            else {
+            unless ($headers_done) {
                 $r.notes.set('modperl6-parsed-headers', 'yes');
                 $headers_done = 1;
             }
@@ -54,7 +57,9 @@
 # XXX kludge alert!  temporary workaround until we can subclass FileHandle
 sub registry_print($r, $do_headers, *@args)
 {
-    @args.map({$r.puts($do_headers ?? parse_headers($r, $_) !! $_)});
+    for @args -> $arg {
+        $r.puts($do_headers ?? parse_headers($r, $arg) !! $arg);
+    }
 }
 
 sub handler($r)
@@ -79,19 +84,19 @@
     my $cookies = $headers_in.get('Cookie');
 
     # set environment variables expected by CGI scripts
-    # XXX binding (:=) works, but assigning (=) doesn't
+    # XXX use %*ENV when Rakudo RT #61412 is fixed
     my $args = $r.args();
     my $uri = $args ?? ($r.uri() ~ '?' ~ $args) !! $r.uri();
-    %*ENV<MODPERL6> := 1;
-    %*ENV<QUERY_STRING> := $args;
-    %*ENV<PATH_INFO> := $r.path_info();
-    %*ENV<REQUEST_METHOD> := $r.method();
-    %*ENV<REQUEST_URI> := $uri;
-    %*ENV<CONTENT_LENGTH> := $content_length;
-    %*ENV<HTTP_COOKIE> := $cookies;
-    %*ENV<SERVER_NAME> := $r.hostname;
-    # XXX requires server_rec
-    # %*ENV<SERVER_PORT> := ;
+    ModPerl6::Fudge::setenv('MODPERL6', 1);
+    ModPerl6::Fudge::setenv('QUERY_STRING', $args);
+    ModPerl6::Fudge::setenv('PATH_INFO', $r.path_info);
+    ModPerl6::Fudge::setenv('REQUEST_METHOD', $r.method);
+    ModPerl6::Fudge::setenv('REQUEST_URI', $uri);
+    ModPerl6::Fudge::setenv('CONTENT_LENGTH', $content_length);
+    ModPerl6::Fudge::setenv('HTTP_COOKIE', $cookies);
+    ModPerl6::Fudge::setenv('SERVER_NAME', $r.hostname);
+    ## XXX requires server_rec
+    #ModPerl6::Fudge::setenv('SERVER_PORT', $server_port);
 
     # XXX kludge alert!  temporary workaround until we can subclass FileHandle
     our &CORE::say := &*say;