Switch Perl bindings from C32/C64 to CI32/etc.

Change IO methods invoked to use explicitly signed/unsigned versions
rather than casting.


Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/cbe964df
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/cbe964df
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/cbe964df

Branch: refs/heads/master
Commit: cbe964dfa85720357b8e6f06347028671c641e06
Parents: c1af093
Author: Marvin Humphrey <[email protected]>
Authored: Tue Apr 19 18:59:15 2016 -0700
Committer: Marvin Humphrey <[email protected]>
Committed: Tue Apr 19 19:20:16 2016 -0700

----------------------------------------------------------------------
 perl/buildlib/Lucy/Build/Binding/Store.pm |  7 +++++--
 perl/lib/LucyX/Search/Filter.pm           |  4 ++--
 perl/t/023-stepper.t                      |  4 ++--
 perl/t/102-strings_io.t                   |  2 +-
 perl/t/binding/101-simple_io.t            | 20 ++++++++++----------
 perl/xs/Lucy/Document/Doc.c               |  8 ++++----
 perl/xs/Lucy/Index/DocReader.c            | 14 +++++++-------
 7 files changed, 31 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/buildlib/Lucy/Build/Binding/Store.pm
----------------------------------------------------------------------
diff --git a/perl/buildlib/Lucy/Build/Binding/Store.pm 
b/perl/buildlib/Lucy/Build/Binding/Store.pm
index a266ace..f5196c8 100644
--- a/perl/buildlib/Lucy/Build/Binding/Store.pm
+++ b/perl/buildlib/Lucy/Build/Binding/Store.pm
@@ -175,7 +175,7 @@ read_string(self)
 CODE:
 {
     char *ptr;
-    size_t len = LUCY_InStream_Read_C32(self);
+    size_t len = LUCY_InStream_Read_CU32(self);
     RETVAL = newSV(len + 1);
     SvCUR_set(RETVAL, len);
     SvPOK_on(RETVAL);
@@ -364,7 +364,10 @@ PPCODE:
 {
     STRLEN len = 0;
     char *ptr = SvPVutf8(aSV, len);
-    LUCY_OutStream_Write_C32(self, len);
+    if (len > INT32_MAX) {
+        CFISH_THROW(CFISH_ERR, "String too long: %u64", (uint64_t)len);
+    }
+    LUCY_OutStream_Write_CU32(self, len);
     LUCY_OutStream_Write_Bytes(self, ptr, len);
 }
 END_XS_CODE

http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/lib/LucyX/Search/Filter.pm
----------------------------------------------------------------------
diff --git a/perl/lib/LucyX/Search/Filter.pm b/perl/lib/LucyX/Search/Filter.pm
index d168e9e..d6db91f 100644
--- a/perl/lib/LucyX/Search/Filter.pm
+++ b/perl/lib/LucyX/Search/Filter.pm
@@ -63,14 +63,14 @@ sub serialize {
     my ( $self, $outstream ) = @_;
     $self->SUPER::serialize($outstream);
     my $frozen = nfreeze( $query{$$self} );
-    $outstream->write_c32( bytes::length($frozen) );
+    $outstream->write_cu32( bytes::length($frozen) );
     $outstream->print($frozen);
 }
 
 sub deserialize {
     my ( $self, $instream ) = @_;
     $self->SUPER::deserialize($instream);
-    my $len = $instream->read_c32;
+    my $len = $instream->read_cu32;
     my $frozen;
     $instream->read( $frozen, $len );
     $query{$$self} = thaw($frozen);

http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/t/023-stepper.t
----------------------------------------------------------------------
diff --git a/perl/t/023-stepper.t b/perl/t/023-stepper.t
index 7ea2fa8..2786ad7 100644
--- a/perl/t/023-stepper.t
+++ b/perl/t/023-stepper.t
@@ -38,7 +38,7 @@ sub get_number { $number{ ${ +shift } } }
 
 sub read_record {
     my ( $self, $instream ) = @_;
-    $number{$$self} += $instream->read_c32;
+    $number{$$self} += $instream->read_ci32;
 }
 
 package main;
@@ -47,7 +47,7 @@ use Lucy::Test;
 
 my $folder = Lucy::Store::RAMFolder->new;
 my $outstream = $folder->open_out("foo") or die Clownfish->error;
-$outstream->write_c32(10) for 1 .. 5;
+$outstream->write_ci32(10) for 1 .. 5;
 $outstream->close;
 my $instream = $folder->open_in("foo") or die Clownfish->error;
 my $stepper = MyStepper->new;

http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/t/102-strings_io.t
----------------------------------------------------------------------
diff --git a/perl/t/102-strings_io.t b/perl/t/102-strings_io.t
index 657bf46..02d7ca8 100644
--- a/perl/t/102-strings_io.t
+++ b/perl/t/102-strings_io.t
@@ -24,7 +24,7 @@ my ( @items, $packed, $template, $buf, $file, $out, $in, 
$correct );
 $file = Lucy::Store::RAMFile->new;
 $out = Lucy::Store::OutStream->open( file => $file )
     or die Clownfish->error;
-$out->write_c64(10000);
+$out->write_cu64(10000);
 $out->close;
 $in = Lucy::Store::InStream->open( file => $file )
     or die Clownfish->error;

http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/t/binding/101-simple_io.t
----------------------------------------------------------------------
diff --git a/perl/t/binding/101-simple_io.t b/perl/t/binding/101-simple_io.t
index fd5a9be..85db57a 100644
--- a/perl/t/binding/101-simple_io.t
+++ b/perl/t/binding/101-simple_io.t
@@ -47,7 +47,7 @@ sub check_round_trip_bytes {
     my $file = Lucy::Store::RAMFile->new;
     my $outstream = Lucy::Store::OutStream->open( file => $file );
     for (@$expected) {
-        $outstream->write_c32( bytes::length($_) );
+        $outstream->write_ci32( bytes::length($_) );
         $outstream->print($_);
     }
     $outstream->close;
@@ -56,7 +56,7 @@ sub check_round_trip_bytes {
     my @got;
     for (@$expected) {
         my $buf;
-        my $len = $instream->read_c32;
+        my $len = $instream->read_ci32;
         $instream->read( $buf, $len );
         push @got, $buf;
     }
@@ -95,24 +95,24 @@ $_ += int( rand( 2**16 ) ) for @nums;
 check_round_trip( 'u64', \@nums );
 
 @nums = ( 0 .. 127 );
-check_round_trip( 'c32', \@nums );
+check_round_trip( 'ci32', \@nums );
 
 @nums     = ( 128 .. 500 );
 $packed   = pack( 'w*', @nums );
-$ram_file = check_round_trip( 'c32', \@nums );
-is( $ram_file->get_contents, $packed, "C32 is equivalent to Perl's pack w" );
+$ram_file = check_round_trip( 'cu32', \@nums );
+is( $ram_file->get_contents, $packed, "CU32 is equivalent to Perl's pack w" );
 
 @nums = ( 0 .. 127 );
-check_round_trip( 'c64', \@nums );
+check_round_trip( 'ci64', \@nums );
 
 @nums     = ( 128 .. 500 );
 $packed   = pack( 'w*', @nums );
-$ram_file = check_round_trip( 'c64', \@nums );
-is( $ram_file->get_contents, $packed, "C64 is equivalent to Perl's pack w" );
+$ram_file = check_round_trip( 'cu64', \@nums );
+is( $ram_file->get_contents, $packed, "CU64 is equivalent to Perl's pack w" );
 
 @nums = map { $_ * 2**31 } 0 .. 2000;
 $_ += int( rand( 2**16 ) ) for @nums;
-check_round_trip( 'c64', \@nums );
+check_round_trip( 'cu64', \@nums );
 
 # rand (always?) has 64-bit precision, but we need 32-bit - so truncate via
 # pack/unpack.
@@ -152,6 +152,6 @@ my $unibytes = $latin;
 utf8ify($unibytes);
 utf8_flag_off($unibytes);
 my $slurped = $ram_file->get_contents;
-substr( $slurped, 0, 1, "" );    # ditch c32 at head of string;
+substr( $slurped, 0, 1, "" );    # ditch cu32 at head of string;
 is( $slurped, $unibytes, "write_string upgrades to utf8" );
 

http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/xs/Lucy/Document/Doc.c
----------------------------------------------------------------------
diff --git a/perl/xs/Lucy/Document/Doc.c b/perl/xs/Lucy/Document/Doc.c
index 902df23..a923e25 100644
--- a/perl/xs/Lucy/Document/Doc.c
+++ b/perl/xs/Lucy/Document/Doc.c
@@ -92,11 +92,11 @@ void
 LUCY_Doc_Serialize_IMP(lucy_Doc *self, lucy_OutStream *outstream) {
     dTHX;
     lucy_DocIVARS *const ivars = lucy_Doc_IVARS(self);
-    LUCY_OutStream_Write_C32(outstream, ivars->doc_id);
+    LUCY_OutStream_Write_CU32(outstream, ivars->doc_id);
     SV *frozen = S_nfreeze_fields(aTHX_ self);
     STRLEN len;
     char *buf = SvPV(frozen, len);
-    LUCY_OutStream_Write_C64(outstream, len);
+    LUCY_OutStream_Write_CU64(outstream, len);
     LUCY_OutStream_Write_Bytes(outstream, buf, len);
     SvREFCNT_dec(frozen);
 }
@@ -104,7 +104,7 @@ LUCY_Doc_Serialize_IMP(lucy_Doc *self, lucy_OutStream 
*outstream) {
 static HV*
 S_thaw_fields(pTHX_ lucy_InStream *instream) {
     // Read frozen data into an SV buffer.
-    size_t len = (size_t)LUCY_InStream_Read_C64(instream);
+    size_t len = (size_t)LUCY_InStream_Read_CU64(instream);
     SV *buf_sv = newSV(len + 1);
     SvPOK_on(buf_sv);
     SvCUR_set(buf_sv, len);
@@ -137,7 +137,7 @@ S_thaw_fields(pTHX_ lucy_InStream *instream) {
 lucy_Doc*
 LUCY_Doc_Deserialize_IMP(lucy_Doc *self, lucy_InStream *instream) {
     dTHX;
-    int32_t doc_id = (int32_t)LUCY_InStream_Read_C32(instream);
+    int32_t doc_id = (int32_t)LUCY_InStream_Read_CU32(instream);
     HV *fields = S_thaw_fields(aTHX_ instream);
     lucy_Doc_init(self, fields, doc_id);
     SvREFCNT_dec(fields);

http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/xs/Lucy/Index/DocReader.c
----------------------------------------------------------------------
diff --git a/perl/xs/Lucy/Index/DocReader.c b/perl/xs/Lucy/Index/DocReader.c
index 8eda8bc..7daf909 100644
--- a/perl/xs/Lucy/Index/DocReader.c
+++ b/perl/xs/Lucy/Index/DocReader.c
@@ -43,7 +43,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, 
int32_t doc_id) {
     LUCY_InStream_Seek(ix_in, (int64_t)doc_id * 8);
     start = LUCY_InStream_Read_U64(ix_in);
     LUCY_InStream_Seek(dat_in, start);
-    num_fields = LUCY_InStream_Read_C32(dat_in);
+    num_fields = LUCY_InStream_Read_CU32(dat_in);
 
     // Decode stored data and build up the doc field by field.
     while (num_fields--) {
@@ -53,7 +53,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, 
int32_t doc_id) {
         lucy_FieldType *type;
 
         // Read field name.
-        field_name_len = LUCY_InStream_Read_C32(dat_in);
+        field_name_len = LUCY_InStream_Read_CU32(dat_in);
         field_name_ptr = SvGROW(field_name_sv, field_name_len + 1);
         LUCY_InStream_Read_Bytes(dat_in, field_name_ptr, field_name_len);
         SvPOK_on(field_name_sv);
@@ -69,7 +69,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, 
int32_t doc_id) {
         // Read the field value.
         switch (LUCY_FType_Primitive_ID(type) & lucy_FType_PRIMITIVE_ID_MASK) {
             case lucy_FType_TEXT: {
-                    STRLEN value_len = LUCY_InStream_Read_C32(dat_in);
+                    STRLEN value_len = LUCY_InStream_Read_CU32(dat_in);
                     value_sv = newSV((value_len ? value_len : 1));
                     LUCY_InStream_Read_Bytes(dat_in, SvPVX(value_sv), 
value_len);
                     SvCUR_set(value_sv, value_len);
@@ -79,7 +79,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, 
int32_t doc_id) {
                     break;
                 }
             case lucy_FType_BLOB: {
-                    STRLEN value_len = LUCY_InStream_Read_C32(dat_in);
+                    STRLEN value_len = LUCY_InStream_Read_CU32(dat_in);
                     value_sv = newSV((value_len ? value_len : 1));
                     LUCY_InStream_Read_Bytes(dat_in, SvPVX(value_sv), 
value_len);
                     SvCUR_set(value_sv, value_len);
@@ -94,15 +94,15 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader 
*self, int32_t doc_id) {
                 value_sv = newSVnv(LUCY_InStream_Read_F64(dat_in));
                 break;
             case lucy_FType_INT32:
-                value_sv = newSViv((int32_t)LUCY_InStream_Read_C32(dat_in));
+                value_sv = newSViv(LUCY_InStream_Read_CI32(dat_in));
                 break;
             case lucy_FType_INT64:
                 if (sizeof(IV) == 8) {
-                    int64_t val = (int64_t)LUCY_InStream_Read_C64(dat_in);
+                    int64_t val = LUCY_InStream_Read_CI64(dat_in);
                     value_sv = newSViv((IV)val);
                 }
                 else { // (lossy)
-                    int64_t val = (int64_t)LUCY_InStream_Read_C64(dat_in);
+                    int64_t val = LUCY_InStream_Read_CI64(dat_in);
                     value_sv = newSVnv((double)val);
                 }
                 break;

Reply via email to