Skip to content

Commit a3f7a29

Browse files
committed
Remove remaining difference of types between C and Perl 6 code
We now determine at compile time the size of a Perl 5 IV in C code and use the corresponding int32/int64. This should finally fix all 32 bit issues. If your IV is 16 bits, please just go away. If your IV is 128 bits, remember that donating such a machine to me may improve your chances for support!
1 parent b77e376 commit a3f7a29

File tree

2 files changed

+29
-18
lines changed

2 files changed

+29
-18
lines changed

lib/Inline/Perl5.pm6

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,30 @@ class ObjectKeeper {
5555
}
5656
}
5757

58+
sub p5_size_of_iv()
59+
returns size_t { ... }
60+
BEGIN native(&p5_size_of_iv);
61+
62+
BEGIN my constant IV = p5_size_of_iv() == 8 ?? int64 !! int32;
63+
BEGIN my constant NV = num64;
64+
5865
sub p5_init_perl()
5966
returns Perl5Interpreter { ... }
6067
native(&p5_init_perl);
6168
sub p5_inline_perl6_xs_init(Perl5Interpreter)
6269
{ ... }
6370
native(&p5_inline_perl6_xs_init);
6471
sub p5_SvIOK(Perl5Interpreter, OpaquePointer)
65-
returns int32 { ... } # should be uint32 once that's supported
72+
returns uint32 { ... }
6673
native(&p5_SvIOK);
6774
sub p5_SvNOK(Perl5Interpreter, OpaquePointer)
68-
returns int32 { ... } # should be uint32 once that's supported
75+
returns uint32 { ... }
6976
native(&p5_SvNOK);
7077
sub p5_SvPOK(Perl5Interpreter, OpaquePointer)
71-
returns int32 { ... } # should be uint32 once that's supported
78+
returns uint32 { ... }
7279
native(&p5_SvPOK);
7380
sub p5_sv_utf8(Perl5Interpreter, OpaquePointer)
74-
returns int32 { ... } # should be uint32 once that's supported
81+
returns uint32 { ... }
7582
native(&p5_sv_utf8);
7683
sub p5_is_array(Perl5Interpreter, OpaquePointer)
7784
returns int32 { ... }
@@ -86,7 +93,7 @@ sub p5_is_undef(Perl5Interpreter, OpaquePointer)
8693
returns int32 { ... }
8794
native(&p5_is_undef);
8895
sub p5_sv_to_buf(Perl5Interpreter, OpaquePointer, CArray[CArray[int8]])
89-
returns long { ... }
96+
returns size_t { ... }
9097
native(&p5_sv_to_buf);
9198
sub p5_sv_to_char_star(Perl5Interpreter, OpaquePointer)
9299
returns Str { ... }
@@ -106,16 +113,16 @@ sub p5_sv_2mortal(Perl5Interpreter, OpaquePointer)
106113
sub p5_sv_refcnt_inc(Perl5Interpreter, OpaquePointer)
107114
{ ... }
108115
native(&p5_sv_refcnt_inc);
109-
sub p5_int_to_sv(Perl5Interpreter, long)
116+
sub p5_int_to_sv(Perl5Interpreter, IV)
110117
returns OpaquePointer { ... }
111118
native(&p5_int_to_sv);
112-
sub p5_float_to_sv(Perl5Interpreter, num64)
119+
sub p5_float_to_sv(Perl5Interpreter, NV)
113120
returns OpaquePointer { ... }
114121
native(&p5_float_to_sv);
115-
sub p5_str_to_sv(Perl5Interpreter, long, Blob)
122+
sub p5_str_to_sv(Perl5Interpreter, IV, Blob)
116123
returns OpaquePointer { ... }
117124
native(&p5_str_to_sv);
118-
sub p5_buf_to_sv(Perl5Interpreter, long, Blob)
125+
sub p5_buf_to_sv(Perl5Interpreter, IV, Blob)
119126
returns OpaquePointer { ... }
120127
native(&p5_buf_to_sv);
121128
sub p5_sv_to_ref(Perl5Interpreter, OpaquePointer)
@@ -172,17 +179,17 @@ sub p5_call_package_method(Perl5Interpreter, Str, Str, int32, CArray[OpaquePoint
172179
sub p5_call_code_ref(Perl5Interpreter, OpaquePointer, int32, CArray[OpaquePointer])
173180
returns OpaquePointer { ... }
174181
native(&p5_call_code_ref);
175-
sub p5_rebless_object(Perl5Interpreter, OpaquePointer, Str, long, &call_method (long, Str, int32, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (long))
182+
sub p5_rebless_object(Perl5Interpreter, OpaquePointer, Str, IV, &call_method (IV, Str, int32, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (IV))
176183
{ ... }
177184
native(&p5_rebless_object);
178185
sub p5_destruct_perl(Perl5Interpreter)
179186
{ ... }
180187
native(&p5_destruct_perl);
181188
sub p5_sv_iv(Perl5Interpreter, OpaquePointer)
182-
returns long { ... }
189+
returns IV { ... }
183190
native(&p5_sv_iv);
184191
sub p5_sv_nv(Perl5Interpreter, OpaquePointer)
185-
returns num64 { ... }
192+
returns NV { ... }
186193
native(&p5_sv_nv);
187194
sub p5_sv_rv(Perl5Interpreter, OpaquePointer)
188195
returns OpaquePointer { ... }
@@ -199,20 +206,20 @@ sub p5_eval_pv(Perl5Interpreter, Str, int32)
199206
sub p5_err_sv(Perl5Interpreter)
200207
returns OpaquePointer { ... }
201208
native(&p5_err_sv);
202-
sub p5_wrap_p6_object(Perl5Interpreter, long, OpaquePointer, &call_method (long, Str, int32, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (long))
209+
sub p5_wrap_p6_object(Perl5Interpreter, IV, OpaquePointer, &call_method (IV, Str, int32, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (IV))
203210
returns OpaquePointer { ... }
204211
native(&p5_wrap_p6_object);
205-
sub p5_wrap_p6_callable(Perl5Interpreter, long, OpaquePointer, &call (long, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (long))
212+
sub p5_wrap_p6_callable(Perl5Interpreter, IV, OpaquePointer, &call (IV, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (IV))
206213
returns OpaquePointer { ... }
207214
native(&p5_wrap_p6_callable);
208-
sub p5_wrap_p6_handle(Perl5Interpreter, long, OpaquePointer, &call_method (long, Str, int32, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (long))
215+
sub p5_wrap_p6_handle(Perl5Interpreter, IV, OpaquePointer, &call_method (IV, Str, int32, OpaquePointer, OpaquePointer --> OpaquePointer), &free_p6_object (IV))
209216
returns OpaquePointer { ... }
210217
native(&p5_wrap_p6_handle);
211218
sub p5_is_wrapped_p6_object(Perl5Interpreter, OpaquePointer)
212219
returns int32 { ... }
213220
native(&p5_is_wrapped_p6_object);
214221
sub p5_unwrap_p6_object(Perl5Interpreter, OpaquePointer)
215-
returns long { ... }
222+
returns IV { ... }
216223
native(&p5_unwrap_p6_object);
217224
sub p5_terminate()
218225
{ ... }

p5helper.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ EXTERN_C void xs_init(pTHX) {
2121
newXS("v6::set_subname", p5_set_subname, file);
2222
}
2323

24+
size_t p5_size_of_iv() {
25+
return sizeof(IV);
26+
}
27+
2428
void p5_inline_perl6_xs_init(PerlInterpreter *my_perl) {
2529
char *file = __FILE__;
2630
newXS("Perl6::Object::call_method", p5_call_p6_method, file);
@@ -104,8 +108,8 @@ IV p5_sv_iv(PerlInterpreter *my_perl, SV* sv) {
104108
return SvIV(sv);
105109
}
106110

107-
double p5_sv_nv(PerlInterpreter *my_perl, SV* sv) {
108-
return (double)SvNV(sv);
111+
NV p5_sv_nv(PerlInterpreter *my_perl, SV* sv) {
112+
return SvNV(sv);
109113
}
110114

111115
SV *p5_sv_rv(PerlInterpreter *my_perl, SV* sv) {

0 commit comments

Comments
 (0)