Skip to content

Commit fc16d0c

Browse files
authored
Fix unsigned int handling (#126)
1 parent 4d9528a commit fc16d0c

File tree

3 files changed

+80
-4
lines changed

3 files changed

+80
-4
lines changed

runtime/src/lib.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,11 +554,21 @@ pub extern "C" fn componentize_py_to_canon_i32(_py: &Python, value: Borrowed<PyA
554554
value.extract().unwrap()
555555
}
556556

557+
#[export_name = "componentize-py#ToCanonU32"]
558+
pub extern "C" fn componentize_py_to_canon_u32(_py: &Python, value: Borrowed<PyAny>) -> u32 {
559+
value.extract().unwrap()
560+
}
561+
557562
#[export_name = "componentize-py#ToCanonI64"]
558563
pub extern "C" fn componentize_py_to_canon_i64(_py: &Python, value: Borrowed<PyAny>) -> i64 {
559564
value.extract().unwrap()
560565
}
561566

567+
#[export_name = "componentize-py#ToCanonU64"]
568+
pub extern "C" fn componentize_py_to_canon_u64(_py: &Python, value: Borrowed<PyAny>) -> u64 {
569+
value.extract().unwrap()
570+
}
571+
562572
#[export_name = "componentize-py#ToCanonF32"]
563573
pub extern "C" fn componentize_py_to_canon_f32(_py: &Python, value: Borrowed<PyAny>) -> f32 {
564574
value.extract().unwrap()
@@ -730,11 +740,21 @@ pub extern "C" fn componentize_py_from_canon_i32(py: &Python, value: i32) -> Py<
730740
value.to_object(*py)
731741
}
732742

743+
#[export_name = "componentize-py#FromCanonU32"]
744+
pub extern "C" fn componentize_py_from_canon_u32(py: &Python, value: u32) -> Py<PyAny> {
745+
value.to_object(*py)
746+
}
747+
733748
#[export_name = "componentize-py#FromCanonI64"]
734749
pub extern "C" fn componentize_py_from_canon_i64(py: &Python, value: i64) -> Py<PyAny> {
735750
value.to_object(*py)
736751
}
737752

753+
#[export_name = "componentize-py#FromCanonU64"]
754+
pub extern "C" fn componentize_py_from_canon_u64(py: &Python, value: u64) -> Py<PyAny> {
755+
value.to_object(*py)
756+
}
757+
738758
#[export_name = "componentize-py#FromCanonF32"]
739759
pub extern "C" fn componentize_py_from_canon_f32(py: &Python, value: f32) -> Py<PyAny> {
740760
value.to_object(*py)

src/bindgen.rs

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,21 @@ pub static IMPORT_SIGNATURES: &[(&str, &[ValType], &[ValType])] = &[
4747
&[ValType::I32; 2],
4848
&[ValType::I32],
4949
),
50+
(
51+
"componentize-py#ToCanonU32",
52+
&[ValType::I32; 2],
53+
&[ValType::I32],
54+
),
5055
(
5156
"componentize-py#ToCanonI64",
5257
&[ValType::I32; 2],
5358
&[ValType::I64],
5459
),
60+
(
61+
"componentize-py#ToCanonU64",
62+
&[ValType::I32; 2],
63+
&[ValType::I64],
64+
),
5565
(
5666
"componentize-py#ToCanonF32",
5767
&[ValType::I32; 2],
@@ -93,11 +103,21 @@ pub static IMPORT_SIGNATURES: &[(&str, &[ValType], &[ValType])] = &[
93103
&[ValType::I32; 2],
94104
&[ValType::I32],
95105
),
106+
(
107+
"componentize-py#FromCanonU32",
108+
&[ValType::I32; 2],
109+
&[ValType::I32],
110+
),
96111
(
97112
"componentize-py#FromCanonI64",
98113
&[ValType::I32, ValType::I64],
99114
&[ValType::I32],
100115
),
116+
(
117+
"componentize-py#FromCanonU64",
118+
&[ValType::I32, ValType::I64],
119+
&[ValType::I32],
120+
),
101121
(
102122
"componentize-py#FromCanonF32",
103123
&[ValType::I32, ValType::F32],
@@ -592,20 +612,34 @@ impl<'a> FunctionBindgen<'a> {
592612
*IMPORTS.get("componentize-py#ToCanonBool").unwrap(),
593613
));
594614
}
595-
Type::U8 | Type::U16 | Type::U32 | Type::S8 | Type::S16 | Type::S32 => {
615+
Type::S8 | Type::S16 | Type::S32 => {
596616
self.push(Ins::LocalGet(context));
597617
self.push(Ins::LocalGet(value));
598618
self.push(Ins::Call(
599619
*IMPORTS.get("componentize-py#ToCanonI32").unwrap(),
600620
));
601621
}
602-
Type::U64 | Type::S64 => {
622+
Type::U8 | Type::U16 | Type::U32 => {
623+
self.push(Ins::LocalGet(context));
624+
self.push(Ins::LocalGet(value));
625+
self.push(Ins::Call(
626+
*IMPORTS.get("componentize-py#ToCanonU32").unwrap(),
627+
));
628+
}
629+
Type::S64 => {
603630
self.push(Ins::LocalGet(context));
604631
self.push(Ins::LocalGet(value));
605632
self.push(Ins::Call(
606633
*IMPORTS.get("componentize-py#ToCanonI64").unwrap(),
607634
));
608635
}
636+
Type::U64 => {
637+
self.push(Ins::LocalGet(context));
638+
self.push(Ins::LocalGet(value));
639+
self.push(Ins::Call(
640+
*IMPORTS.get("componentize-py#ToCanonU64").unwrap(),
641+
));
642+
}
609643
Type::F32 => {
610644
self.push(Ins::LocalGet(context));
611645
self.push(Ins::LocalGet(value));
@@ -1417,20 +1451,34 @@ impl<'a> FunctionBindgen<'a> {
14171451
*IMPORTS.get("componentize-py#FromCanonBool").unwrap(),
14181452
));
14191453
}
1420-
Type::U8 | Type::U16 | Type::U32 | Type::S8 | Type::S16 | Type::S32 => {
1454+
Type::S8 | Type::S16 | Type::S32 => {
14211455
self.push(Ins::LocalGet(context));
14221456
self.push(Ins::LocalGet(value[0]));
14231457
self.push(Ins::Call(
14241458
*IMPORTS.get("componentize-py#FromCanonI32").unwrap(),
14251459
));
14261460
}
1427-
Type::U64 | Type::S64 => {
1461+
Type::U8 | Type::U16 | Type::U32 => {
1462+
self.push(Ins::LocalGet(context));
1463+
self.push(Ins::LocalGet(value[0]));
1464+
self.push(Ins::Call(
1465+
*IMPORTS.get("componentize-py#FromCanonU32").unwrap(),
1466+
));
1467+
}
1468+
Type::S64 => {
14281469
self.push(Ins::LocalGet(context));
14291470
self.push(Ins::LocalGet(value[0]));
14301471
self.push(Ins::Call(
14311472
*IMPORTS.get("componentize-py#FromCanonI64").unwrap(),
14321473
));
14331474
}
1475+
Type::U64 => {
1476+
self.push(Ins::LocalGet(context));
1477+
self.push(Ins::LocalGet(value[0]));
1478+
self.push(Ins::Call(
1479+
*IMPORTS.get("componentize-py#FromCanonU64").unwrap(),
1480+
));
1481+
}
14341482
Type::F32 => {
14351483
self.push(Ins::LocalGet(context));
14361484
self.push(Ins::LocalGet(value[0]));

src/test/echoes.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,18 +216,21 @@ class Echoes(exports.Echoes):
216216
return echoes.echo_bool(v)
217217
218218
def echo_u8(self, v):
219+
assert v >= 0
219220
return echoes.echo_u8(v)
220221
221222
def echo_s8(self, v):
222223
return echoes.echo_s8(v)
223224
224225
def echo_u16(self, v):
226+
assert v >= 0
225227
return echoes.echo_u16(v)
226228
227229
def echo_s16(self, v):
228230
return echoes.echo_s16(v)
229231
230232
def echo_u32(self, v):
233+
assert v >= 0
231234
return echoes.echo_u32(v)
232235
233236
def echo_s32(self, v):
@@ -237,6 +240,7 @@ class Echoes(exports.Echoes):
237240
return echoes.echo_char(v)
238241
239242
def echo_u64(self, v):
243+
assert v >= 0
240244
return echoes.echo_u64(v)
241245
242246
def echo_s64(self, v):
@@ -255,18 +259,21 @@ class Echoes(exports.Echoes):
255259
return echoes.echo_list_bool(v)
256260
257261
def echo_list_u8(self, v):
262+
assert all([n >= 0 for n in v])
258263
return echoes.echo_list_u8(v)
259264
260265
def echo_list_s8(self, v):
261266
return echoes.echo_list_s8(v)
262267
263268
def echo_list_u16(self, v):
269+
assert all([n >= 0 for n in v])
264270
return echoes.echo_list_u16(v)
265271
266272
def echo_list_s16(self, v):
267273
return echoes.echo_list_s16(v)
268274
269275
def echo_list_u32(self, v):
276+
assert all([n >= 0 for n in v])
270277
return echoes.echo_list_u32(v)
271278
272279
def echo_list_s32(self, v):
@@ -276,6 +283,7 @@ class Echoes(exports.Echoes):
276283
return echoes.echo_list_char(v)
277284
278285
def echo_list_u64(self, v):
286+
assert all([n >= 0 for n in v])
279287
return echoes.echo_list_u64(v)
280288
281289
def echo_list_s64(self, v):

0 commit comments

Comments
 (0)