2 def __init__(self, is_native_primitive, rust_obj, java_ty, java_fn_ty_arg, java_hu_ty, c_ty, is_const, passed_as_ptr, is_ptr, nonnull_ptr, var_name, arr_len, arr_access, subty=None):
3 self.is_native_primitive = is_native_primitive
4 self.rust_obj = rust_obj
6 self.java_hu_ty = java_hu_ty
7 self.java_fn_ty_arg = java_fn_ty_arg
9 self.is_const = is_const
10 self.passed_as_ptr = passed_as_ptr
12 self.nonnull_ptr = nonnull_ptr
13 self.var_name = var_name
14 self.arr_len = arr_len
15 self.arr_access = arr_access
17 self.pass_by_ref = is_ptr
18 self.requires_clone = None
20 def get_full_rust_ty(self):
24 if self.rust_obj is not None:
25 ret = ret + self.rust_obj
29 if self.arr_len is not None and self.arr_len.isnumeric():
30 if self.rust_obj is not None:
32 assert self.c_ty.endswith("Array")
34 return ("const u" + self.c_ty[:-5] + " (*", ")[" + self.arr_len + "]")
36 return ("u" + self.c_ty[:-5] + " (*", ")[" + self.arr_len + "]")
37 if self.rust_obj is None:
38 if self.c_ty.startswith("int"):
39 # Ironically the entire API uses no signed integers. We really should handle this better, but for now just always add a u
40 return ("u" + self.c_ty, "")
41 if self.c_ty == "jboolean":
43 return (self.c_ty, "")
47 def __init__(self, ty_info, arg_name, arg_conv, arg_conv_name, arg_conv_cleanup, ret_conv, ret_conv_name, to_hu_conv, to_hu_conv_name, from_hu_conv):
48 assert(ty_info.c_ty is not None)
49 assert(ty_info.java_ty is not None)
50 assert(arg_name is not None)
51 self.passed_as_ptr = ty_info.passed_as_ptr
52 self.rust_obj = ty_info.rust_obj
53 self.c_ty = ty_info.c_ty
54 self.java_ty = ty_info.java_ty
55 self.java_hu_ty = ty_info.java_hu_ty
56 self.java_fn_ty_arg = ty_info.java_fn_ty_arg
57 self.is_native_primitive = ty_info.is_native_primitive
58 self.ty_info = ty_info
59 self.arg_name = arg_name
60 self.arg_conv = arg_conv
61 self.arg_conv_name = arg_conv_name
62 self.arg_conv_cleanup = arg_conv_cleanup
63 self.ret_conv = ret_conv
64 self.ret_conv_name = ret_conv_name
65 self.to_hu_conv = to_hu_conv
66 self.to_hu_conv_name = to_hu_conv_name
67 self.from_hu_conv = from_hu_conv
70 def __init__(self, fn_name, self_is_const, ret_ty_info, args_ty, docs):
71 self.fn_name = fn_name
72 self.self_is_const = self_is_const
73 self.ret_ty_info = ret_ty_info
74 self.args_ty = args_ty
77 class ComplexEnumVariantInfo:
78 def __init__(self, var_name, fields, tuple_variant):
79 self.var_name = var_name
81 self.tuple_variant = tuple_variant