From 2fbce30ea96ee95caf277587afc5db863e9b26af Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Sat, 8 Jan 2022 02:16:37 +0000 Subject: [PATCH] Make array human construction language-specific --- gen_type_mapping.py | 6 +----- java_strings.py | 8 ++++++++ typescript_strings.py | 3 +++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/gen_type_mapping.py b/gen_type_mapping.py index fb810c92..504fbdc0 100644 --- a/gen_type_mapping.py +++ b/gen_type_mapping.py @@ -183,11 +183,7 @@ class TypeMappingGenerator: to_hu_conv = None to_hu_conv_name = None if subty.to_hu_conv is not None: - base_ty = ty_info.subty.java_hu_ty.split("[")[0].split("<")[0] - to_hu_conv = self.consts.var_decl_statement(ty_info.java_hu_ty, conv_name + "_arr", "new " + base_ty + "[" + arr_name + ".length]") - if "[" in ty_info.subty.java_hu_ty.split("<")[0]: - # Do a bit of a dance to move any excess [] to the end - to_hu_conv += "[" + ty_info.subty.java_hu_ty.split("<")[0].split("[")[1] + to_hu_conv = self.consts.var_decl_statement(ty_info.java_hu_ty, conv_name + "_arr", self.consts.constr_hu_array(ty_info, arr_name + ".length")) to_hu_conv += ";\n" + self.consts.for_n_in_range(idxc, "0", arr_name + ".length") + "\n" to_hu_conv += "\t" + self.consts.var_decl_statement(subty.java_ty, conv_name, arr_name + "[" + idxc + "]") + ";\n" to_hu_conv += "\t" + subty.to_hu_conv.replace("\n", "\n\t") + "\n" diff --git a/java_strings.py b/java_strings.py index 8338bc17..c0eddca1 100644 --- a/java_strings.py +++ b/java_strings.py @@ -652,6 +652,14 @@ import javax.annotation.Nullable; def var_decl_statement(self, ty_string, var_name, statement): return ty_string + " " + var_name + " = " + statement + def constr_hu_array(self, ty_info, arr_len): + base_ty = ty_info.subty.java_hu_ty.split("[")[0].split("<")[0] + conv = "new " + base_ty + "[" + arr_len + "]" + if "[" in ty_info.subty.java_hu_ty.split("<")[0]: + # Do a bit of a dance to move any excess [] to the end + conv += "[" + ty_info.subty.java_hu_ty.split("<")[0].split("[")[1] + return conv + def for_n_in_range(self, n, minimum, maximum): return "for (int " + n + " = " + minimum + "; " + n + " < " + maximum + "; " + n + "++) {" def for_n_in_arr(self, n, arr_name, arr_elem_ty): diff --git a/typescript_strings.py b/typescript_strings.py index b2a1d528..7022137f 100644 --- a/typescript_strings.py +++ b/typescript_strings.py @@ -548,6 +548,9 @@ const decodeString = (stringPointer, free = true) => { def init_str(self): return "" + def constr_hu_array(self, ty_info, arr_len): + return "new Array(" + arr_len + ").fill(null)" + def var_decl_statement(self, ty_string, var_name, statement): return "const " + var_name + ": " + ty_string + " = " + statement -- 2.39.5