diff --git a/compiler2/Type.cc b/compiler2/Type.cc index 94757c41f73e6a92e7c485802519f4f888d44c0e..b2c4f7d5d71e9366880998b9ce38b2c1eb49c861 100644 --- a/compiler2/Type.cc +++ b/compiler2/Type.cc @@ -1703,7 +1703,58 @@ namespace Common { } // check the index value Value *index_value = ref->get_val(); - if (t->typetype == T_ARRAY) { + index_value->set_lowerid_to_ref(); + + // pt is the type with the indexing is made, while t is the type on the + // indexing is applied. + Type* pt = index_value->get_expr_governor_last(); + if (pt != NULL && + // The indexer type is an array or record of + (pt->get_typetype() == T_ARRAY || pt->get_typetype() == T_SEQOF) && + // The indexed type is a record of or set of or array + (t->get_typetype() == T_SEQOF || t->get_typetype() == T_SETOF || t->get_typetype() == T_ARRAY)) { + + // The indexer type must be of type integer + if (pt->get_ofType()->get_type_refd_last()->get_typetype() != T_INT) { + ref->error("Only fixed length array or record of integer types are allowed for short-hand notation for nested indexes."); + return 0; + } + int len = 0; + // Get the length of the array or record of + if (pt->get_typetype() == T_ARRAY) { + len = (int)pt->get_dimension()->get_size(); + } else if (pt->get_typetype() == T_SEQOF) { + SubType* sub = pt->get_sub_type(); + if (sub == NULL) { + ref->error("The type `%s' must have single size length restriction when used as a short-hand notation for nested indexes.", + pt->get_typename().c_str()); + return 0; + } + len = pt->get_sub_type()->get_length_restriction(); + if (len == -1) { + ref->error("The type `%s' must have single size length restriction when used as a short-hand notation for nested indexes.", + pt->get_typename().c_str()); + return 0; + } + } + embedded_type = embedded_type->get_type_refd_last(); + int j = 0; + // Get the len - 1'th inner type + while (j < len - 1) { + switch (embedded_type->get_typetype()) { + case T_SEQOF: + case T_SETOF: + case T_ARRAY: + embedded_type = embedded_type->get_ofType()->get_type_refd_last(); + break; + default: + ref->error("The type `%s' contains too many indexes (%i) in the short-hand notation for nested indexes.", + pt->get_typename().c_str(), len); + return 0; + } + j++; + } + } else if (t->typetype == T_ARRAY) { // checking of array index is performed by the array dimension t->u.array.dimension->chk_index(index_value, expected_index); } else { diff --git a/compiler2/ttcn3/AST_ttcn3.cc b/compiler2/ttcn3/AST_ttcn3.cc index fdd64d15229f945d321e17be690ab86de53c6ca8..1a81106363a1293e82b549f277fb0501ba9d1ba5 100644 --- a/compiler2/ttcn3/AST_ttcn3.cc +++ b/compiler2/ttcn3/AST_ttcn3.cc @@ -369,9 +369,29 @@ namespace Ttcn { } } else { // Generate code for array reference. - expr->expr = mputc(expr->expr, '['); - ref->get_val()->generate_code_expr(expr); - expr->expr = mputc(expr->expr, ']'); + Value* v = ref->get_val(); + Type * pt = v->get_expr_governor_last(); + // If the value is indexed with an array or record of then generate + // the indexes of the array or record of into the code, one by one. + if (pt->get_typetype() == Type::T_ARRAY || pt->get_typetype() == Type::T_SEQOF) { + int len = 0, start = 0; + if (pt->get_typetype() == Type::T_ARRAY) { + len = (int)pt->get_dimension()->get_size(); + start = pt->get_dimension()->get_offset(); + } else if (pt->get_typetype() == Type::T_SEQOF) { + len = pt->get_sub_type()->get_length_restriction(); + } + // Generate the indexes as [x][y]... + for (int j = start; j < start + len; j++) { + expr->expr = mputc(expr->expr, '['); + v->generate_code_expr(expr); + expr->expr = mputprintf(expr->expr, "[%i]]", j); + } + } else { + expr->expr = mputc(expr->expr, '['); + v->generate_code_expr(expr); + expr->expr = mputc(expr->expr, ']'); + } if (type) { // Follow the embedded type. switch (type->get_typetype()) { diff --git a/function_test/Semantic_Analyser/Makefile.semantic b/function_test/Semantic_Analyser/Makefile.semantic index da579923da1a258d05d89bf93d9e58dc5846d33d..b1b87e0f08012cb4d618e3595b14305e1634fb03 100644 --- a/function_test/Semantic_Analyser/Makefile.semantic +++ b/function_test/Semantic_Analyser/Makefile.semantic @@ -12,7 +12,7 @@ # Szabo, Bence Janos # ############################################################################## -SADIRS := ver xer encode param template any_from pattern_ref float +SADIRS := ver xer encode param template any_from pattern_ref float recof_index ifeq ($(RT2), yes) SADIRS += deprecated endif diff --git a/function_test/Semantic_Analyser/recof_index/Makefile b/function_test/Semantic_Analyser/recof_index/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..895b6a5b94888a0f8c7dd0d149825c99ec6fcc4d --- /dev/null +++ b/function_test/Semantic_Analyser/recof_index/Makefile @@ -0,0 +1,12 @@ +############################################################################## +# Copyright (c) 2000-2016 Ericsson Telecom AB +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Bence Janos Szabo +# +############################################################################## +include ../common.mk diff --git a/function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn b/function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..42fc6cfcea51c325a54831f9b25923eb1681e5b3 --- /dev/null +++ b/function_test/Semantic_Analyser/recof_index/recof_index_SE.ttcn @@ -0,0 +1,50 @@ +/****************************************************************************** + * Copyright (c) 2000-2016 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Szabo, Bence Janos + * + ******************************************************************************/ +module recof_index_SE { //^In TTCN-3 module// + + type record of record of integer RoRoI; + type record length(1..2) of integer RoI1; + type record length(3) of integer RoI2; + type record of integer RoI; + + type record length(1) of float RoF1; + + function f() { //^In function definition `f'// + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } + if (v_rec[v_index] == {2, 3}) { //^In if statement:// //error: The type \`@recof_index_SE\.RoI1\' must have single size length restriction when used as a short-hand notation for nested indexes\.// + } + + var RoI2 v_index2 := { 1, 2, 3 } + if (v_rec[v_index2] == {2, 3}) { //^In if statement:// //error: The type \`@recof_index_SE.RoI2\' contains too many indexes \(3\) in the short-hand notation for nested indexes\.// + } + + var integer v_arr[3] := { 1, 2, 3 } + if (v_rec[v_arr] == {2, 3}) { //^In if statement:// //error: The type \`integer\[3\]\' contains too many indexes \(3\) in the short-hand notation for nested indexes\.// + } + + var RoF1 v_index3 := { 1.0 } + if (v_rec[v_index3] == {2, 3}) { //^In if statement:// //error\: Only fixed length array or record of integer types are allowed for short\-hand notation for nested indexes\.// + } + + var integer v_arr2[0] := { } //In variable definition \`v_arr2\'\:// //error\: A positive integer value was expected as array size instead of \`0\'// + if (v_rec[v_arr2] == {2, 3}) { + } + + var RoI v_index4 := { 1, 1 } + if (v_rec[v_index4] == {2, 3}) { //^In if statement:// //error\: The type \`\@recof_index_SE\.RoI\' must have single size length restriction when used as a short\-hand notation for nested indexes\.// + } + + } + + +} diff --git a/function_test/Semantic_Analyser/recof_index/t b/function_test/Semantic_Analyser/recof_index/t new file mode 100755 index 0000000000000000000000000000000000000000..3a4b58ec16cf2f1390a36c7a92f8823e3b94b425 --- /dev/null +++ b/function_test/Semantic_Analyser/recof_index/t @@ -0,0 +1,9 @@ +#!/usr/bin/perl +# note this is called through "perl -w" +use strict; + +my $self = $0; +$self =~ s!/t!!; + +exec('make check --no-print-directory -s -C ' . $self); + diff --git a/regression_test/Makefile b/regression_test/Makefile index 274622c4f26272c1021aecec4efa4d8844673443..812f0f1850d40be175a0412fddcc1daa6d434400 100644 --- a/regression_test/Makefile +++ b/regression_test/Makefile @@ -47,7 +47,7 @@ macros visibility hexstrOper ucharstrOper objidOper CRTR00015758 slider \ XML ipv6 implicitOmit testcase_defparam transparent HQ16404 cfgFile \ all_from lazyEval tryCatch text2ttcn json junitlogger ttcn2json profiler templateOmit \ customEncoding makefilegen uidChars checkstate hostid templateIstemplatekind \ -selectUnion templateExclusiveRange any_from templatePatternRef +selectUnion templateExclusiveRange any_from templatePatternRef indexWithRecofArray ifdef DYN DIRS += loggerplugin diff --git a/regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn b/regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..c759c8b8c2fc226f48702b26dc57a01f4e1763bb --- /dev/null +++ b/regression_test/indexWithRecofArray/IndexWithRecofArray.ttcn @@ -0,0 +1,1688 @@ +/****************************************************************************** + * Copyright (c) 2000-2016 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Szabo, Bence Janos + * + ******************************************************************************/ + +module IndexWithRecofArray { + + type component GeneralComp { + } + + + type record of record of integer RoRoI; + type record of record of RoRoI RoIRoIRoIRoI; + type set of set of integer SoISoI; + type set of set of SoISoI SoISoISoISoI + type record length(1) of integer RoI1; + type record length(2) of integer RoI2; + + +//###########################################################################// +// Record of indexed with array or record of + + testcase tc_recordof_indexed_with_array() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var integer v_index[1] := { 1 } + +//////////////////////////////////////////////////// + + if (v_rec[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index] := {5, 6}; + if (v_rec[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][0] := 99; + if (v_rec[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_rec[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[0][v_index] := 99; + if (v_rec[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index] := 99; + if (v_rec[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_rec[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index2] := 99; + if (v_rec[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index2] := 2; + } + + testcase tc_recordof_indexed_with_recordof() runs on GeneralComp { + + var RoRoI v_rec := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } + //////////////////////////////////////////////////// + + if (v_rec[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index] := {5, 6}; + if (v_rec[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][0] := 99; + if (v_rec[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_rec[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[0][v_index] := 99; + if (v_rec[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_rec[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index] := 99; + if (v_rec[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_rec[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index2] := 99; + if (v_rec[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index2] := 2; + } + + testcase tc_recordof_indexed_with_recordof_and_array() runs on GeneralComp { + var RoIRoIRoIRoI v_rec := { + { + { + {0, 1}, + {2, 3} + }, + { + {4, 5}, + {6, 7} + } + }, + { + { + {8, 9}, + {10, 11} + }, + { + {12, 13}, + {14, 15} + } + } + } + var integer v_index[1] := {0}; + var integer v_index2[2] := {0, 1}; + var RoI1 v_roi1 := {0}; + var RoI2 v_roi2 := {0, 1}; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_index][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index2][v_index] := 99; + if (v_rec[v_index][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_index][v_index2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][v_index2][0] := 99; + if (v_rec[v_index][v_index2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][v_index2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_index][0][1][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_index][0][1][v_index] := 99; + if (v_rec[v_index][0][1][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_index][0][1][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_index2][v_index] := 99; + if (v_rec[v_roi1][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_roi2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2][v_index] := 99; + if (v_rec[v_roi1][v_roi2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_roi2][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2][v_roi1] := 99; + if (v_rec[v_roi1][v_roi2][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2][v_roi1] := 2; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2][0] := 99; + if (v_rec[v_roi1][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[0][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[0][v_roi2][0] := 99; + if (v_rec[0][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[0][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_rec[v_roi1][0][1][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][0][1][v_roi1] := 99; + if (v_rec[v_roi1][0][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][0][1][v_roi1] := 2; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_rec[v_roi1][1][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][1][1][v_roi1] := 99; + if (v_rec[v_roi1][1][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][1][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_rec[v_roi1][v_roi2[1]][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2[1]][1][v_roi1] := 99; + if (v_rec[v_roi1][v_roi2[1]][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2[1]][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 99; + if (v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [1][0][1][1] + if (v_rec[v_roi2[1]][v_index2][v_index2[1]] == 11) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_rec[v_roi2[1]][v_index2][v_index2[1]] := 99; + if (v_rec[v_roi2[1]][v_index2][v_index2[1]] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_rec[v_roi2[1]][v_index2][v_index2[1]] := 11; + } + + +//###########################################################################// +// Set of indexed with array or record of + + + testcase tc_setof_indexed_with_array() runs on GeneralComp { + + var SoISoI v_set := {{0, 1}, {2, 3}}; + var integer v_index[1] := { 1 } +//////////////////////////////////////////////////// + + if (v_set[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index] := {5, 6}; + if (v_set[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_set[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][0] := 99; + if (v_set[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_set[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[0][v_index] := 99; + if (v_set[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_set[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index] := 99; + if (v_set[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_set[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index2] := 99; + if (v_set[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index2] := 2; + } + + testcase tc_setof_indexed_with_recordof() runs on GeneralComp { + + var SoISoI v_set := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } +//////////////////////////////////////////////////// + + if (v_set[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index] := {5, 6}; + if (v_set[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_set[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][0] := 99; + if (v_set[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_set[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[0][v_index] := 99; + if (v_set[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_set[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index] := 99; + if (v_set[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_set[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index2] := 99; + if (v_set[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index2] := 2; + } + + testcase tc_setof_indexed_with_recordof_and_array() runs on GeneralComp { + var SoISoISoISoI v_set := { + { + { + {0, 1}, + {2, 3} + }, + { + {4, 5}, + {6, 7} + } + }, + { + { + {8, 9}, + {10, 11} + }, + { + {12, 13}, + {14, 15} + } + } + } + var integer v_index[1] := {0}; + var integer v_index2[2] := {0, 1}; + var RoI1 v_roi1 := {0}; + var RoI2 v_roi2 := {0, 1}; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_index][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index2][v_index] := 99; + if (v_set[v_index][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_index][v_index2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][v_index2][0] := 99; + if (v_set[v_index][v_index2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][v_index2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_index][0][1][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_index][0][1][v_index] := 99; + if (v_set[v_index][0][1][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_index][0][1][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_index2][v_index] := 99; + if (v_set[v_roi1][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_roi2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2][v_index] := 99; + if (v_set[v_roi1][v_roi2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_roi2][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2][v_roi1] := 99; + if (v_set[v_roi1][v_roi2][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2][v_roi1] := 2; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2][0] := 99; + if (v_set[v_roi1][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[0][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[0][v_roi2][0] := 99; + if (v_set[0][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[0][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_set[v_roi1][0][1][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][0][1][v_roi1] := 99; + if (v_set[v_roi1][0][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][0][1][v_roi1] := 2; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_set[v_roi1][1][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][1][1][v_roi1] := 99; + if (v_set[v_roi1][1][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][1][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_set[v_roi1][v_roi2[1]][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2[1]][1][v_roi1] := 99; + if (v_set[v_roi1][v_roi2[1]][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2[1]][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 99; + if (v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [1][0][1][1] + if (v_set[v_roi2[1]][v_index2][v_index2[1]] == 11) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_set[v_roi2[1]][v_index2][v_index2[1]] := 99; + if (v_set[v_roi2[1]][v_index2][v_index2[1]] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_set[v_roi2[1]][v_index2][v_index2[1]] := 11; + } + + +//###########################################################################// +// Array indexed with array or record of + + + testcase tc_array_indexed_with_array() runs on GeneralComp { + var integer v_arr[2][2] := {{0, 1}, {2, 3}}; + var integer v_index[1] := { 1 } +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {5, 6}; + if (v_arr[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0] := 99; + if (v_arr[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_arr[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_index] := 99; + if (v_arr[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := 99; + if (v_arr[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_arr[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := 99; + if (v_arr[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := 2; + } + + testcase tc_array_indexed_with_recordof() runs on GeneralComp { + var integer v_arr[2][2] := {{0, 1}, {2, 3}}; + var RoI1 v_index := { 1 } +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {2, 3}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {5, 6}; + if (v_arr[v_index] == {5, 6}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {2, 3}; + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0] := 99; + if (v_arr[v_index][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0] := 2; + +//////////////////////////////////////////////////// + + if (v_arr[0][v_index] == 1) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_index] := 99; + if (v_arr[0][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_index] := 1; + + +//////////////////////////////////////////////////// + + + if (v_arr[v_index][v_index] == 3) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := 99; + if (v_arr[v_index][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := 3; + +//////////////////////////////////////////////////// + + var integer v_index2[2] := {1, 0}; + if (v_arr[v_index2] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := 99; + if (v_arr[v_index2] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := 2; + } + + + testcase tc_array_indexed_with_recordof_and_array() runs on GeneralComp { + var integer v_arr[2][2][2][2] := { + { + { + {0, 1}, + {2, 3} + }, + { + {4, 5}, + {6, 7} + } + }, + { + { + {8, 9}, + {10, 11} + }, + { + {12, 13}, + {14, 15} + } + } + } + var integer v_index[1] := {0}; + var integer v_index2[2] := {0, 1}; + var RoI1 v_roi1 := {0}; + var RoI2 v_roi2 := {0, 1}; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_index][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index2][v_index] := 99; + if (v_arr[v_index][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_index][v_index2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index2][0] := 99; + if (v_arr[v_index][v_index2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_index][0][1][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0][1][v_index] := 99; + if (v_arr[v_index][0][1][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0][1][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_index2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_index2][v_index] := 99; + if (v_arr[v_roi1][v_index2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_index2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_roi2][v_index] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2][v_index] := 99; + if (v_arr[v_roi1][v_roi2][v_index] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2][v_index] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_roi2][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2][v_roi1] := 99; + if (v_arr[v_roi1][v_roi2][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2][v_roi1] := 2; + + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2][0] := 99; + if (v_arr[v_roi1][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[0][v_roi2][0] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_roi2][0] := 99; + if (v_arr[0][v_roi2][0] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_roi2][0] := 2; + +//////////////////////////////////////////////////// + + // [0][0][1][0] + if (v_arr[v_roi1][0][1][v_roi1] == 2) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][0][1][v_roi1] := 99; + if (v_arr[v_roi1][0][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][0][1][v_roi1] := 2; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_arr[v_roi1][1][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][1][1][v_roi1] := 99; + if (v_arr[v_roi1][1][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][1][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_arr[v_roi1][v_roi2[1]][1][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2[1]][1][v_roi1] := 99; + if (v_arr[v_roi1][v_roi2[1]][1][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2[1]][1][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [0][1][1][0] + if (v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 6) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 99; + if (v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi1][v_roi2[1]][v_index2[1]][v_roi1] := 6; + +//////////////////////////////////////////////////// + + // [1][0][1][1] + if (v_arr[v_roi2[1]][v_index2][v_index2[1]] == 11) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_roi2[1]][v_index2][v_index2[1]] := 99; + if (v_arr[v_roi2[1]][v_index2][v_index2[1]] == 99) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_roi2[1]][v_index2][v_index2[1]] := 11; + + } + + +//###########################################################################// +// Array of charstring indexed with record of + + testcase tc_arrayfstr_indexed_with_recordof() runs on GeneralComp { + var charstring v_arr[2][2] := {{"a", "b"}, {"c", "d"}}; + var RoI1 v_index := { 1 } + +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {"c", "d"}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {"x", "y"}; + if (v_arr[v_index] == {"x", "y"}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {"c", "d"}; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][0] == "c") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][0] := "x"; + if (v_arr[v_index][0] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][0] := "c"; + +//////////////////////////////////////////////////// + + if (v_arr[0][v_index] == "b") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[0][v_index] := "x"; + if (v_arr[0][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[0][v_index] := "b"; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][v_index] == "d") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := "x"; + if (v_arr[v_index][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := "d"; + +//////////////////////////////////////////////////// + + var RoI2 v_index2 := {1, 0}; + if (v_arr[v_index2] == "c") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := "x"; + if (v_arr[v_index2] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := "c"; + + } + + +//###########################################################################// +// Array of charstring indexed with special indexing array + + type integer MyInt; + + testcase tc_array_indexed_with_spec_array() runs on GeneralComp { + var charstring v_arr[2..4][2..4] := {{"a", "b", "c"}, {"d", "e", "f"}, {"g", "h", "i"}}; + var MyInt v_index[1..1] := {3}; + +//////////////////////////////////////////////////// + + if (v_arr[v_index] == {"d", "e", "f"}) { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index] := {"x", "y", "z"}; + if (v_arr[v_index] == {"x", "y", "z"}) { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index] := {"d", "e", "f"}; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][2] == "d") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][2] := "x"; + if (v_arr[v_index][2] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][2] := "d"; + +//////////////////////////////////////////////////// + + if (v_arr[2][v_index] == "b") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[2][v_index] := "x"; + if (v_arr[2][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[2][v_index] := "b"; + +//////////////////////////////////////////////////// + + if (v_arr[v_index][v_index] == "e") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index][v_index] := "x"; + if (v_arr[v_index][v_index] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index][v_index] := "e"; + +//////////////////////////////////////////////////// + + var MyInt v_index2[3..4] := {3, 2}; + if (v_arr[v_index2] == "d") { + setverdict(pass); + } else { + setverdict(fail); + } + + // Assignment test + v_arr[v_index2] := "x"; + if (v_arr[v_index2] == "x") { + setverdict(pass); + } else { + setverdict(fail); + } + // Restore to original value + v_arr[v_index2] := "d"; + } + + control { + execute(tc_recordof_indexed_with_array()); + execute(tc_recordof_indexed_with_recordof()); + execute(tc_recordof_indexed_with_recordof_and_array()); + + execute(tc_setof_indexed_with_array()); + execute(tc_setof_indexed_with_recordof()); + execute(tc_setof_indexed_with_recordof_and_array()); + + execute(tc_array_indexed_with_array()); + execute(tc_array_indexed_with_recordof()); + execute(tc_array_indexed_with_recordof_and_array()); + + execute(tc_arrayfstr_indexed_with_recordof()); + execute(tc_array_indexed_with_spec_array()); + } + +} diff --git a/regression_test/indexWithRecofArray/Makefile b/regression_test/indexWithRecofArray/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..afb9b4e0e6c0bc0bcfba35d3a8c855133175fee1 --- /dev/null +++ b/regression_test/indexWithRecofArray/Makefile @@ -0,0 +1,56 @@ +############################################################################## +# Copyright (c) 2000-2016 Ericsson Telecom AB +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# Szabo, Bence Janos +# +############################################################################## +TOPDIR := .. +include $(TOPDIR)/Makefile.regression + +.SUFFIXES: .ttcn .hh +.PHONY: all clean dep run + +TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) + +TTCN3_MODULES = IndexWithRecofArray.ttcn + +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) +GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) +ifdef CODE_SPLIT +GENERATED_SOURCES := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), .cc _seq.cc _set.cc _seqof.cc _setof.cc _union.cc)) +else ifdef SPLIT_TO_SLICES +POSTFIXES := $(foreach file, $(SPLIT_TO_SLICES), $(addsuffix $(file), _part_)) +POSTFIXES := $(foreach file, $(POSTFIXES), $(addprefix $(file), .cc)) +GENERATED_SOURCES2 := $(foreach file, $(GENERATED_SOURCES:.cc=), $(addprefix $(file), $(POSTFIXES))) +GENERATED_SOURCES += $(GENERATED_SOURCES2) +endif + +OBJECTS = $(GENERATED_SOURCES:.cc=.o) + +TARGET = IndexWithRecofArray$(EXESUFFIX) + +all: $(TARGET) + +$(TARGET): $(GENERATED_SOURCES) $(USER_SOURCES) + $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) -L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) + +.ttcn.cc .ttcn.hh: + $(TTCN3_COMPILER) $< + +clean distclean: + -rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ + $(GENERATED_SOURCES) *.log Makefile.bak + +dep: $(GENERATED_SOURCES) + makedepend $(CPPFLAGS) $(GENERATED_SOURCES) + +run: $(TARGET) + ./$^ + +.NOTPARALLEL: +