make regcharclass hash order determinisitic
authorYves Orton <demerphq@gmail.com>
Sat, 17 Nov 2012 13:02:18 +0000 (14:02 +0100)
committerYves Orton <demerphq@gmail.com>
Sat, 17 Nov 2012 13:02:18 +0000 (14:02 +0100)
regcharclass.h
regen/regcharclass.pl

index c977a56..f7b4229 100644 (file)
     : ( 0xE1 == ((U8*)s)[0] ) ?                                             \
        ( ( 0xBC == ((U8*)s)[1] ) ?                                         \
            ( ( ( ( ( ((U8*)s)[2] & 0xD8 ) == 0x80 ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
-       : ( ( ( ( 0xBD == ((U8*)s)[1] ) && ( ( ( ((U8*)s)[2] & 0xF8 ) == 0xA0 ) || ((U8*)s)[2] == 0xB0 || ( ( ((U8*)s)[2] & 0xF7 ) == 0xB4 ) ) ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
+       : ( ( ( ( 0xBD == ((U8*)s)[1] ) && ( ( ( ((U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((U8*)s)[2] & 0xFB ) == 0xB0 ) || ((U8*)s)[2] == 0xBC ) ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 4) ?                                                           \
     ( ( 0x61 == ((U8*)s)[0] ) ?                                             \
     : ( 0xE1 == ((U8*)s)[0] ) ?                                             \
        ( ( 0xBC == ((U8*)s)[1] ) ?                                         \
            ( ( ( ( ( ((U8*)s)[2] & 0xD8 ) == 0x80 ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
-       : ( ( ( ( 0xBD == ((U8*)s)[1] ) && ( ( ( ((U8*)s)[2] & 0xF8 ) == 0xA0 ) || ((U8*)s)[2] == 0xB0 || ( ( ((U8*)s)[2] & 0xF7 ) == 0xB4 ) ) ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
+       : ( ( ( ( 0xBD == ((U8*)s)[1] ) && ( ( ( ((U8*)s)[2] & 0xF8 ) == 0xA0 ) || ( ( ((U8*)s)[2] & 0xFB ) == 0xB0 ) || ((U8*)s)[2] == 0xBC ) ) && ( 0xCE == ((U8*)s)[3] ) ) && ( 0xB9 == ((U8*)s)[4] ) ) ? 5 : 0 )\
     : 0 )                                                                   \
 : ((e)-(s) > 3) ?                                                           \
     ( ( 0x61 == ((U8*)s)[0] ) ?                                             \
index 944f61b..508f687 100755 (executable)
@@ -758,7 +758,7 @@ sub calculate_mask(@) {
     my @final_results;
     foreach my $count (reverse sort { $a <=> $b } keys %hash) {
         my $need = 2 ** $count;     # Need 8 values for 3 differing bits, etc
-        foreach my $bits (keys $hash{$count}) {
+        foreach my $bits (sort keys $hash{$count}) {
 
             print STDERR __LINE__, ": For $count bit(s) difference ($bits), need $need; have ", scalar @{$hash{$count}{$bits}}, "\n" if DEBUG;
 
@@ -831,8 +831,8 @@ sub calculate_mask(@) {
 
                 # These values are now spoken for.  Remove them from future
                 # consideration
-                foreach my $remove_count (keys %hash) {
-                    foreach my $bits (keys %{$hash{$remove_count}}) {
+                foreach my $remove_count (sort keys %hash) {
+                    foreach my $bits (sort keys %{$hash{$remove_count}}) {
                         foreach my $to_remove (@subset) {
                             @{$hash{$remove_count}{$bits}} = grep { $_ != $to_remove } @{$hash{$remove_count}{$bits}};
                         }
@@ -846,7 +846,7 @@ sub calculate_mask(@) {
     # individually.
     my @individuals;
     foreach my $count (reverse sort { $a <=> $b } keys %hash) {
-        foreach my $bits (keys $hash{$count}) {
+        foreach my $bits (sort keys $hash{$count}) {
             foreach my $remaining (@{$hash{$count}{$bits}}) {
 
                 # If we already know about this value, just ignore it.
@@ -1221,7 +1221,7 @@ if ( !caller ) {
                                                                 # first, as
                                                                 # traditional
         if (%mods) {
-            die "Unknown modifiers: ", join ", ", map { "'$_'" } keys %mods;
+            die "Unknown modifiers: ", join ", ", map { "'$_'" } sort keys %mods;
         }
 
         foreach my $type_spec ( @types ) {