diff --git a/compiler2/record_of.c b/compiler2/record_of.c index d0e9e7a4673f03a93b4451d7979fdc15a8409aa9..7be4e31efee6c2ec62dedf693118a51a6de686be 100644 --- a/compiler2/record_of.c +++ b/compiler2/record_of.c @@ -3225,6 +3225,14 @@ void defRecordOfClass2(const struct_of_def *sdef, output_struct *output) "}\n" "TTCN_error(\"Unbound or omitted right operand of %s concatenation.\");\n" "}\n\n", name, name, name, name, sdef->dispname); + + def = mputprintf(def, + "%s operator+(null_type) const;\n\n", name); + src = mputprintf(src, + "%s %s::operator+(null_type) const\n" + "{\n" + "return *this;\n" + "}\n\n", name, name); /* substr() */ def = mputprintf(def, @@ -4726,6 +4734,14 @@ void defRecordOfTemplate2(const struct_of_def *sdef, output_struct *output) "return ret_val;\n" "}\n\n", name, name, name, name); + def = mputprintf(def, + "%s_template operator+(null_type) const;\n\n", name); + src = mputprintf(src, + "%s_template %s_template::operator+(null_type) const\n" + "{\n" + "return *this;\n" + "}\n\n", name, name); + /* indexing operators */ def = mputprintf(def, "%s_template& operator[](int index_value);\n" diff --git a/compiler2/ttcn3/compiler.y b/compiler2/ttcn3/compiler.y index 9cb4f35f6ac136b9fc18fe83942a08183719eaba..58f9fa3fee85e1cb8801656a5aaf61718fc2e15a 100644 --- a/compiler2/ttcn3/compiler.y +++ b/compiler2/ttcn3/compiler.y @@ -2096,8 +2096,8 @@ optPackageNameList: ; PackageNameList: - ',' FreeText -| PackageNameList ',' FreeText + ',' FreeText { Free($2); } +| PackageNameList ',' FreeText { Free($3); } ; ModuleBody: diff --git a/regression_test/recofOper/TrecofOper.ttcn b/regression_test/recofOper/TrecofOper.ttcn index 9fb877d4314b1910c38949afc7426f79dd5a0e17..ce0ff3bef192aa848cec2af614487c2c1a812e16 100644 --- a/regression_test/recofOper/TrecofOper.ttcn +++ b/regression_test/recofOper/TrecofOper.ttcn @@ -701,7 +701,7 @@ testcase recofEmpty() runs on recofOper_mycomp{ testcase recofListOperator() runs on recofOper_mycomp{ var recofOper_myrecof1 x1; var recofOper_myrecof1 x2,x3,x4,x5,x6; - var recofOper_myrecof1 res1, res2, res3, res4; + var recofOper_myrecof1 res1, res2, res3, res4, res5; x1:={1,2}; x2:={1,2}; x3:={1}; @@ -713,6 +713,7 @@ testcase recofListOperator() runs on recofOper_mycomp{ res2 := x2 & x3; res3 := x2 & x3 & x5; res4 := x3 & x4; + res5 := x1 & {}; if (res1 == {1,2,1,2}) {setverdict(pass);} else {setverdict(fail);} if (res2 == {1,2,1}) {setverdict(pass);} @@ -721,6 +722,8 @@ testcase recofListOperator() runs on recofOper_mycomp{ else {setverdict(fail);} if (res4 == {1,1,3}) {setverdict(pass);} else {setverdict(fail);} + if (res5 == {1,2}) {setverdict(pass);} + else {setverdict(fail);} } testcase recofRotateOperators() runs on recofOper_mycomp{ diff --git a/regression_test/setofOper/TsetofOper.ttcn b/regression_test/setofOper/TsetofOper.ttcn index c77dd205295b85c7f89ed791b2b42a5bbab16126..96c3222f8b8fe6fa00a542ca12e93936d47efc9f 100644 --- a/regression_test/setofOper/TsetofOper.ttcn +++ b/regression_test/setofOper/TsetofOper.ttcn @@ -729,7 +729,7 @@ testcase setofCompUnbound() runs on setofOper_mycomp{ testcase setofListOperator() runs on setofOper_mycomp{ var setofOper_mysetof1 x1:={1,2}; var setofOper_mysetof1 x2,x3,x4,x5,x6; //set of basic types - var setofOper_mysetof1 res1, res2, res3, res4; + var setofOper_mysetof1 res1, res2, res3, res4, res5; x2:={ 1, 2 }; x3:={1}; x4:={1}; @@ -740,6 +740,7 @@ testcase setofListOperator() runs on setofOper_mycomp{ res2 := x1 & x3; res3 := x2 & x3 & x5; res4 := x3 & x4; + res5 := x1 & {}; if (res1 == {1,2,1,2}) {setverdict(pass);} else {setverdict(fail);} if (res2 == {1,2,1}) {setverdict(pass);} @@ -748,6 +749,8 @@ testcase setofListOperator() runs on setofOper_mycomp{ else {setverdict(fail);} if (res4 == {1,1,3}) {setverdict(pass);} else {setverdict(fail);} + if (res5 == {1,2}) {setverdict(pass);} + else {setverdict(fail);} } testcase setofRotateOperators() runs on setofOper_mycomp{ diff --git a/regression_test/templateConcat/TemplateConcatRecof.ttcn b/regression_test/templateConcat/TemplateConcatRecof.ttcn index 8f6cf6ae1656c150ff1c9cddd0f1c411b6fdf52f..b93b6ec75de2d01da412d93e0d5e528e97fd5898 100644 --- a/regression_test/templateConcat/TemplateConcatRecof.ttcn +++ b/regression_test/templateConcat/TemplateConcatRecof.ttcn @@ -97,6 +97,8 @@ testcase tc_recof_vt_w_refs_and_literals() runs on CT { var template RecOfInt vt_recof4 := ? length(2..2) & { 4, 5 } & * length(3); var template RecOfInt vt_recof4_exp := { ?, ?, 4, 5, ?, ?, ? }; + var template RecOfInt vt_recof5 := t_recof_op1 & {}; + if (log2str(vt_recof1) != log2str(vt_recof1_exp)) { setverdict(fail, "Expected: ", vt_recof1_exp, ", got: ", vt_recof1); } @@ -109,6 +111,9 @@ testcase tc_recof_vt_w_refs_and_literals() runs on CT { else if (log2str(vt_recof4) != log2str(vt_recof4_exp)) { setverdict(fail, "Expected: ", vt_recof4_exp, ", got: ", vt_recof4); } + else if (log2str(vt_recof5) != log2str(t_recof_op1)) { + setverdict(fail, "Expected: ", t_recof_op1, ", got: ", vt_recof4); + } else { setverdict(pass); } diff --git a/regression_test/templateConcat/TemplateConcatSetof.ttcn b/regression_test/templateConcat/TemplateConcatSetof.ttcn index cf9d7121d2aedf1da334a9a75e9f587d1eb11654..b67a51eeae20cd0298e35832ad0627e45f5401e0 100644 --- a/regression_test/templateConcat/TemplateConcatSetof.ttcn +++ b/regression_test/templateConcat/TemplateConcatSetof.ttcn @@ -97,6 +97,8 @@ testcase tc_setof_vt_w_refs_and_literals() runs on CT { var template SetOfInt vt_setof4 := ? length(2..2) & { 4, 5 } & * length(3); var template SetOfInt vt_setof4_exp := { ?, ?, 4, 5, ?, ?, ? }; + var template SetOfInt vt_setof5 := t_setof_op1 & {}; + if (log2str(vt_setof1) != log2str(vt_setof1_exp)) { setverdict(fail, "Expected: ", vt_setof1_exp, ", got: ", vt_setof1); } @@ -109,6 +111,9 @@ testcase tc_setof_vt_w_refs_and_literals() runs on CT { else if (log2str(vt_setof4) != log2str(vt_setof4_exp)) { setverdict(fail, "Expected: ", vt_setof4_exp, ", got: ", vt_setof4); } + else if (log2str(vt_setof5) != log2str(t_setof_op1)) { + setverdict(fail, "Expected: ", t_setof_op1, ", got: ", vt_setof4); + } else { setverdict(pass); }