diff -r ff5c92df0c78 -r f9e001952488 tests/syntax/identifier/identifier_as_variable1.test --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/syntax/identifier/identifier_as_variable1.test Sat Feb 09 08:57:14 2008 +0100 @@ -0,0 +1,389 @@ +(* Test whether the keyword XXXX may be used as an identifier for: + * variable name/identifier + * + * The XXXX names in the following code are merely a placeholder. + * They will be replaced by several identifiers before actual testing + * of the compiler. + *) + +(* The identifiers that will replace the XXXX + * must be placed on a line starting with # + * All identifiers preceded by # are ignored! + * The identifier list must be placed inside an IEC 61131-3 comment. + *) +(* +#IL_operators ANDN CAL CALC CALCN CD CLK CU IN JMP JMPC JMPCN LD LDN ORN PT PV R R1 RET RETC RETCN S S1 ST STN XORN +#SFC_qualifiers D DS L N P #R #S SD SL + NOTE: R and S are identical to IL operators!! +#Task_initialisers PRIORITY SINGLE INTERVAL +*) + +(* NOTE: The identifier as a variable test has some special cases. + * Namely, when using IL operators as variable names. + * Even though the syntax of the IL language would not result + * in ambiguities in the above case, our parser does not currently + * allow the use of variables (with names identical to IL + * operators) within IL code. + * + * The following test code must therefore consider two possibilities: + * - if the identifier under test is an IL operator + * - if the identifier under test is not an IL operator + * + * The test code in this file should be valid for all identifiers. + * Test code that is only valid for identifiers not identical to IL operators + * is placed in another test file (identifier_as_variable2.test). + *) + + + + +(* A helper FUNCTION BLOCK declaration *) +function_block foo_fb + var_input + a_1, b_1: int; + end_var + var_output + c_1, d_1: int; + end_var + c_1 := 10 + b_1; +end_function_block + + +(* A helper FUNCTION declaration *) +function foo_f1 : int + var_input + a_1, b_1: int; + end_var + var_output + c_1, d_1: int; + end_var + c_1 := 10 + b_1; +end_function + +(* Another helper FUNCTION declaration *) +function foo_f2 : int + var_input + a_1, b_1: foo_fb; + end_var + var_output + c_1, d_1: int; + end_var + c_1 := 10; +end_function + + + +(*********************************************************************) +(* Testing use of XXXX in several locations of variable declarations *) +(*********************************************************************) + +function bar01 : int + var_input + XXXX, a_1, b_1: int; + end_var + a_1 := 1; +end_function + +function_block bar02 + var_input + a_1, XXXX, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar03 + var_input + a_1, b_1, XXXX: int; + end_var + a_1 := 1; +end_function_block + + +function_block bar04 + var_output + XXXX, a_1, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar05 + var_output + a_1, XXXX, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar06 + var_output + a_1, b_1, XXXX: int; + end_var + a_1 := 1; +end_function_block + + +function_block bar07 + var_in_out + XXXX, a_1, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar08 + var_in_out + a_1, XXXX, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar09 + var_in_out + a_1, b_1, XXXX: int; + end_var + a_1 := 1; +end_function_block + +function_block bar10 + var_external + XXXX: int; + a_1 : int; + end_var + a_1 := 1; +end_function_block + +function_block bar11 + var_external + a_1 : int; + XXXX : int; + end_var + a_1 := 1; +end_function_block + +function_block bar12 + var + XXXX, a_1, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar13 + var + a_1, XXXX, b_1: int; + end_var + a_1 := 1; +end_function_block + +function_block bar14 + var + a_1, b_1, XXXX: int; + end_var + a_1 := 1; +end_function_block + + + +(************************************************) +(* Using XXXX as a standard variable name in ST *) +(************************************************) + +function_block bar90 + var + e_1, f_1 : int; + XXXX : int; + fb : foo_fb; + end_var + e_1 := bar01 (XXXX := 10); + e_1 := bar01 (a_1 := XXXX); + e_1 := bar01 (XXXX := XXXX); + fb(XXXX, 20); + fb (10, XXXX, e_1, f_1); + fb (a_1 := XXXX, b_1:=XXXX, c_1=>XXXX, d_1=>f_1); + fb(a_1 := 10, b_1:=20, c_1=>e_1, d_1=>XXXX); + fb (c_1=>XXXX, a_1:=20, d_1=>f_1); + XXXX := fb.c_1; + fb.a_1 := XXXX + XXXX * 2 * (XXXX) / foo_f1(XXXX, 10, XXXX, e_1) MOD XXXX MOD XXXX ** XXXX; + IF (XXXX >= 10) THEN XXXX := 10; END_IF; + CASE (XXXX + 10) OF + 10: XXXX := 10; + 10..20:XXXX := 20; + ELSE XXXX := 20; + END_CASE; + FOR XXXX := 10 TO 20 BY 2 DO + XXXX := XXXX + 1; + END_FOR; + FOR e_1 := XXXX TO 20 DO + XXXX := XXXX + 1; + END_FOR; + FOR e_1 := 10 TO XXXX BY 2 DO + XXXX := XXXX + 1; + END_FOR; + FOR e_1 := 10 TO XXXX DO + XXXX := XXXX + 1; + END_FOR; + FOR e_1 := 10 TO 20 BY XXXX DO + XXXX := XXXX + 1; + END_FOR; + WHILE (XXXX >= 10) DO + XXXX := 10; + END_WHILE; + REPEAT XXXX := 10; UNTIL (XXXX >= 10) END_REPEAT; +end_function_block + + + +(* Using XXXX as a function block instance/variable name in ST *) + +function_block bar91 + var + e_1, f_1 : int; + XXXX : foo_fb; + end_var + XXXX(e_1, 20); + XXXX (10, e_1, e_1, f_1); + XXXX (a_1 := e_1, b_1:=e_1 , c_1=>e_1, d_1=>f_1); + XXXX(a_1 := 10, b_1:=20, c_1=>e_1, d_1=>e_1); + XXXX (c_1=>e_1, a_1:=20, d_1=>f_1); + e_1 := XXXX.c_1; + XXXX.a_1 := e_1; + e_1 := foo_f2(XXXX, XXXX, e_1, f_1); + e_1 := foo_f2 (XXXX, XXXX); + e_1 := foo_f2 (c_1 => e_1, b_1 := XXXX, d_1 := 10, a_1 := XXXX); + e_1 := foo_f2 (b_1 := XXXX); +end_function_block + + + + +(************************************************) +(* Using XXXX as a standard variable name in IL *) +(************************************************) + +(* NOTE: Currently not supported for identifiers identical to IL operators. + * We therefore have two versions of this file, one with the following code + * commented out (used to test the identifiers that clash with IL operators) + * and a second with the following code included (used to test identifiers + * that do not clash with IL operators, such as PRIORITY, SINGLE, etc...) + *) + + +(* +function_block bar93 + var + e_1, f_1 : int; + end_var + + (* Calling function with input parameter named XXXX ** + bar01 ( + XXXX := 10 + ) +end_function_block +*) + + +(* +function_block bar99 +(...) +end_function_block +*) + + + + + + +(*************************************************************************************) +(* Using XXXX as a function block instance/variable/program name in a configuration. *) +(*************************************************************************************) + +(* a helper program *) +PROGRAM bar000 +VAR_INPUT + a_1, XXXX : BOOL; +END_VAR +VAR_OUTPUT + b_1 : BOOL; +END_VAR + a_1 := TRUE; +END_PROGRAM + + + (* using in program parameter *) +CONFIGURATION config01 + TASK fast(PRIORITY := 4); + PROGRAM foo WITH fast: + bar000(a_1 := TRUE, XXXX := FALSE); +END_CONFIGURATION + + + (* using as a program name *) +CONFIGURATION config02 + TASK fast(PRIORITY := 4); + PROGRAM XXXX WITH fast: + bar000(a_1 := TRUE, XXXX := FALSE); +END_CONFIGURATION + + + (* using as a resource name *) +CONFIGURATION config03 + RESOURCE XXXX on processor_type_1 + TASK fast(PRIORITY := 4); + PROGRAM foo WITH fast: + bar000(a_1 := TRUE, XXXX := FALSE); + END_RESOURCE +END_CONFIGURATION + + + (* using as a task name *) +CONFIGURATION config11 + TASK XXXX(PRIORITY := 4); + PROGRAM foo WITH XXXX: + bar000(a_1 := TRUE, XXXX := FALSE); +END_CONFIGURATION + + +CONFIGURATION config12 + TASK XXXX(SINGLE := 3, PRIORITY := 4); + PROGRAM P1 WITH XXXX: + bar000(a_1 := TRUE, XXXX := FALSE); +END_CONFIGURATION + + +CONFIGURATION config13 + TASK XXXX(INTERVAL := T#1s, PRIORITY := 4); + PROGRAM P1 WITH XXXX: + bar000(a_1 := TRUE, XXXX := FALSE); +END_CONFIGURATION + + +CONFIGURATION config14 + TASK XXXX(SINGLE := 3, INTERVAL := T#1s, PRIORITY := 4); + PROGRAM P1 WITH XXXX: + bar000(a_1 := TRUE, XXXX := FALSE); +END_CONFIGURATION + + + (* using as a variable name *) +CONFIGURATION config21 + VAR_GLOBAL + XXXX : bool; + END_VAR + TASK fast(PRIORITY := 4); + PROGRAM foo WITH fast: + bar000(a_1 := XXXX, b_1 => XXXX, XXXX := XXXX); +END_CONFIGURATION + + + + + + + + + + + + +(* Checking whether the use of XXXX will confuse any other + * normal and correct IL or ST code. + *) +{#include "basic_code.test" } +