tests/syntax/identifier/identifier_as_function1.test
author Manuele Conti <conti.ma@alice.it>
Mon, 30 Jul 2012 22:59:00 +0200
changeset 622 eaa49b276e17
parent 108 f9e001952488
permissions -rwxr-xr-x
Add check bison version in configure.ac file.
To build correctly matiec we need bison greater or equals than 2.4 version.
Now the "configure" script is able to check if system has correctly requirements.
(* 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"}