Index: t/compilers/pge/p6regex/01-regex.t
===================================================================
--- t/compilers/pge/p6regex/01-regex.t	(revision 13644)
+++ t/compilers/pge/p6regex/01-regex.t	(working copy)
@@ -28,6 +28,9 @@
         /rx/  = output matches result (note that /rx/ is a perl *5* regex)
     description of the test
 
+The test harness also has two variables @skip_tests and @todo_tests, which
+provide the test numbers and the reasons for todoing or skipping them.
+
 =head1 SYNOPSIS
 
 	% prove t/compilers/pge/01-regex.t
@@ -36,6 +39,34 @@
 
 my $tests = 't/compilers/pge/p6regex/regex_tests';
 
+my @todo_tests = (
+    q{conjunction (&) - null both args illegal} => qw<94>,
+    q{nth occurance (:nth)} => qw<517 518>,
+    q{basic ws match} => qw<507>,
+    q{alternation and conjunction (&|) - parse error} => qw<97>,
+    q{perl5 syntax (:perl5)} => qw<512>,
+    q{alternation (|) - null both args illegal} => qw<81>,
+    q{alternation (|) - null left arg illegal} => qw<80>,
+    q{retired metachars (\1)} => qw<115>,
+    q{alternation (|) - literal must be escaped} => qw<83>,
+    q{illegal character range} => qw<257>,
+    q{alternation and conjunction (|&) - parse error} => qw<98>,
+    q{retired metachars (\P)} => qw<107>,
+    q{conjunction (&) - null left arg illegal} => qw<93>,
+    q{retired metachars (\p)} => qw<105>,
+    q{conjunction (&) - literal must be escaped} => qw<96>,
+    q{gt character class} => qw<273>,
+    q{null pattern invalid} => qw<103>,
+    q{metasyntax with leading + (<+...>)} => qw<360>,
+);
+
+my @skip_tests = (
+);
+
+unless ($PConfig{has_icu}) {
+    push @skip_tests, q{no ICU} => qw<121>;
+}
+
 ##   Perform the tests.
 open TESTS, "<$tests" or die "Can't open $tests";
 while (<TESTS>) {
@@ -55,15 +86,14 @@
     $target =~ s/\\x(..)/chr(hex($1))/eg;
 
     my @todo = ();
-    if ($description =~ m{TODO:}) {
-	@todo = ('todo' => $description);
+    if (grep {$_ eq $.} @todo_tests) {
+        @todo = ('todo' => find_reason_for(@todo_tests));
     }
-    elsif ($description =~ m{ICU:} 
-	   && ! $PConfig{has_icu}) {
-      SKIP: {
-	  skip("no $description", 1);
-	}
-	next;
+    elsif (grep {$_ eq $.} @skip_tests) {
+        SKIP: {
+            skip(find_reason_for(@skip_tests), 1);
+        }
+        next;
     }
 
     if ($result =~ m{^/(.*)/$}) {
@@ -75,3 +105,11 @@
     }
 }
 close TESTS;
+
+sub find_reason_for {
+    my $reason;
+    for (@_) {
+        $reason = $_ and next if /\D/;
+        return $reason if $_ == $.;
+    }
+}
