Patch below removes some evil mucking around in string internals that
was in the regular expression engine.  All (expected) tests pass on
Windows native and Cygwin.  (PerlArrays and PerlHashes are still causing
segfaults on Windows native.)

--Brent Dax
[EMAIL PROTECTED]
Configure pumpking for Perl 6

<obra> mmmm. hawt sysadmin chx0rs
<lathos> This is sad. I know of *a* hawt sysamin chx0r.
<obra> I know more than a few.
<lathos> obra: There are two? Are you sure it's not the same one?


diff -ur /parrot-cvs/include/parrot/rx.h /parrot/include/parrot/rx.h
--- /parrot-cvs/include/parrot/rx.h     Thu Jan 10 16:04:56 2002
+++ /parrot/include/parrot/rx.h Thu Jan 10 16:10:24 2002
@@ -59,8 +59,7 @@
 STRING *rxP_get_substr(struct Parrot_Interp *, STRING *, INTVAL,
INTVAL);

 #define RX_dUNPACK(pmc)                                rxinfo *rx=(rxinfo *)pmc->data
-/* this one is really quite evil */
-#define RxCurChar(rx)                          ((char 
*)rx->string->bufstart)[rx->index]
+#define RxCurChar(rx)                          (char)string_ord(rx->string, rx->index)
 #define RxCurCharS(rx)                         rxP_get_substr(interpreter, rx->string,
rx->index, 1)

 #define RxAdvance(rx)                          RxAdvanceX(rx, 1)
diff -ur /parrot-cvs/rx.ops /parrot/rx.ops
--- /parrot-cvs/rx.ops  Thu Jan 10 16:04:54 2002
+++ /parrot/rx.ops      Thu Jan 10 16:12:02 2002
@@ -549,7 +549,7 @@
        rx->minlength=$3;

        for(i=0; i < string_length($2); i++) {
-               switch(((char *)$2->bufstart)[i]) {
+               switch((char)string_ord($2, i)) {
                        case 'i':
                                RxCaseInsensitive_on(rx);
                                break;
@@ -564,7 +564,7 @@
                                rx->index=rx->startindex=string_length(rx->string);
                                break;
                        default:
-                               fprintf(stderr, "Unknown regular expression option 
'%c'.",
((char*)$2->bufstart)[i]);
+                               fprintf(stderr, "Unknown regular expression option 
+'%c'.",
(char)string_ord($2, i));
                                HALT();
                }
        }

Reply via email to