blob: ffaf69784eee8969d0ea866a83e9a757376423b1 [file] [log] [blame]
(* m2statement.def definition module for m2statement.cc.
Copyright (C) 2011-2025 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
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
<http://www.gnu.org/licenses/>. *)
DEFINITION MODULE FOR "C" m2statement ;
FROM gcctypes IMPORT location_t, tree ;
FROM CDataTypes IMPORT CharStar ;
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, truelabel: CharStar) ;
(*
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: CharStar) ;
(*
DeclareLabel - create a label, name.
*)
PROCEDURE DeclareLabel (location: location_t; name: CharStar) ;
(*
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<<op2) operation for a small sets. Large
sets call this routine to exclude the bit in the particular word.
op2 is a constant.
*)
PROCEDURE BuildExcludeVarConst (location: location_t; type: tree; op1: tree; op2: tree; is_lvalue: BOOLEAN; fieldno: INTEGER) ;
(*
BuildExcludeVarVar - builds the EXCL(varset, 1<<varel) operation for a small and large sets.
varel is a variable.
*)
PROCEDURE BuildExcludeVarVar (location: location_t; type: tree; varset: tree; varel: tree; is_lvalue: BOOLEAN; low: tree) ;
(*
BuildIncludeVarConst - builds the INCL(op1, 1<<op2) operation for a small sets. Large
sets call this routine to include the bit in the particular word.
op2 is a constant.
*)
PROCEDURE BuildIncludeVarConst (location: location_t; type: tree; op1: tree; op2: tree; is_lvalue: BOOLEAN; fieldno: INTEGER) ;
(*
BuildIncludeVarVar - builds the INCL(varset, 1<<varel) operation for a small and large sets.
op2 is a variable.
*)
PROCEDURE BuildIncludeVarVar (location: location_t; type: tree; varset: tree; varel: tree; is_lvalue: BOOLEAN; low: tree) ;
(*
BuildStart - creates a module initialization function. We make
this function public if it is not an inner module.
The linker will create a call list for all linked
modules which determines the initialization
sequence for all modules.
*)
PROCEDURE BuildStart (location: location_t; name: CharStar; inner_module: BOOLEAN) : tree ;
(*
BuildEnd - complete the initialisation function for this module.
*)
PROCEDURE BuildEnd (location: location_t; fndecl: tree; nested: BOOLEAN) ;
(*
BuildCallInner - call the inner module function. It has no parameters and no return value.
*)
PROCEDURE BuildCallInner (location: location_t; fndecl: tree) ;
(*
SetBeginLocation - sets the begin location for the function to obtain good debugging info.
*)
PROCEDURE SetBeginLocation (location: location_t) ;
(*
SetEndLocation - sets the end location for the function to obtain good debugging info.
*)
PROCEDURE SetEndLocation (location: location_t) ;
(*
BuildBuiltinCallTree - calls the builtin procedure.
*)
PROCEDURE BuildBuiltinCallTree (func: tree) : tree ;
(*
CopyByField - copy expr to des, if des is a record, union or an array
then check fields for GCC type equivalence and if necessary
call __builtin_strncpy and __builtin_memcpy.
This can occur if an expr contains a constant string
which is to be assigned into a field declared as
an ARRAY [0..n] OF CHAR.
*)
PROCEDURE CopyByField (location: location_t; des, expr: tree) ;
END m2statement.