Skip to content

Commit

Permalink
Use correct int data types to avoid 32/64 bit issues
Browse files Browse the repository at this point in the history
Hopefully fixes the p5_av_top_index openBSD issue reported by carlin++
  • Loading branch information
niner committed Sep 30, 2014
1 parent 37ce3ad commit 885327a
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 48 deletions.
42 changes: 21 additions & 21 deletions lib/Inline/Perl5.pm6
Original file line number Diff line number Diff line change
Expand Up @@ -59,25 +59,25 @@ sub p5_init_perl()
returns Perl5Interpreter { ... }
native(&p5_init_perl);
sub p5_SvIOK(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int32 { ... } # should be uint32 once that's supported
native(&p5_SvIOK);
sub p5_SvNOK(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int32 { ... } # should be uint32 once that's supported
native(&p5_SvNOK);
sub p5_SvPOK(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int32 { ... } # should be uint32 once that's supported
native(&p5_SvPOK);
sub p5_sv_utf8(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int32 { ... } # should be uint32 once that's supported
native(&p5_sv_utf8);
sub p5_is_array(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int { ... }
native(&p5_is_array);
sub p5_is_hash(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int { ... }
native(&p5_is_hash);
sub p5_is_undef(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int { ... }
native(&p5_is_undef);
sub p5_sv_to_buf(Perl5Interpreter, OpaquePointer, CArray[CArray[int8]])
returns Int { ... }
Expand Down Expand Up @@ -115,14 +115,14 @@ sub p5_buf_to_sv(Perl5Interpreter, Int, CArray[uint8])
sub p5_av_top_index(Perl5Interpreter, OpaquePointer)
returns Int { ... }
native(&p5_av_top_index);
sub p5_av_fetch(Perl5Interpreter, OpaquePointer, Int)
sub p5_av_fetch(Perl5Interpreter, OpaquePointer, int32)
returns OpaquePointer { ... }
native(&p5_av_fetch);
sub p5_av_push(Perl5Interpreter, OpaquePointer, OpaquePointer)
{ ... }
native(&p5_av_push);
sub p5_hv_iterinit(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int32 { ... }
native(&p5_hv_iterinit);
sub p5_hv_iternext(Perl5Interpreter, OpaquePointer)
returns OpaquePointer { ... }
Expand Down Expand Up @@ -151,16 +151,16 @@ sub p5_sv_reftype(Perl5Interpreter, OpaquePointer)
sub p5_hv_store(Perl5Interpreter, OpaquePointer, Str, OpaquePointer)
{ ... }
native(&p5_hv_store);
sub p5_call_function(Perl5Interpreter, Str, Int, CArray[OpaquePointer])
sub p5_call_function(Perl5Interpreter, Str, int, CArray[OpaquePointer])
returns OpaquePointer { ... }
native(&p5_call_function);
sub p5_call_method(Perl5Interpreter, Str, OpaquePointer, Str, Int, CArray[OpaquePointer])
sub p5_call_method(Perl5Interpreter, Str, OpaquePointer, Str, int, CArray[OpaquePointer])
returns OpaquePointer { ... }
native(&p5_call_method);
sub p5_call_package_method(Perl5Interpreter, Str, Str, Int, CArray[OpaquePointer])
sub p5_call_package_method(Perl5Interpreter, Str, Str, int, CArray[OpaquePointer])
returns OpaquePointer { ... }
native(&p5_call_package_method);
sub p5_call_code_ref(Perl5Interpreter, OpaquePointer, Int, CArray[OpaquePointer])
sub p5_call_code_ref(Perl5Interpreter, OpaquePointer, int, CArray[OpaquePointer])
returns OpaquePointer { ... }
native(&p5_call_code_ref);
sub p5_rebless_object(Perl5Interpreter, OpaquePointer)
Expand All @@ -176,12 +176,12 @@ sub p5_sv_nv(Perl5Interpreter, OpaquePointer)
returns num64 { ... }
native(&p5_sv_nv);
sub p5_is_object(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int { ... }
native(&p5_is_object);
sub p5_is_sub_ref(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int { ... }
native(&p5_is_sub_ref);
sub p5_eval_pv(Perl5Interpreter, Str, Int)
sub p5_eval_pv(Perl5Interpreter, Str, int32)
returns OpaquePointer { ... }
native(&p5_eval_pv);
sub p5_err_sv(Perl5Interpreter)
Expand All @@ -194,7 +194,7 @@ sub p5_wrap_p6_callable(Perl5Interpreter, Int, OpaquePointer, &call(Int, OpaqueP
returns OpaquePointer { ... }
native(&p5_wrap_p6_callable);
sub p5_is_wrapped_p6_object(Perl5Interpreter, OpaquePointer)
returns Int { ... }
returns int { ... }
native(&p5_is_wrapped_p6_object);
sub p5_unwrap_p6_object(Perl5Interpreter, OpaquePointer)
returns Int { ... }
Expand Down Expand Up @@ -302,7 +302,7 @@ method p5_array_to_p6_array(OpaquePointer $sv) {
method !p5_hash_to_p6_hash(OpaquePointer $sv) {
my OpaquePointer $hv = p5_sv_to_hv($!p5, $sv);

my Int $len = p5_hv_iterinit($!p5, $hv);
my int32 $len = p5_hv_iterinit($!p5, $hv);

my $hash = {};

Expand Down Expand Up @@ -381,7 +381,7 @@ method run($perl) {
method !setup_arguments(@args) {
my $len = @args.elems;
my @svs := CArray[OpaquePointer].new();
loop (my int $i = 0; $i < $len; $i = $i + 1) {
loop (my Int $i = 0; $i < $len; $i = $i + 1) {
@svs[$i] = self.p6_to_p5(@args[$i]);
}
return $len, @svs;
Expand All @@ -402,7 +402,7 @@ method !unpack_return_values($av) {
}

my @retvals;
loop (my int $i = 0; $i <= $av_len; $i = $i + 1) {
loop (my int32 $i = 0; $i <= $av_len; $i = $i + 1) {
@retvals.push(self.p5_to_p6(p5_av_fetch($!p5, $av, $i)));
}
p5_sv_refcnt_dec($!p5, $av);
Expand All @@ -429,7 +429,7 @@ multi method invoke(Str $package, OpaquePointer $obj, Str $function, *@args) {
my $len = @args.elems;
my @svs := CArray[OpaquePointer].new();
@svs[0] = self.p6_to_p5(@args[0], $obj);
loop (my $i = 1; $i < $len; $i++) {
loop (my Int $i = 1; $i < $len; $i++) {
@svs[$i] = self.p6_to_p5(@args[$i]);
}
my $av = p5_call_method($!p5, $package, $obj, $function, $len, @svs);
Expand Down
54 changes: 27 additions & 27 deletions p5helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,38 +46,38 @@ void p5_terminate() {
PERL_SYS_TERM();
}

int p5_SvIOK(PerlInterpreter *my_perl, SV* sv) {
U32 p5_SvIOK(PerlInterpreter *my_perl, SV* sv) {
return SvIOK(sv);
}

int p5_SvNOK(PerlInterpreter *my_perl, SV* sv) {
U32 p5_SvNOK(PerlInterpreter *my_perl, SV* sv) {
return SvNOK(sv);
}

int p5_SvPOK(PerlInterpreter *my_perl, SV* sv) {
U32 p5_SvPOK(PerlInterpreter *my_perl, SV* sv) {
return SvPOK(sv);
}

int p5_sv_utf8(PerlInterpreter *my_perl, SV* sv) {
U32 p5_sv_utf8(PerlInterpreter *my_perl, SV* sv) {
if (SvUTF8(sv)) { // UTF-8 flag set -> can use string as-is
return 1;
}
else { // pure 7 bit ASCII is valid UTF-8 as well
STRLEN len;
char * const pv = SvPV(sv, len);
int i;
STRLEN i;
for (i = 0; i < len; i++)
if (pv[i] < 0) // signed char!
return 0;
return 1;
}
}

int p5_sv_iv(PerlInterpreter *my_perl, SV* sv) {
IV p5_sv_iv(PerlInterpreter *my_perl, SV* sv) {
return SvIV(sv);
}

double p5_sv_nv(PerlInterpreter *my_perl, SV* sv) {
NV p5_sv_nv(PerlInterpreter *my_perl, SV* sv) {
return SvNV(sv);
}

Expand Down Expand Up @@ -115,7 +115,7 @@ char *p5_sv_to_char_star(PerlInterpreter *my_perl, SV *sv) {
return pv;
}

int p5_sv_to_buf(PerlInterpreter *my_perl, SV *sv, char **buf) {
STRLEN p5_sv_to_buf(PerlInterpreter *my_perl, SV *sv, char **buf) {
STRLEN len;
*buf = SvPV(sv, len);
return len;
Expand All @@ -129,7 +129,7 @@ void p5_sv_refcnt_inc(PerlInterpreter *my_perl, SV *sv) {
SvREFCNT_inc(sv);
}

SV *p5_int_to_sv(PerlInterpreter *my_perl, int value) {
SV *p5_int_to_sv(PerlInterpreter *my_perl, IV value) {
return newSViv(value);
}

Expand All @@ -143,16 +143,16 @@ SV *p5_str_to_sv(PerlInterpreter *my_perl, char* value) {
return sv;
}

SV *p5_buf_to_sv(PerlInterpreter *my_perl, long len, char* value) {
SV *p5_buf_to_sv(PerlInterpreter *my_perl, STRLEN len, char* value) {
SV * const sv = newSVpv(value, len);
return sv;
}

int p5_av_top_index(PerlInterpreter *my_perl, AV *av) {
I32 p5_av_top_index(PerlInterpreter *my_perl, AV *av) {
return av_top_index(av);
}

SV *p5_av_fetch(PerlInterpreter *my_perl, AV *av, int key) {
SV *p5_av_fetch(PerlInterpreter *my_perl, AV *av, I32 key) {
SV ** const item = av_fetch(av, key, 0);
if (item)
return *item;
Expand All @@ -163,7 +163,7 @@ void p5_av_push(PerlInterpreter *my_perl, AV *av, SV *sv) {
av_push(av, sv);
}

int p5_hv_iterinit(PerlInterpreter *my_perl, HV *hv) {
I32 p5_hv_iterinit(PerlInterpreter *my_perl, HV *hv) {
return hv_iterinit(hv);
}

Expand Down Expand Up @@ -215,7 +215,7 @@ SV *p5_err_sv(PerlInterpreter *my_perl) {
AV *p5_call_package_method(PerlInterpreter *my_perl, char *package, char *name, int len, SV *args[]) {
dSP;
int i;
int count;
I32 count;
AV * const retval = newAV();
int flags = G_ARRAY | G_EVAL;

Expand Down Expand Up @@ -255,7 +255,6 @@ AV *p5_call_package_method(PerlInterpreter *my_perl, char *package, char *name,
AV *p5_call_method(PerlInterpreter *my_perl, char *package, SV *obj, char *name, int len, SV *args[]) {
dSP;
int i;
int count;
AV * const retval = newAV();
int flags = G_ARRAY | G_EVAL;

Expand All @@ -267,6 +266,7 @@ AV *p5_call_method(PerlInterpreter *my_perl, char *package, SV *obj, char *name,
HV * const pkg = package != NULL ? gv_stashpv(package, 0) : SvSTASH((SV*)SvRV(obj));
GV * const gv = Perl_gv_fetchmethod_autoload(aTHX_ pkg, name, FALSE);
if (gv && isGV(gv)) {
I32 count;
PUSHMARK(SP);

for (i = 0; i < len; i++) {
Expand Down Expand Up @@ -303,7 +303,7 @@ AV *p5_call_method(PerlInterpreter *my_perl, char *package, SV *obj, char *name,
AV *p5_call_function(PerlInterpreter *my_perl, char *name, int len, SV *args[]) {
dSP;
int i;
int count;
I32 count;
AV * const retval = newAV();
int flags = G_ARRAY | G_EVAL;

Expand Down Expand Up @@ -342,7 +342,7 @@ AV *p5_call_function(PerlInterpreter *my_perl, char *name, int len, SV *args[])
AV *p5_call_code_ref(PerlInterpreter *my_perl, SV *code_ref, int len, SV *args[]) {
dSP;
int i;
int count;
I32 count;
AV * const retval = newAV();
int flags = G_ARRAY | G_EVAL;

Expand Down Expand Up @@ -391,10 +391,10 @@ typedef struct {
I32 key; /* to make sure it came from Inline */
IV index;
union {
SV *(*call_p6_method)(int, char *, SV *, SV **);
SV *(*call_p6_callable)(int, SV *, SV **);
SV *(*call_p6_method)(IV, char *, SV *, SV **);
SV *(*call_p6_callable)(IV, SV *, SV **);
};
void (*free_p6_object)(int);
void (*free_p6_object)(IV);
} _perl6_magic;

#define PERL6_MAGIC_KEY 0x0DD515FE
Expand All @@ -419,7 +419,7 @@ MGVTBL p5_inline_mg_vtbl = {
0x0
};

SV *p5_wrap_p6_object(PerlInterpreter *my_perl, IV i, SV *p5obj, SV *(*call_p6_method)(int, char * , SV *, SV **), void (*free_p6_object)(int)) {
SV *p5_wrap_p6_object(PerlInterpreter *my_perl, IV i, SV *p5obj, SV *(*call_p6_method)(IV, char * , SV *, SV **), void (*free_p6_object)(IV)) {
SV * inst;
SV * inst_ptr;
if (p5obj == NULL) {
Expand All @@ -443,7 +443,7 @@ SV *p5_wrap_p6_object(PerlInterpreter *my_perl, IV i, SV *p5obj, SV *(*call_p6_m
return inst_ptr;
}

SV *p5_wrap_p6_callable(PerlInterpreter *my_perl, IV i, SV *p5obj, SV *(*call)(int, SV *, SV **), void (*free_p6_object)(int)) {
SV *p5_wrap_p6_callable(PerlInterpreter *my_perl, IV i, SV *p5obj, SV *(*call)(IV, SV *, SV **), void (*free_p6_object)(IV)) {
SV * inst;
SV * inst_ptr;
if (p5obj == NULL) {
Expand Down Expand Up @@ -476,7 +476,7 @@ int p5_is_wrapped_p6_object(PerlInterpreter *my_perl, SV *obj) {
return (mg && ((_perl6_magic*)(mg->mg_ptr))->key == PERL6_MAGIC_KEY);
}

int p5_unwrap_p6_object(PerlInterpreter *my_perl, SV *obj) {
IV p5_unwrap_p6_object(PerlInterpreter *my_perl, SV *obj) {
SV * const obj_deref = SvRV(obj);
MAGIC * const mg = mg_find(obj_deref, '~');
return ((_perl6_magic*)(mg->mg_ptr))->index;
Expand Down Expand Up @@ -519,8 +519,8 @@ XS(p5_call_p6_method) {
}
if (GIMME_V == G_ARRAY) {
AV* const av = (AV*)SvRV(retval);
int const len = av_len(av) + 1;
int i;
I32 const len = av_len(av) + 1;
I32 i;
for (i = 0; i < len; i++) {
XPUSHs(sv_2mortal(av_shift(av)));
}
Expand Down Expand Up @@ -567,8 +567,8 @@ XS(p5_call_p6_callable) {
}
if (GIMME_V == G_ARRAY) {
AV* const av = (AV*)SvRV(retval);
int const len = av_len(av) + 1;
int i;
I32 const len = av_len(av) + 1;
I32 i;
for (i = 0; i < len; i++) {
XPUSHs(sv_2mortal(av_shift(av)));
}
Expand Down

0 comments on commit 885327a

Please sign in to comment.