Skip to content

Commit d295a51

Browse files
committed
Use *mut u8 instead of *mut c_void for pointers.
And switch to `add` from `byte_add`.
1 parent 8427d4a commit d295a51

File tree

2 files changed

+31
-40
lines changed

2 files changed

+31
-40
lines changed

crates/rust/src/bindgen.rs

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -270,14 +270,14 @@ impl Bindgen for FunctionBindgen<'_, '_> {
270270
self.import_return_pointer_area_align.max(align);
271271
uwrite!(
272272
self.src,
273-
"let ptr{tmp} = ret_area.0.as_mut_ptr().cast::<::core::ffi::c_void>();"
273+
"let ptr{tmp} = ret_area.0.as_mut_ptr().cast::<u8>();"
274274
);
275275
} else {
276276
self.gen.return_pointer_area_size = self.gen.return_pointer_area_size.max(size);
277277
self.gen.return_pointer_area_align = self.gen.return_pointer_area_align.max(align);
278278
uwriteln!(
279279
self.src,
280-
"let ptr{tmp} = _RET_AREA.0.as_mut_ptr().cast::<::core::ffi::c_void>();"
280+
"let ptr{tmp} = _RET_AREA.0.as_mut_ptr().cast::<u8>();"
281281
);
282282
}
283283
format!("ptr{}", tmp)
@@ -658,10 +658,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
658658
let op0 = operands.pop().unwrap();
659659
self.push_str(&format!("let {} = ({}).into_boxed_slice();\n", val, op0));
660660
}
661-
self.push_str(&format!(
662-
"let {} = {}.as_ptr().cast::<::core::ffi::c_void>();\n",
663-
ptr, val
664-
));
661+
self.push_str(&format!("let {} = {}.as_ptr().cast::<u8>();\n", ptr, val));
665662
self.push_str(&format!("let {} = {}.len();\n", len, val));
666663
if realloc.is_some() {
667664
self.push_str(&format!("::core::mem::forget({});\n", val));
@@ -693,10 +690,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
693690
let op0 = format!("{}.into_bytes()", operands[0]);
694691
self.push_str(&format!("let {} = ({}).into_boxed_slice();\n", val, op0));
695692
}
696-
self.push_str(&format!(
697-
"let {} = {}.as_ptr().cast::<::core::ffi::c_void>();\n",
698-
ptr, val
699-
));
693+
self.push_str(&format!("let {} = {}.as_ptr().cast::<u8>();\n", ptr, val));
700694
self.push_str(&format!("let {} = {}.len();\n", len, val));
701695
if realloc.is_some() {
702696
self.push_str(&format!("::core::mem::forget({});\n", val));
@@ -742,14 +736,14 @@ impl Bindgen for FunctionBindgen<'_, '_> {
742736
));
743737
self.push_str(&format!("let {result} = if {layout}.size() != 0 {{\n"));
744738
self.push_str(&format!(
745-
"let ptr = {alloc}::alloc({layout}).cast::<::core::ffi::c_void>();\n",
739+
"let ptr = {alloc}::alloc({layout}).cast::<u8>();\n",
746740
));
747741
self.push_str(&format!(
748742
"if ptr.is_null()\n{{\n{alloc}::handle_alloc_error({layout});\n}}\nptr\n}}",
749743
));
750744
self.push_str("else {{\n::core::ptr::null_mut()\n}};\n");
751745
self.push_str(&format!("for (i, e) in {vec}.into_iter().enumerate() {{\n",));
752-
self.push_str(&format!("let base = {result}.byte_add(i * {size});\n",));
746+
self.push_str(&format!("let base = {result}.add(i * {size});\n",));
753747
self.push_str(&body);
754748
self.push_str("\n}\n");
755749
results.push(format!("{result}"));
@@ -785,7 +779,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
785779
));
786780

787781
uwriteln!(self.src, "for i in 0..{len} {{");
788-
uwriteln!(self.src, "let base = {base}.byte_add(i * {size});");
782+
uwriteln!(self.src, "let base = {base}.add(i * {size});");
789783
uwriteln!(self.src, "let e{tmp} = {body};");
790784
uwriteln!(self.src, "{result}.push(e{tmp});");
791785
uwriteln!(self.src, "}}");
@@ -877,7 +871,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
877871
let tmp = self.tmp();
878872
uwriteln!(
879873
self.src,
880-
"let l{tmp} = *{}.byte_add({offset}).cast::<i32>();",
874+
"let l{tmp} = *{}.add({offset}).cast::<i32>();",
881875
operands[0]
882876
);
883877
results.push(format!("l{tmp}"));
@@ -886,7 +880,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
886880
let tmp = self.tmp();
887881
uwriteln!(
888882
self.src,
889-
"let l{tmp} = i32::from(*{}.byte_add({offset}).cast::<u8>());",
883+
"let l{tmp} = i32::from(*{}.add({offset}).cast::<u8>());",
890884
operands[0]
891885
);
892886
results.push(format!("l{tmp}"));
@@ -895,7 +889,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
895889
let tmp = self.tmp();
896890
uwriteln!(
897891
self.src,
898-
"let l{tmp} = i32::from(*{}.byte_add({offset}).cast::<i8>());",
892+
"let l{tmp} = i32::from(*{}.add({offset}).cast::<i8>());",
899893
operands[0]
900894
);
901895
results.push(format!("l{tmp}"));
@@ -904,7 +898,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
904898
let tmp = self.tmp();
905899
uwriteln!(
906900
self.src,
907-
"let l{tmp} = i32::from(*{}.byte_add({offset}).cast::<u16>());",
901+
"let l{tmp} = i32::from(*{}.add({offset}).cast::<u16>());",
908902
operands[0]
909903
);
910904
results.push(format!("l{tmp}"));
@@ -913,7 +907,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
913907
let tmp = self.tmp();
914908
uwriteln!(
915909
self.src,
916-
"let l{tmp} = i32::from(*{}.byte_add({offset}).cast::<i16>());",
910+
"let l{tmp} = i32::from(*{}.add({offset}).cast::<i16>());",
917911
operands[0]
918912
);
919913
results.push(format!("l{tmp}"));
@@ -922,7 +916,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
922916
let tmp = self.tmp();
923917
uwriteln!(
924918
self.src,
925-
"let l{tmp} = *{}.byte_add({offset}).cast::<i64>();",
919+
"let l{tmp} = *{}.add({offset}).cast::<i64>();",
926920
operands[0]
927921
);
928922
results.push(format!("l{tmp}"));
@@ -931,7 +925,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
931925
let tmp = self.tmp();
932926
uwriteln!(
933927
self.src,
934-
"let l{tmp} = *{}.byte_add({offset}).cast::<f32>();",
928+
"let l{tmp} = *{}.add({offset}).cast::<f32>();",
935929
operands[0]
936930
);
937931
results.push(format!("l{tmp}"));
@@ -940,7 +934,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
940934
let tmp = self.tmp();
941935
uwriteln!(
942936
self.src,
943-
"let l{tmp} = *{}.byte_add({offset}).cast::<f64>();",
937+
"let l{tmp} = *{}.add({offset}).cast::<f64>();",
944938
operands[0]
945939
);
946940
results.push(format!("l{tmp}"));
@@ -950,7 +944,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
950944
let tmp = self.tmp();
951945
uwriteln!(
952946
self.src,
953-
"let l{tmp} = *{}.byte_add({offset}).cast::<*mut ::core::ffi::c_void>();",
947+
"let l{tmp} = *{}.add({offset}).cast::<*mut u8>();",
954948
operands[0]
955949
);
956950
results.push(format!("l{tmp}"));
@@ -959,58 +953,58 @@ impl Bindgen for FunctionBindgen<'_, '_> {
959953
let tmp = self.tmp();
960954
uwriteln!(
961955
self.src,
962-
"let l{tmp} = *{}.byte_add({offset}).cast::<usize>();",
956+
"let l{tmp} = *{}.add({offset}).cast::<usize>();",
963957
operands[0]
964958
);
965959
results.push(format!("l{tmp}"));
966960
}
967961

968962
Instruction::I32Store { offset } => {
969963
self.push_str(&format!(
970-
"*{}.byte_add({}).cast::<i32>() = {};\n",
964+
"*{}.add({}).cast::<i32>() = {};\n",
971965
operands[1], offset, operands[0]
972966
));
973967
}
974968
Instruction::I32Store8 { offset } => {
975969
self.push_str(&format!(
976-
"*{}.byte_add({}).cast::<u8>() = ({}) as u8;\n",
970+
"*{}.add({}).cast::<u8>() = ({}) as u8;\n",
977971
operands[1], offset, operands[0]
978972
));
979973
}
980974
Instruction::I32Store16 { offset } => {
981975
self.push_str(&format!(
982-
"*{}.byte_add({}).cast::<u16>() = ({}) as u16;\n",
976+
"*{}.add({}).cast::<u16>() = ({}) as u16;\n",
983977
operands[1], offset, operands[0]
984978
));
985979
}
986980
Instruction::I64Store { offset } => {
987981
self.push_str(&format!(
988-
"*{}.byte_add({}).cast::<i64>() = {};\n",
982+
"*{}.add({}).cast::<i64>() = {};\n",
989983
operands[1], offset, operands[0]
990984
));
991985
}
992986
Instruction::F32Store { offset } => {
993987
self.push_str(&format!(
994-
"*{}.byte_add({}).cast::<f32>() = {};\n",
988+
"*{}.add({}).cast::<f32>() = {};\n",
995989
operands[1], offset, operands[0]
996990
));
997991
}
998992
Instruction::F64Store { offset } => {
999993
self.push_str(&format!(
1000-
"*{}.byte_add({}).cast::<f64>() = {};\n",
994+
"*{}.add({}).cast::<f64>() = {};\n",
1001995
operands[1], offset, operands[0]
1002996
));
1003997
}
1004998

1005999
Instruction::PointerStore { offset } => {
10061000
self.push_str(&format!(
1007-
"*{}.byte_add({}).cast::<*mut ::core::ffi::c_void>() = {};\n",
1001+
"*{}.add({}).cast::<*mut u8>() = {};\n",
10081002
operands[1], offset, operands[0]
10091003
));
10101004
}
10111005
Instruction::LengthStore { offset } => {
10121006
self.push_str(&format!(
1013-
"*{}.byte_add({}).cast::<usize>() = {};\n",
1007+
"*{}.add({}).cast::<usize>() = {};\n",
10141008
operands[1], offset, operands[0]
10151009
));
10161010
}
@@ -1075,7 +1069,7 @@ impl Bindgen for FunctionBindgen<'_, '_> {
10751069
self.push_str(" {\n");
10761070
self.push_str("let base = ");
10771071
self.push_str(&base);
1078-
self.push_str(".byte_add(i * ");
1072+
self.push_str(".add(i * ");
10791073
self.push_str(&size.to_string());
10801074
self.push_str(");\n");
10811075
self.push_str(&body);

crates/rust/src/lib.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ impl RustWasm {
379379
self.rt_module.insert(RuntimeItem::StdAllocModule);
380380
self.src.push_str(
381381
"\
382-
pub unsafe fn cabi_dealloc(ptr: *mut ::core::ffi::c_void, size: usize, align: usize) {
382+
pub unsafe fn cabi_dealloc(ptr: *mut u8, size: usize, align: usize) {
383383
if size == 0 {
384384
return;
385385
}
@@ -1248,7 +1248,7 @@ fn wasm_type(ty: WasmType) -> &'static str {
12481248
WasmType::I64 => "i64",
12491249
WasmType::F32 => "f32",
12501250
WasmType::F64 => "f64",
1251-
WasmType::Pointer => "*mut ::core::ffi::c_void",
1251+
WasmType::Pointer => "*mut u8",
12521252
WasmType::Length => "usize",
12531253

12541254
// `PointerOrI64` can hold either a `u64` or a pointer with provenance.
@@ -1293,7 +1293,7 @@ fn bitcast(casts: &[Bitcast], operands: &[String], results: &mut Vec<String>) {
12931293
format!(
12941294
"{{
12951295
let mut t = ::core::mem::MaybeUnunit::<u64>::uninit();
1296-
t.as_mut_ptr().cast::<*mut core::ptr::c_void>().write({});
1296+
t.as_mut_ptr().cast::<*mut u8>().write({});
12971297
t
12981298
}}",
12991299
operand
@@ -1302,14 +1302,11 @@ fn bitcast(casts: &[Bitcast], operands: &[String], results: &mut Vec<String>) {
13021302
// Convert a `MaybeUninit<u64>` holding a pointer value back into
13031303
// the pointer value.
13041304
Bitcast::P64ToP => {
1305-
format!(
1306-
"{}.as_mut_ptr().cast::<*mut core::ptr::c_void>().read()",
1307-
operand
1308-
)
1305+
format!("{}.as_mut_ptr().cast::<*mut u8>().read()", operand)
13091306
}
13101307
// Convert an `i32` into a pointer.
13111308
Bitcast::I32ToP => {
1312-
format!("{} as *mut ::core::ffi::c_void", operand)
1309+
format!("{} as *mut u8", operand)
13131310
}
13141311
// Convert a pointer holding an `i32` value back into the `i32`.
13151312
Bitcast::PToI32 => {

0 commit comments

Comments
 (0)