]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Only handle null-terminated array as such if there is no length given
authorRico Tzschichholz <ricotz@ubuntu.com>
Tue, 16 Apr 2024 11:01:23 +0000 (13:01 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Tue, 16 Apr 2024 11:01:23 +0000 (13:01 +0200)
codegen/valaccodedelegatemodule.vala
codegen/valaccodememberaccessmodule.vala
codegen/valaccodemethodcallmodule.vala

index b7f5eaa1daedddccf11a55e051f046f235078db7..3d255ee19ecaa7d92cfdb4c0881c1a4bdca778c3 100644 (file)
@@ -328,7 +328,7 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
                                var array_type = (ArrayType) param.variable_type;
                                for (int dim = 1; dim <= array_type.rank; dim++) {
                                        CCodeExpression clength;
-                                       if (get_ccode_array_null_terminated (d_param)) {
+                                       if (get_ccode_array_null_terminated (d_param) && !get_ccode_array_length (d_param)) {
                                                requires_array_length = true;
                                                var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
                                                len_call.add_argument (new CCodeIdentifier (d_param.name));
index 29d0251428b5b8def61b3aadd24d4b7a25c26ce4..3eff4c573460da7341a969e6b08290f8edb72af6 100644 (file)
@@ -282,7 +282,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                } else {
                                        array_type = prop.property_type as ArrayType;
                                        if (array_type != null) {
-                                               if (get_ccode_array_null_terminated (prop)) {
+                                               if (get_ccode_array_null_terminated (prop) && !get_ccode_array_length (prop)) {
                                                        requires_array_length = true;
                                                        var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
                                                        len_call.add_argument (ctemp);
@@ -357,7 +357,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 
                                set_cvalue (expr, ctemp);
 
-                               if (get_ccode_array_null_terminated (prop)) {
+                               if (get_ccode_array_null_terminated (prop) && !get_ccode_array_length (prop)) {
                                        requires_array_length = true;
                                        var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
                                        len_call.add_argument (ctemp);
@@ -735,7 +735,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                result.array_length_cvalues = null;
                                result.append_array_length_cvalue (get_ccodenode (array_type.length));
                                result.lvalue = false;
-                       } else if (get_ccode_array_null_terminated (variable)) {
+                       } else if (get_ccode_array_null_terminated (variable) && !get_ccode_array_length (variable)) {
                                requires_array_length = true;
                                var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
                                len_call.add_argument (result.cvalue);
index 16f4f36c57ae514b6403f34715cc9f234071f022..b4e4d0c940d77c5668437abe7edddfe6adb47614 100644 (file)
@@ -585,7 +585,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                if (m != null && m.return_type is ArrayType && async_call != ccall) {
                        var array_type = (ArrayType) m.return_type;
                        for (int dim = 1; dim <= array_type.rank; dim++) {
-                               if (get_ccode_array_null_terminated (m)) {
+                               if (get_ccode_array_null_terminated (m) && !get_ccode_array_length (m)) {
                                        // handle calls to methods returning null-terminated arrays
                                        var temp_var = get_temp_variable (itype.get_return_type (), true, null, false);
                                        var temp_ref = get_variable_cexpression (temp_var.name);
@@ -652,7 +652,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                if (deleg != null && deleg.return_type is ArrayType) {
                        var array_type = (ArrayType) deleg.return_type;
                        for (int dim = 1; dim <= array_type.rank; dim++) {
-                               if (get_ccode_array_null_terminated (deleg)) {
+                               if (get_ccode_array_null_terminated (deleg) && !get_ccode_array_length (deleg)) {
                                        // handle calls to methods returning null-terminated arrays
                                        var temp_var = get_temp_variable (itype.get_return_type (), true, null, false);
                                        var temp_ref = get_variable_cexpression (temp_var.name);
@@ -983,7 +983,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                        // handle ref null terminated arrays
                        if (unary != null && unary.operator == UnaryOperator.REF
                            && unary.inner.symbol_reference != null && get_ccode_array_length (unary.inner.symbol_reference)) {
-                               if (param != null && get_ccode_array_null_terminated (param)
+                               if (param != null && get_ccode_array_null_terminated (param) && !get_ccode_array_length (param)
                                    && param.variable_type is ArrayType && ((ArrayType) param.variable_type).rank == 1) {
                                        requires_array_length = true;
                                        var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));
@@ -1023,7 +1023,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                        store_value (unary.inner.target_value, transform_value (unary.target_value, unary.inner.value_type, arg), expr.source_reference);
 
                        // handle out null terminated arrays
-                       if (param != null && get_ccode_array_null_terminated (param)
+                       if (param != null && get_ccode_array_null_terminated (param) && !get_ccode_array_length (param)
                            && unary.inner.symbol_reference != null && get_ccode_array_length (unary.inner.symbol_reference)) {
                                requires_array_length = true;
                                var len_call = new CCodeFunctionCall (new CCodeIdentifier ("_vala_array_length"));