diff --git a/TestSuite/errors/err0332.pas b/TestSuite/errors/err0332_set_invalid_type.pas similarity index 100% rename from TestSuite/errors/err0332.pas rename to TestSuite/errors/err0332_set_invalid_type.pas diff --git a/TestSuite/errors/err0342_wrong_dynarr_size.pas b/TestSuite/errors/err0342_wrong_dynarr_size.pas new file mode 100644 index 000000000..714138d48 --- /dev/null +++ b/TestSuite/errors/err0342_wrong_dynarr_size.pas @@ -0,0 +1,4 @@ +begin + var b: array [,] of byte := ((1, 2), (3, 4, 5), (5, 6)); + b.Println; +end. \ No newline at end of file diff --git a/TestSuite/errors/err0343_wrong_dynarr_rank.pas b/TestSuite/errors/err0343_wrong_dynarr_rank.pas new file mode 100644 index 000000000..81a3c4565 --- /dev/null +++ b/TestSuite/errors/err0343_wrong_dynarr_rank.pas @@ -0,0 +1,4 @@ +begin + var b: array [,] of byte := ((1, 2), 6, (5, 6)); + b.Println; +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index 27dadf562..b1a81c4e6 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -14807,16 +14807,20 @@ namespace PascalABCCompiler.TreeConverter { array_internal_interface aii = tn.get_internal_interface(internal_interface_kind.unsized_array_interface) as array_internal_interface; int rank = aii.rank; + int size = -1; for (int i=0; i=rank) - constant.element_values[i] = ConvertArrayInitializer(tn.element_type,e as array_initializer); + if (size != -1 && size != (e as array_initializer).element_values.Count) + AddError(e.location, "ARRAY_CONST_{0}_ELEMENTS_EXPECTED", size); + size = (e as array_initializer).element_values.Count; + if (cur_rank >= rank) + constant.element_values[i] = ConvertArrayInitializer(tn.element_type, e as array_initializer); //AddError(new CanNotConvertTypes(e,e.type,tn.element_type,e.location)); else - constant.element_values[i] = ConvertNDimArrayInitializer(tn,cur_rank+1,element_type,e as array_initializer); + constant.element_values[i] = ConvertNDimArrayInitializer(tn,cur_rank + 1, element_type, e as array_initializer); } else if (e is record_initializer) { @@ -14890,16 +14894,20 @@ namespace PascalABCCompiler.TreeConverter { array_internal_interface aii = tn.get_internal_interface(internal_interface_kind.unsized_array_interface) as array_internal_interface; int rank = aii.rank; + int size = -1; for (int i=0; i=rank) constant.element_values[i] = ConvertArrayConst(tn.element_type,e as array_const); //AddError(new CanNotConvertTypes(e,e.type,tn.element_type,e.location)); else - constant.element_values[i] = ConvertNDimArrayConst(tn,cur_rank+1,element_type,e as array_const); + constant.element_values[i] = ConvertNDimArrayConst(tn,cur_rank+1,element_type,e as array_const); } else if (e is record_constant) {