Eliminate test from generated cp macros
authorYves Orton <demerphq@gmail.com>
Sat, 17 Nov 2012 11:58:12 +0000 (12:58 +0100)
committerYves Orton <demerphq@gmail.com>
Sat, 17 Nov 2012 11:58:12 +0000 (12:58 +0100)
Sayeth Karl:
In the _cp macros, the final test can be simplified:

/*** GENERATED CODE ***/
#define is_VERTWS_cp(cp)     \
( ( 0x0A <= cp && cp <= 0x0D ) || ( 0x0D < cp &&     \
( 0x85 == cp || ( 0x85 < cp &&     \
( 0x2028 == cp || ( 0x2028 < cp &&     \
0x2029 == cp ) ) ) ) ) )

That 0x2028 < cp can be omitted and it will still mean the same thing.

And So Be It.

regcharclass.h
regen/regcharclass.pl

index 17dee91..c977a56 100644 (file)
 ( 0x180E == cp || ( 0x180E < cp &&                                          \
 ( ( 0x2000 <= cp && cp <= 0x200A ) || ( 0x200A < cp &&                      \
 ( 0x202F == cp || ( 0x202F < cp &&                                          \
-( 0x205F == cp || ( 0x205F < cp &&                                          \
-0x3000 == cp ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
+( 0x205F == cp || 0x3000 == cp ) ) ) ) ) ) ) ) ) ) ) ) ) ) )
 
 /*
        VERTWS: Vertical Whitespace: \v \V
 #define is_VERTWS_cp(cp)                                                    \
 ( ( 0x0A <= cp && cp <= 0x0D ) || ( 0x0D < cp &&                            \
 ( 0x85 == cp || ( 0x85 < cp &&                                              \
-( 0x2028 == cp || ( 0x2028 < cp &&                                          \
-0x2029 == cp ) ) ) ) ) )
+( 0x2028 == cp || 0x2029 == cp ) ) ) ) )
 
 /*
        REPLACEMENT: Unicode REPLACEMENT CHARACTER
index b7dddd2..944f61b 100755 (executable)
@@ -1076,8 +1076,13 @@ sub _combine {
         $gtv= sprintf "$self->{val_fmt}", $item;
     }
     if ( @cond ) {
-        return "( $cstr || ( $gtv < $test &&\n"
-          . $self->_combine( $test, @cond ) . " ) )";
+        my $combine= $self->_combine( $test, @cond );
+        if (@cond >1) {
+            return "( $cstr || ( $gtv < $test &&\n"
+                   . $combine . " ) )";
+        } else {
+            return "( $cstr || $combine )";
+        }
     } else {
         return $cstr;
     }