1 /******************************************************************************
2 * Copyright (c) 2000-2016 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
14 ******************************************************************************/
16 type component Small {}
18 type record of anytype anysequence;
19 type record address { integer i }
20 template address t_a := { 1 }
22 type integer pie(3, 14, 15, 9, 26);
24 type record of integer intlist_0;
25 type intlist_0 intlist;
27 template anytype anytemp := { intlist := { 1, 2, 3 } }
28 const anytype anyconst := { intlist := { 1, 2, 3 } }
29 template anytype anytemp2 := { level2 := { level1 := { 1, 2, 3 } } }
30 const anytype anyconst2 := { level2 := { level1 := { 1, 2, 3 } } }
36 level2 level_2 optional
39 function dummy(in level3 p3_in, out level3 p3_out, inout level3 p3_inout)
42 v_l3.level_2.level1[0] := 17;
45 p3_out .level_2.level1[0] := a;
46 p3_in .level_2.level1[0] := a;
47 p3_inout.level_2.level1[0] := a;
49 // These two functions are "compile-only"
50 function dummy_template(in template level3 p3_in, out template level3 p3_out, inout template level3 p3_inout)
52 var template level3 v_l3;
53 v_l3.level_2.level1[0] := 17;
56 var template integer b;
57 p3_out .level_2.level1[a] := a;
58 p3_in .level_2.level1[a+1] := a;
59 p3_inout.level_2.level1[-a] := a; // it would be nice to flag this indexing as an error (a is still 42, even though it's not a const)
61 b := p3_out .level_2.level1[a];
62 b := p3_in .level_2.level1[a+1];
63 b := p3_inout.level_2.level1[-a]; // if a is const, this _is_ flagged as error
67 function fval(in anytype any_in, out anytype any_out) return anytype
70 var integer local := any_in.anysequence[3].anysequence[0].integer;
71 if (local == 13) { setverdict(pass); }
72 else { setverdict(fail); }
74 var level3 l3 := { level_2 := anyconst2.level2 }
76 l4 := { level_2 := anyconst2.level2 }
77 if (l3 == l4) { setverdict(pass); }
78 else { setverdict(fail); }
79 if (l3 == { level_2 := anyconst2.level2 }) { setverdict(pass); }
80 else { setverdict(fail); }
84 function ftmpl(in template anytype anytempl_in, out template anytype anytempl_out) return template anytype
86 anytempl_out := anytempl_in;
87 if (ischosen(anytempl_in.intlist)) {
88 var template intlist local_template := anytempl_in.intlist;
89 if( match(valueof(anytemp.intlist), local_template) ) { setverdict(pass); }
90 else { setverdict(fail); }
92 local_template := anytempl_in.intlist; // assign, not init
95 var template level3 l3 := { level_2 := anytempl_in.level2 }
96 var template level3 l4;
97 l4 := { level_2 := anytempl_in.level2 } // assign, not init
102 testcase values() runs on Small
105 // partial init is not enough anymore, checks became stricter due to HL51459
106 anyvar.anysequence[0] := { integer := 0 }
107 anyvar.anysequence[1] := { integer := 1 }
108 anyvar.anysequence[2] := { integer := 2 }
109 anyvar.anysequence[3] := { anysequence := { { integer := 13 } } }
110 //anyvar.address.i := 3;
112 var anytype anyret := fval(anyvar, anyout);
114 if (anyout == anyret) { setverdict(pass); }
115 else { setverdict(fail); }
118 testcase templates() runs on Small
120 var template anytype anytemplout;
121 var template anytype anytemplret := ftmpl(anytemp, anytemplout);
123 if (valueof(anytemplout) == valueof(anytemplret)) { setverdict(pass); }
124 else { setverdict(fail); }
126 anytemplret := ftmpl(anytemp2, anytemplout);
127 if (valueof(anytemplout) == valueof(anytemplret)) { setverdict(pass); }
128 else { setverdict(fail); }
133 var template intlist myvtemplist := anytemp.intlist
134 template intlist mytemplist := anytemp.intlist // Needs "AT_" prefix.
135 template intlist mytemplist2 := anytemp2.level2.level1 // Needs "AT_" prefix on level2, but not leve1
136 anyvar.anysequence[3] := { anysequence := { } }
137 anyvar.address.i := 3;
138 //(interpreted as module.function) anyvar.pie(2);
139 var integer io := anyvar.address.i
142 template anytype t_aa := { integer := 3 };
143 // PredefinedType----------^^^^^^^
144 // StructFieldRef----------^^^^^^^
145 // FieldReference----------^^^^^^^
146 //--------------------------------------^----- SimpleSpec as TemplateBody
147 // FieldRefce:= TemplateBody
149 // \-FieldSpecList--/
150 // \-TemplateBody---/
152 //template address t_ii := { pie(13) }
155 execute(templates());
161 extension "anytype anysequence,address,integer,intlist,level2"
162 /*syntax error belongs to function_test extension "anytype boolean,
163 integer,address,boolean intreg"*/