tests/syntax/identifier/identifier_as_function1.test
changeset 108 f9e001952488
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/syntax/identifier/identifier_as_function1.test	Sat Feb 09 08:57:14 2008 +0100
@@ -0,0 +1,164 @@
+(* Test whether the keyword XXXX may be used as an identifier for:
+ * FUNCTION declaration
+ *
+ * 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.
+ *)
+(* This file is specific for identifiers identical to IL operators.
+ *  See the note following the identifier list
+ *)
+(*
+#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
+#Task_initialisers #PRIORITY #SINGLE #INTERVAL
+*)
+
+(* NOTE: The identifier as a function test has some special cases.
+ *       Namely, when using IL operators as function names.
+ *       For example, if a function LD has been previoulsy defined,
+ *       The following IL code may be interpreted as either a 
+ *       function call or an IL operation
+ *         LD 10
+ *       Due to undefined situations as the above, our 
+ *       IEC compiler currently will always interpret IL operator identifiers.
+ *       inside IL code as an IL operator.
+ *       This means that calling, from IL code, of functions whose names
+ *       coincide with an IL operator is not possible.
+ *
+ *       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 FUNCTION declaration *)
+
+function XXXX : int
+ var_input
+  a_1, b_1: int;
+ end_var
+  XXXX := a_1 + b_1;
+end_function
+
+
+
+(* Calling of the function from within ST code *)
+function foo : int
+ var
+  c_1, d_1 : int;
+  e_1, f_1 : int;
+ end_var
+  d_1 := XXXX(c_1, d_1);
+  d_1 := XXXX(10, 20);
+  c_1 := XXXX(20, 22);
+  c_1 := XXXX(b_1 := e_1, a_1 := f_1);
+  c_1 := XXXX (a_1 := e_1, b_1 := f_1);
+end_function
+
+
+
+
+(* Calling of the function from within IL code *)
+(* NOTE: some legal identifiers, for ex. IL operators,
+ * will not actually be interpreted as a reference to
+ * the function, but rather as an IL operator.
+ * However, no error should occur, as the compiler is written
+ * to give priority to interpreting it as an IL operator.
+ *)
+
+(*
+function bar000 : int
+ var
+  e_1, f_1 : int;
+ end_var
+  XXXX 10
+  LD 20
+  XXXX 30
+  XXXX 10, 20
+  XXXX (
+    b_1 := 10,
+    a_1 := 20
+   )
+  XXXX(
+    b_1 := 10,
+    a_1 := 20
+   )
+  XXXX (
+    b_1 := 10
+   )
+  XXXX(
+    b_1 := 10
+   )
+end_function
+*)
+
+
+
+
+(* Checking whether the use of XXXX will confuse the logic 
+ * used to determine if a POU body is in IL or ST language.
+ *)
+
+(*
+function bar001 : int
+ var
+  e_1, f_1 : int;
+ end_var
+  XXXX 10
+end_function
+
+
+function bar002 : int
+ var
+  e_1, f_1 : int;
+ end_var
+  XXXX 10, 20
+end_function
+
+
+function bar003 : int
+ var
+  e_1, f_1 : int;
+ end_var
+  XXXX(
+    b_1 := 10,
+    a_1 := 20
+   )
+end_function
+
+
+function bar004 : int
+ var
+  e_1, f_1 : int;
+ end_var
+  XXXX (
+    b_1 := 10,
+    a_1 := 20
+   )
+end_function
+*)
+
+
+
+
+
+
+
+
+
+(* Checking whether the use of XXXX will confuse any other
+ * normal and correct IL or ST code.
+ *)
+{#include "basic_code.test"}
+
+