(* m2statement.def definition module for m2statement.cc. Copyright (C) 2011-2023 Free Software Foundation, Inc. Contributed by Gaius Mulley . This file is part of GNU Modula-2. GNU Modula-2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Modula-2; see the file COPYING3. If not see . *) DEFINITION MODULE FOR "C" m2statement ; FROM SYSTEM IMPORT ADDRESS ; FROM m2tree IMPORT Tree ; FROM m2linemap IMPORT location_t ; FROM m2expr IMPORT BuildUnarySetFunction ; (* DoJump - jump to the appropriate label depending whether result of the expression is TRUE or FALSE. *) PROCEDURE DoJump (location: location_t; exp: Tree; falselabel: ADDRESS; truelabel: ADDRESS) ; (* BuildStartFunctionCode - generate function entry code. *) PROCEDURE BuildStartFunctionCode (location: location_t; fndecl: Tree; isexported: BOOLEAN; isinline: BOOLEAN) ; (* BuildEndFunctionCode - generates the function epilogue. *) PROCEDURE BuildEndFunctionCode (location: location_t; fndecl: Tree; nested: BOOLEAN) ; (* BuildReturnValueCode - generates the code associated with: RETURN( value ) *) PROCEDURE BuildReturnValueCode (location: location_t; fndecl: Tree; value: Tree) ; (* BuildPushFunctionContext - pushes the current function context. Maps onto push_function_context in ../function.c *) PROCEDURE BuildPushFunctionContext ; (* BuildPopFunctionContext - pops the current function context. Maps onto pop_function_context in ../function.c *) PROCEDURE BuildPopFunctionContext ; (* BuildAssignmentTree - builds the assignment of, des, and, expr. It returns, des. *) PROCEDURE BuildAssignmentTree (location: location_t; des, expr: Tree) : Tree ; (* BuildAssignmentStatement builds the assignment of, des, and, expr. *) PROCEDURE BuildAssignmentStatement (location: location_t; des, expr: Tree) ; (* BuildGoto - builds a goto operation. *) PROCEDURE BuildGoto (location: location_t; name: ADDRESS) ; (* DeclareLabel - create a label, name. *) PROCEDURE DeclareLabel (location: location_t; name: ADDRESS) ; (* BuildIfThenDoEnd - returns a tree which will only execute statement, s, if, condition, is true. *) PROCEDURE BuildIfThenDoEnd (condition: Tree; then_block: Tree) : Tree ; (* BuildIfThenElseEnd - returns a tree which will execute then_block or else_block depending upon, condition. *) PROCEDURE BuildIfThenElseEnd (condition: Tree; then_block: Tree; else_block: Tree) : Tree ; (* BuildParam - build a list of parameters, ready for a subsequent procedure call. *) PROCEDURE BuildParam (location: location_t; param: Tree) ; (* BuildFunctionCallTree - creates a procedure function call from a procedure and parameter list and the return type, rettype. No tree is returned as the tree is held in the last_function global variable. It is expected the BuildFunctValue is to be called after a call to BuildFunctionCallTree. *) PROCEDURE BuildFunctionCallTree (location: location_t; procedure: Tree; rettype: Tree) ; (* BuildProcedureCallTree - creates a procedure call from a procedure and parameter list and the return type, rettype. *) PROCEDURE BuildProcedureCallTree (location: location_t; procedure: Tree; rettype: Tree) : Tree ; (* BuildIndirectProcedureCallTree - creates a procedure call from a procedure and parameter list and the return type, rettype. *) PROCEDURE BuildIndirectProcedureCallTree (location: location_t; procedure: Tree; rettype: Tree) : Tree ; (* BuildFunctValue - generates code for value := last_function(foobar); *) PROCEDURE BuildFunctValue (location: location_t; value: Tree) : Tree ; (* BuildCall2 - builds a tree representing: function(arg1, arg2). *) PROCEDURE BuildCall2 (location: location_t; function, rettype, arg1, arg2: Tree) : Tree ; (* BuildCall3 - builds a tree representing: function(arg1, arg2, arg3). *) PROCEDURE BuildCall3 (location: location_t; function, rettype, arg1, arg2, arg3: Tree) : Tree ; (* SetLastFunction - set the last_function to, t. *) PROCEDURE SetLastFunction (t: Tree) ; (* GetLastFunction - returns, last_function. *) PROCEDURE GetLastFunction () : Tree ; (* GetParamTree - return parameter, i. *) PROCEDURE GetParamTree (call: Tree; i: CARDINAL) : Tree ; (* BuildTryFinally - returns a TRY_FINALL_EXPR with the call and cleanups attached. *) PROCEDURE BuildTryFinally (location: location_t; call: Tree; cleanups: Tree) : Tree ; (* BuildCleanUp - return a CLEANUP_POINT_EXPR which will clobber, param. *) PROCEDURE BuildCleanUp (param: Tree) : Tree ; (* BuildAsm - generates an inline assembler instruction. *) PROCEDURE BuildAsm (location: location_t; instr: Tree; isVolatile: BOOLEAN; isSimple: BOOLEAN; inputs: Tree; outputs: Tree; trash: Tree; labels: Tree) ; (* BuildUnaryForeachWordDo - provides the large set operators. Each word (or less) of the set can be calculated by unop. This procedure iterates over each word of the large set invoking the unop. *) PROCEDURE BuildUnaryForeachWordDo (location: location_t; type: Tree; op1: Tree; op2: Tree; unop: BuildUnarySetFunction; is_op1lvalue, is_op2lvalue, is_op1const, is_op2const: BOOLEAN) ; (* BuildExcludeVarConst - builds the EXCL(op1, 1<