From: Rico Tzschichholz Date: Sat, 19 Oct 2019 13:15:42 +0000 (+0200) Subject: codegen: Create alternative for G_N_ELEMENTS in POSIX profile X-Git-Tag: 0.47.1~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bf3fd54c105907bb517bf8811c3dd46903c0c4cc;p=thirdparty%2Fvala.git codegen: Create alternative for G_N_ELEMENTS in POSIX profile --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 849e3ac2b..873f1ad34 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -344,6 +344,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public bool requires_array_free; public bool requires_array_move; public bool requires_array_length; + public bool requires_array_n_elements; public bool requires_clear_mutex; public Set wrappers; @@ -773,6 +774,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { requires_array_free = false; requires_array_move = false; requires_array_length = false; + requires_array_n_elements = false; requires_clear_mutex = false; wrappers = new HashSet (str_hash, str_equal); @@ -807,6 +809,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { if (requires_array_length) { append_vala_array_length (); } + if (requires_array_n_elements) { + cfile.add_type_declaration (new CCodeMacroReplacement.with_expression ("VALA_N_ELEMENTS(arr)", new CCodeConstant ("(sizeof (arr) / sizeof ((arr)[0]))"))); + } if (requires_clear_mutex) { append_vala_clear_mutex ("GMutex", "g_mutex"); append_vala_clear_mutex ("GRecMutex", "g_rec_mutex"); diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 3b8933d04..7674402ca 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -165,7 +165,13 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { if (array_type != null) { string sub = ""; for (int i = 0; i < array_type.rank; i++) { - var ccall = new CCodeFunctionCall (new CCodeIdentifier ("G_N_ELEMENTS")); + CCodeFunctionCall ccall; + if (context.profile == Profile.POSIX) { + requires_array_n_elements = true; + ccall = new CCodeFunctionCall (new CCodeIdentifier ("VALA_N_ELEMENTS")); + } else { + ccall = new CCodeFunctionCall (new CCodeIdentifier ("G_N_ELEMENTS")); + } ccall.add_argument (new CCodeIdentifier (get_ccode_name (c) + sub)); append_array_length (expr, ccall); sub += "[0]";