mario@108: (* This file includes normal standard ST and IL code.
mario@108:  * This code is then included into other tests, once
mario@108:  * possibly strange things have been defined.
mario@108:  *
mario@108:  * Including this normal code will test whether the strange
mario@108:  * things somehow breack the correct parsing and compiling
mario@108:  * of normal code.
mario@108:  *
mario@108:  * Code in this file must not use the XXXX identfier!
mario@108:  *)
mario@108: 
mario@108: 
mario@108: 
mario@108: (***************************************************************************)
mario@108: (* Test if generic IL code is not affected by any previous declarations... *)
mario@108: (***************************************************************************)
mario@108: 
mario@108: 
mario@108: (* Test each IL operator *)
mario@108: (* Since our compiler needs to distinguish
mario@108:  * between IL and ST code, we place each IL
mario@108:  * operator in a distinct function, to test whether
mario@108:  * the use of that IL operator as the first IL
mario@108:  * instruction does not confuse the logic
mario@108:  * use to determine whether ST or IL is being parsed.
mario@108:  *)
mario@108: 
mario@108: function bar0005 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  & 10
mario@108: end_function
mario@108: 
mario@108: 
mario@108: 
mario@108: function bar0006 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  &N 10
mario@108: end_function
mario@108: 
mario@108: 
mario@108: 
mario@108: function bar0007 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  ADD 10
mario@108: end_function
mario@108: 
mario@108: 
mario@108: 
mario@108: function bar0008 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  AND TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0009 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  ANDN TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function_block bar0010
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : TP;
mario@108:  end_var
mario@108:  CAL tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0011
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : TP;
mario@108:  end_var
mario@108:  CALC tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0012
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : TP;
mario@108:  end_var
mario@108:  CALCN tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0013
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : CTUD;
mario@108:  end_var
mario@108:  CU tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0014
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : CTUD;
mario@108:  end_var
mario@108:  CD tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0015
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : R_TRIG;
mario@108:  end_var
mario@108:  CLK tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function bar0016 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  DIV e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0017 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  EQ e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0018 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  GE e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0019 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  GT e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function_block bar0020
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : TP;
mario@108:  end_var
mario@108:  IN tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function bar0021 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  JMP ll
mario@108:  ll: LD FALSE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: 
mario@108: function bar0022 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  JMPC ll
mario@108:  ll: LD FALSE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0023 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  JMPCN ll
mario@108:  ll: LD FALSE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: 
mario@108: function bar0024 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  LD TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0025 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  LDN TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0026 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  LE e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0027 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  LT e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0028 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  MOD e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0029 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  MUL e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0030 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  NE e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0031 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  NOT TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0032 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  OR TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0033 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  ORN TRUE
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function_block bar0034
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : TP;
mario@108:  end_var
mario@108:  PT tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0035
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : CTUD;
mario@108:  end_var
mario@108:  PV tt
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function bar0036 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  R e_1     (* IL operand *)
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function_block bar0037
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : SR;
mario@108:  end_var
mario@108:  R tt     (* FB call *)
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function_block bar0038
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : SR;
mario@108:  end_var
mario@108:  R1 tt     (* FB call *)
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function bar0039 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  RET
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0040 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  RETC
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0041 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  RETCN
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0042 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  S e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function_block bar0043
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   tt : SR;
mario@108:  end_var
mario@108:  S1 tt     (* FB call *)
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: function bar0044 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  ST e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0045 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  STN e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0046 : int
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:  end_var
mario@108:  SUB e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0047 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  XOR e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: function bar0048 : int
mario@108:  var
mario@108:   e_1, f_1 : bool;
mario@108:  end_var
mario@108:  XORN e_1
mario@108: end_function
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: (***************************************************************************)
mario@108: (* Test if generic ST code is not affected by any previous declarations... *)
mario@108: (***************************************************************************)
mario@108: 
mario@108: (* A helper FUNCTION BLOCK declaration *)
mario@108: function_block bar1000
mario@108:  var_input
mario@108:   a_1, b_1: int;
mario@108:  end_var
mario@108:  var_output
mario@108:   c_1, d_1: int;
mario@108:  end_var
mario@108:   c_1 := 10 + b_1;
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: (* A FUNCTION declaration *)
mario@108: function bar1001 : int
mario@108:  var_input
mario@108:   a_1, b_1: int;
mario@108:  end_var
mario@108:  var_output
mario@108:   c_1, d_1: int;
mario@108:  end_var
mario@108:   c_1 := 10 + b_1;
mario@108: end_function
mario@108: 
mario@108: 
mario@108: (* Generic ST code *)
mario@108: 
mario@108: function_block bar1002
mario@108:  var
mario@108:   e_1, f_1 : int;
mario@108:   g_1 : int;
mario@108:   fb : bar1000;
mario@108:  end_var
mario@108:   fb(g_1, 20);
mario@108:   fb (10, g_1, e_1, f_1);
mario@108:   fb (a_1 := g_1, b_1:=g_1, c_1=>g_1, d_1=>f_1);
mario@108:   fb(a_1 := 10, b_1:=20, c_1=>e_1, d_1=>g_1);
mario@108:   fb (c_1=>g_1, a_1:=20, d_1=>f_1);
mario@108:   g_1 := fb.c_1;
mario@108:   fb.a_1 := g_1 + g_1 * 2 * (g_1) / bar1001(g_1, 10, g_1, e_1) MOD g_1 MOD g_1 ** g_1;
mario@108:   IF (g_1 >= 10) THEN g_1 := 10; END_IF;
mario@108:   CASE (g_1 + 10) OF
mario@108:     10: g_1 := 10; 
mario@108:     10..20:g_1 := 20;
mario@108:     ELSE g_1 := 20;
mario@108:   END_CASE;
mario@108:   FOR g_1 := 10 TO 20 BY 2 DO
mario@108:     g_1 := g_1 + 1;
mario@108:   END_FOR;
mario@108:   FOR e_1 := g_1 TO 20 DO
mario@108:     g_1 := g_1 + 1;
mario@108:   END_FOR;
mario@108:   FOR e_1 := 10 TO g_1 BY 2 DO
mario@108:     g_1 := g_1 + 1;
mario@108:   END_FOR;
mario@108:   FOR e_1 := 10 TO g_1 DO
mario@108:     g_1 := g_1 + 1;
mario@108:   END_FOR;
mario@108:   FOR e_1 := 10 TO 20 BY g_1 DO
mario@108:     g_1 := g_1 + 1;
mario@108:   END_FOR;
mario@108:   WHILE (g_1 >= 10) DO 
mario@108:     g_1 := 10; 
mario@108:   END_WHILE;
mario@108:   REPEAT g_1 := 10; UNTIL (g_1 >= 10) END_REPEAT;
mario@108: end_function_block
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: (****************************************************************************)
mario@108: (* Test if generic SFC code is not affected by any previous declarations... *)
mario@108: (****************************************************************************)
mario@108: 
mario@108: PROGRAM bar2001
mario@108:   VAR
mario@108:     QX1 AT %QX1 : BOOL := 1;
mario@108:     QX2 AT %QX2 : BOOL := 0;
mario@108:     QX3 AT %QX3 : BOOL;
mario@108:     IX1 AT %IX1 : BOOL;
mario@108:     IX2 AT %IX2 : BOOL;
mario@108:     IX3 AT %IX3 : BOOL;
mario@108:   END_VAR
mario@108:   VAR
mario@108:     delta_1 : TIME := T#1s;
mario@108:   END_VAR
mario@108: 
mario@108:   INITIAL_STEP GO:
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM GO TO STEP1
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP STEP1:
mario@108:     ONSTEP1();
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION ONSTEP1:
mario@108:     QX1 := TRUE;
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION (PRIORITY := 4) FROM STEP1 TO STEP2
mario@108:     := IX2 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP STEP2:
mario@108:     INLINE1(D, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE1:
mario@108:     QX1 := QX2 XOR QX1; QX2 := NOT QX2;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION transition_id1 FROM STEP2 TO A1
mario@108:     := QX1 = FALSE AND QX2 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP A1:
mario@108:     INLINE2(DS, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE2:
mario@108:     IX1 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION transition_id2 (PRIORITY := 3) FROM A1 TO STEP2
mario@108:     := IX1 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM STEP2 TO (D1, D2, D3)
mario@108:     := QX1 = TRUE AND QX2 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP D1:
mario@108:     INLINE5(L, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE5:
mario@108:     QX1 := FALSE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM D1 TO E1
mario@108:     := NOT ( QX1 OR QX2 OR QX3 );
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP E1:
mario@108:     INLINE8(N);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE8:
mario@108:     QX1 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM (E1, E2, E3) TO GO
mario@108:     := QX1 AND QX2 AND QX3;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP D2:
mario@108:     INLINE6(P);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE6:
mario@108:     QX2 := FALSE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM D2 TO E2
mario@108:     := NOT ( QX1 OR QX2 OR QX3 );
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP E2:
mario@108:     INLINE9(R);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE9:
mario@108:     QX2 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   STEP D3:
mario@108:     INLINE7(S);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE7:
mario@108:     QX2 := FALSE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM D3 TO E3
mario@108:     := NOT ( QX1 OR QX2 OR QX3 );
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP E3:
mario@108:     INLINE10(SD, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE10:
mario@108:     QX3 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM STEP2 TO A3
mario@108:     := QX1 = TRUE AND QX2 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP A3:
mario@108:     INLINE4(SL, T#1s);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE4:
mario@108:     IX1 := TRUE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM A3 TO STEP2
mario@108:     := IX1 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   TRANSITION FROM STEP2 TO A2
mario@108:     := QX1 = FALSE AND QX2 = TRUE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP A2:
mario@108:     INLINE3(L, delta_1);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE3:
mario@108:     IX1 := FALSE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM A2 TO STEP2
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP A01:
mario@108:     INLINE01(L, delta_1, IX1, QX1);
mario@108:   END_STEP
mario@108: 
mario@108:   ACTION INLINE01:
mario@108:     IX1 := FALSE;
mario@108:   END_ACTION
mario@108: 
mario@108:   TRANSITION FROM STEP2 TO A01
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: 
mario@108:   STEP A02:
mario@108:     INLINE01(L, delta_1, IX1, QX1);
mario@108:     INLINE1 (L, delta_1, IX1, QX1);
mario@108:     INLINE2 (S);
mario@108:     INLINE3 ();
mario@108:   END_STEP
mario@108: 
mario@108:   TRANSITION FROM STEP2 TO A02
mario@108:     := IX1 = FALSE;
mario@108:   END_TRANSITION
mario@108: END_PROGRAM
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: 
mario@108: (*********************************************************************************)
mario@108: (* Test if generic CONFIGURATION is not affected by any previous declarations... *)
mario@108: (*********************************************************************************)
mario@108: 
mario@108: CONFIGURATION CONF0001
mario@108:   RESOURCE STD_RESSOURCE ON BEREMIZ
mario@108:     TASK STD_TASK(INTERVAL := t#100ms,PRIORITY := 0);
mario@108:     PROGRAM MAIN_INSTANCE : bar2001;
mario@108:   END_RESOURCE
mario@108: END_CONFIGURATION