Handle more of the fundamental types.
This is all that I am planning to import for now.
PiperOrigin-RevId: 399920115
diff --git a/rs_bindings_from_cc/ast_visitor.cc b/rs_bindings_from_cc/ast_visitor.cc
index 0659bd8..69fb3d2 100644
--- a/rs_bindings_from_cc/ast_visitor.cc
+++ b/rs_bindings_from_cc/ast_visitor.cc
@@ -152,7 +152,13 @@
default:
if (builtin_type->isIntegerType()) {
auto size = ctx.getTypeSize(builtin_type);
- if (size == 8 || size == 16 || size == 32 || size == 64) {
+ if (size == 64 &&
+ (type_string == "size_t" || type_string == "intptr_t")) {
+ type = MappedType::Simple("isize", type_string);
+ } else if (size == 64 && (type_string == "ptrdiff_t" ||
+ type_string == "uintptr_t")) {
+ type = MappedType::Simple("usize", type_string);
+ } else if (size == 8 || size == 16 || size == 32 || size == 64) {
type = MappedType::Simple(
absl::Substitute(
"$0$1", builtin_type->isSignedInteger() ? 'i' : 'u', size),
diff --git a/rs_bindings_from_cc/ast_visitor_test.cc b/rs_bindings_from_cc/ast_visitor_test.cc
index d8ce285..dcfdd6f 100644
--- a/rs_bindings_from_cc/ast_visitor_test.cc
+++ b/rs_bindings_from_cc/ast_visitor_test.cc
@@ -329,6 +329,8 @@
TEST(AstVisitorTest, IntegerTypes) {
auto ir = ImportCode({"#include <stdint.h>\n"
+ "#include <stddef.h>\n"
+
"struct S { "
" bool b;"
@@ -364,6 +366,11 @@
" uint32_t u32;"
" uint64_t u64;"
+ " size_t st;",
+ " ptrdiff_t pt;"
+ " intptr_t ip;"
+ " uintptr_t up;"
+
" float f;"
" double d;"
"};"},
@@ -408,6 +415,11 @@
FieldType(IsSimpleType("u32", "uint32_t")),
FieldType(IsSimpleType("u64", "uint64_t")),
+ FieldType(IsSimpleType("isize", "size_t")),
+ FieldType(IsSimpleType("usize", "ptrdiff_t")),
+ FieldType(IsSimpleType("isize", "intptr_t")),
+ FieldType(IsSimpleType("usize", "uintptr_t")),
+
FieldType(IsSimpleType("float", "float")),
FieldType(IsSimpleType("double", "double")))));
}