blob: 3f602fbcedfa0b2e5a4895dc0e1924e9444e9528 [file] [log] [blame]
/* do not edit automatically generated by mc from decl. */
/* decl.def declaration nodes used to create the AST.
Copyright (C) 2015-2023 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.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/>. */
#if !defined (_decl_H)
# define _decl_H
#include "config.h"
#include "system.h"
# ifdef __cplusplus
extern "C" {
# endif
# if !defined (PROC_D)
# define PROC_D
typedef void (*PROC_t) (void);
typedef struct { PROC_t proc; } PROC;
# endif
# include "GnameKey.h"
# include "GsymbolKey.h"
# include "GmcReserved.h"
# include "GmcComment.h"
# if defined (_decl_C)
# define EXTERN
# else
# define EXTERN extern
# endif
#if !defined (decl_node_D)
# define decl_node_D
typedef void *decl_node;
#endif
typedef struct decl_isNodeF_p decl_isNodeF;
typedef unsigned int (*decl_isNodeF_t) (decl_node);
struct decl_isNodeF_p { decl_isNodeF_t proc; };
/*
getDeclaredMod - returns the token number associated with the nodes declaration
in the implementation or program module.
*/
EXTERN unsigned int decl_getDeclaredMod (decl_node n);
/*
getDeclaredDef - returns the token number associated with the nodes declaration
in the definition module.
*/
EXTERN unsigned int decl_getDeclaredDef (decl_node n);
/*
getFirstUsed - returns the token number associated with the first use of
node, n.
*/
EXTERN unsigned int decl_getFirstUsed (decl_node n);
/*
isDef - return TRUE if node, n, is a definition module.
*/
EXTERN unsigned int decl_isDef (decl_node n);
/*
isImp - return TRUE if node, n, is an implementation module.
*/
EXTERN unsigned int decl_isImp (decl_node n);
/*
isImpOrModule - returns TRUE if, n, is a program module or implementation module.
*/
EXTERN unsigned int decl_isImpOrModule (decl_node n);
/*
isVisited - returns TRUE if the node was visited.
*/
EXTERN unsigned int decl_isVisited (decl_node n);
/*
unsetVisited - unset the visited flag on a def/imp/module node.
*/
EXTERN void decl_unsetVisited (decl_node n);
/*
setVisited - set the visited flag on a def/imp/module node.
*/
EXTERN void decl_setVisited (decl_node n);
/*
setEnumsComplete - sets the field inside the def or imp or module, n.
*/
EXTERN void decl_setEnumsComplete (decl_node n);
/*
getEnumsComplete - gets the field from the def or imp or module, n.
*/
EXTERN unsigned int decl_getEnumsComplete (decl_node n);
/*
resetEnumPos - resets the index into the saved list of enums inside
module, n.
*/
EXTERN void decl_resetEnumPos (decl_node n);
/*
getNextEnum - returns the next enumeration node.
*/
EXTERN decl_node decl_getNextEnum (void);
/*
isModule - return TRUE if node, n, is a program module.
*/
EXTERN unsigned int decl_isModule (decl_node n);
/*
isMainModule - return TRUE if node, n, is the main module specified
by the source file. This might be a definition,
implementation or program module.
*/
EXTERN unsigned int decl_isMainModule (decl_node n);
/*
setMainModule - sets node, n, as the main module to be compiled.
*/
EXTERN void decl_setMainModule (decl_node n);
/*
setCurrentModule - sets node, n, as the current module being compiled.
*/
EXTERN void decl_setCurrentModule (decl_node n);
/*
lookupDef - returns a definition module node named, n.
*/
EXTERN decl_node decl_lookupDef (nameKey_Name n);
/*
lookupImp - returns an implementation module node named, n.
*/
EXTERN decl_node decl_lookupImp (nameKey_Name n);
/*
lookupModule - returns a module node named, n.
*/
EXTERN decl_node decl_lookupModule (nameKey_Name n);
/*
putDefForC - the definition module was defined FOR "C".
*/
EXTERN void decl_putDefForC (decl_node n);
/*
lookupInScope - looks up a symbol named, n, from, scope.
*/
EXTERN decl_node decl_lookupInScope (decl_node scope, nameKey_Name n);
/*
isConst - returns TRUE if node, n, is a const.
*/
EXTERN unsigned int decl_isConst (decl_node n);
/*
isType - returns TRUE if node, n, is a type.
*/
EXTERN unsigned int decl_isType (decl_node n);
/*
putType - places, exp, as the type alias to des.
TYPE des = exp ;
*/
EXTERN void decl_putType (decl_node des, decl_node exp);
/*
getType - returns the type associated with node, n.
*/
EXTERN decl_node decl_getType (decl_node n);
/*
skipType - skips over type aliases.
*/
EXTERN decl_node decl_skipType (decl_node n);
/*
putTypeHidden - marks type, des, as being a hidden type.
TYPE des ;
*/
EXTERN void decl_putTypeHidden (decl_node des);
/*
isTypeHidden - returns TRUE if type, n, is hidden.
*/
EXTERN unsigned int decl_isTypeHidden (decl_node n);
/*
hasHidden - returns TRUE if module, n, has a hidden type.
*/
EXTERN unsigned int decl_hasHidden (decl_node n);
/*
isVar - returns TRUE if node, n, is a type.
*/
EXTERN unsigned int decl_isVar (decl_node n);
/*
isTemporary - returns TRUE if node, n, is a variable and temporary.
*/
EXTERN unsigned int decl_isTemporary (decl_node n);
/*
isExported - returns TRUE if symbol, n, is exported from
the definition module.
*/
EXTERN unsigned int decl_isExported (decl_node n);
/*
getDeclScope - returns the node representing the
current declaration scope.
*/
EXTERN decl_node decl_getDeclScope (void);
/*
getScope - returns the scope associated with node, n.
*/
EXTERN decl_node decl_getScope (decl_node n);
/*
isLiteral - returns TRUE if, n, is a literal.
*/
EXTERN unsigned int decl_isLiteral (decl_node n);
/*
isConstSet - returns TRUE if, n, is a constant set.
*/
EXTERN unsigned int decl_isConstSet (decl_node n);
/*
isEnumerationField - returns TRUE if, n, is an enumeration field.
*/
EXTERN unsigned int decl_isEnumerationField (decl_node n);
/*
isEnumeration - returns TRUE if node, n, is an enumeration type.
*/
EXTERN unsigned int decl_isEnumeration (decl_node n);
/*
isUnbounded - returns TRUE if, n, is an unbounded array.
*/
EXTERN unsigned int decl_isUnbounded (decl_node n);
/*
isParameter - returns TRUE if, n, is a parameter.
*/
EXTERN unsigned int decl_isParameter (decl_node n);
/*
isVarParam - returns TRUE if, n, is a var parameter.
*/
EXTERN unsigned int decl_isVarParam (decl_node n);
/*
isParam - returns TRUE if, n, is a non var parameter.
*/
EXTERN unsigned int decl_isParam (decl_node n);
/*
isNonVarParam - is an alias to isParam.
*/
EXTERN unsigned int decl_isNonVarParam (decl_node n);
/*
addOptParameter - returns an optarg which has been created and added to
procedure node, proc. It has a name, id, and, type,
and an initial value, init.
*/
EXTERN decl_node decl_addOptParameter (decl_node proc, nameKey_Name id, decl_node type, decl_node init);
/*
isOptarg - returns TRUE if, n, is an optarg.
*/
EXTERN unsigned int decl_isOptarg (decl_node n);
/*
isRecord - returns TRUE if, n, is a record.
*/
EXTERN unsigned int decl_isRecord (decl_node n);
/*
isRecordField - returns TRUE if, n, is a record field.
*/
EXTERN unsigned int decl_isRecordField (decl_node n);
/*
isVarientField - returns TRUE if, n, is a varient field.
*/
EXTERN unsigned int decl_isVarientField (decl_node n);
/*
isArray - returns TRUE if, n, is an array.
*/
EXTERN unsigned int decl_isArray (decl_node n);
/*
isProcType - returns TRUE if, n, is a procedure type.
*/
EXTERN unsigned int decl_isProcType (decl_node n);
/*
isPointer - returns TRUE if, n, is a pointer.
*/
EXTERN unsigned int decl_isPointer (decl_node n);
/*
isProcedure - returns TRUE if, n, is a procedure.
*/
EXTERN unsigned int decl_isProcedure (decl_node n);
/*
isVarient - returns TRUE if, n, is a varient record.
*/
EXTERN unsigned int decl_isVarient (decl_node n);
/*
isSet - returns TRUE if, n, is a set type.
*/
EXTERN unsigned int decl_isSet (decl_node n);
/*
isSubrange - returns TRUE if, n, is a subrange type.
*/
EXTERN unsigned int decl_isSubrange (decl_node n);
/*
isZtype - returns TRUE if, n, is the Z type.
*/
EXTERN unsigned int decl_isZtype (decl_node n);
/*
isRtype - returns TRUE if, n, is the R type.
*/
EXTERN unsigned int decl_isRtype (decl_node n);
/*
makeConst - create, initialise and return a const node.
*/
EXTERN decl_node decl_makeConst (nameKey_Name n);
/*
putConst - places value, v, into node, n.
*/
EXTERN void decl_putConst (decl_node n, decl_node v);
/*
makeType - create, initialise and return a type node.
*/
EXTERN decl_node decl_makeType (nameKey_Name n);
/*
makeTypeImp - lookup a type in the definition module
and return it. Otherwise create a new type.
*/
EXTERN decl_node decl_makeTypeImp (nameKey_Name n);
/*
makeVar - create, initialise and return a var node.
*/
EXTERN decl_node decl_makeVar (nameKey_Name n);
/*
putVar - places, type, as the type for var.
*/
EXTERN void decl_putVar (decl_node var, decl_node type, decl_node decl);
/*
makeVarDecl - creates a variable declaration list from
identlist, i, and, type, in the current scope.
*/
EXTERN decl_node decl_makeVarDecl (decl_node i, decl_node type);
/*
makeEnum - creates an enumerated type and returns the node.
*/
EXTERN decl_node decl_makeEnum (void);
/*
makeEnumField - returns an enumeration field, named, n.
*/
EXTERN decl_node decl_makeEnumField (decl_node e, nameKey_Name n);
/*
makeSubrange - returns a subrange node, built from range: low..high.
*/
EXTERN decl_node decl_makeSubrange (decl_node low, decl_node high);
/*
putSubrangeType - assigns, type, to the subrange type, sub.
*/
EXTERN void decl_putSubrangeType (decl_node sub, decl_node type);
/*
makePointer - returns a pointer of, type, node.
*/
EXTERN decl_node decl_makePointer (decl_node type);
/*
makeSet - returns a set of, type, node.
*/
EXTERN decl_node decl_makeSet (decl_node type);
/*
makeArray - returns a node representing ARRAY subrange OF type.
*/
EXTERN decl_node decl_makeArray (decl_node subr, decl_node type);
/*
putUnbounded - sets array, n, as unbounded.
*/
EXTERN void decl_putUnbounded (decl_node n);
/*
makeRecord - creates and returns a record node.
*/
EXTERN decl_node decl_makeRecord (void);
/*
makeVarient - creates a new symbol, a varient symbol for record or varient field
symbol, r.
*/
EXTERN decl_node decl_makeVarient (decl_node r);
/*
addFieldsToRecord - adds fields, i, of type, t, into a record, r.
It returns, r.
*/
EXTERN decl_node decl_addFieldsToRecord (decl_node r, decl_node v, decl_node i, decl_node t);
/*
buildVarientSelector - builds a field of name, tag, of, type, t, varient, r.
*/
EXTERN void decl_buildVarientSelector (decl_node r, decl_node v, nameKey_Name tag, decl_node type);
/*
buildVarientFieldRecord - builds a varient field into a varient symbol, v.
The varient field is returned.
*/
EXTERN decl_node decl_buildVarientFieldRecord (decl_node v, decl_node p);
/*
getSymName - returns the name of symbol, n.
*/
EXTERN nameKey_Name decl_getSymName (decl_node n);
/*
import - attempts to add node, n, into the scope of module, m.
It might fail due to a name clash in which case the
previous named symbol is returned. On success, n,
is returned.
*/
EXTERN decl_node decl_import (decl_node m, decl_node n);
/*
lookupExported - attempts to lookup a node named, i, from definition
module, n. The node is returned if found.
NIL is returned if not found.
*/
EXTERN decl_node decl_lookupExported (decl_node n, nameKey_Name i);
/*
lookupSym - returns the symbol named, n, from the scope stack.
*/
EXTERN decl_node decl_lookupSym (nameKey_Name n);
/*
addImportedModule - add module, i, to be imported by, m.
If scoped then module, i, is added to the
module, m, scope.
*/
EXTERN void decl_addImportedModule (decl_node m, decl_node i, unsigned int scoped);
/*
setSource - sets the source filename for module, n, to s.
*/
EXTERN void decl_setSource (decl_node n, nameKey_Name s);
/*
getSource - returns the source filename for module, n.
*/
EXTERN nameKey_Name decl_getSource (decl_node n);
/*
getMainModule - returns the main module node.
*/
EXTERN decl_node decl_getMainModule (void);
/*
getCurrentModule - returns the current module being compiled.
*/
EXTERN decl_node decl_getCurrentModule (void);
/*
foreachDefModuleDo - foreach definition node, n, in the module universe,
call p (n).
*/
EXTERN void decl_foreachDefModuleDo (symbolKey_performOperation p);
/*
foreachModModuleDo - foreach implementation or module node, n, in the module universe,
call p (n).
*/
EXTERN void decl_foreachModModuleDo (symbolKey_performOperation p);
/*
enterScope - pushes symbol, n, to the scope stack.
*/
EXTERN void decl_enterScope (decl_node n);
/*
leaveScope - removes the top level scope and all enumeration transparent scopes.
*/
EXTERN void decl_leaveScope (void);
/*
makeProcedure - create, initialise and return a procedure node.
*/
EXTERN decl_node decl_makeProcedure (nameKey_Name n);
/*
putCommentDefProcedure - remembers the procedure comment (if it exists) as a
definition module procedure heading. NIL is placed
if there is no procedure comment available.
*/
EXTERN void decl_putCommentDefProcedure (decl_node n);
/*
putCommentModProcedure - remembers the procedure comment (if it exists) as an
implementation/program module procedure heading. NIL is placed
if there is no procedure comment available.
*/
EXTERN void decl_putCommentModProcedure (decl_node n);
/*
makeProcType - returns a proctype node.
*/
EXTERN decl_node decl_makeProcType (void);
/*
putReturnType - sets the return type of procedure or proctype, proc, to, type.
*/
EXTERN void decl_putReturnType (decl_node proc, decl_node type);
/*
putOptReturn - sets, proctype or procedure, proc, to have an optional return type.
*/
EXTERN void decl_putOptReturn (decl_node proc);
/*
makeVarParameter - returns a var parameter node with namelist and type.
Where the parameters are declared as l: type.
*/
EXTERN decl_node decl_makeVarParameter (decl_node l, decl_node type, decl_node proc, unsigned int isused);
/*
makeNonVarParameter - returns a non var parameter node with namelist and type.
Where the parameters are declared as l: type.
*/
EXTERN decl_node decl_makeNonVarParameter (decl_node l, decl_node type, decl_node proc, unsigned int isused);
/*
paramEnter - reset the parameter count.
*/
EXTERN void decl_paramEnter (decl_node n);
/*
paramLeave - set paramater checking to TRUE from now onwards.
*/
EXTERN void decl_paramLeave (decl_node n);
/*
makeIdentList - returns a node which will be used to maintain an ident list.
*/
EXTERN decl_node decl_makeIdentList (void);
/*
putIdent - places ident, i, into identlist, n.
*/
EXTERN unsigned int decl_putIdent (decl_node n, nameKey_Name i);
/*
addVarParameters - adds the identlist, i, of, type, to be VAR parameters
in procedure, n.
*/
EXTERN void decl_addVarParameters (decl_node n, decl_node i, decl_node type, unsigned int isused);
/*
addNonVarParameters - adds the identlist, i, of, type, to be parameters
in procedure, n.
*/
EXTERN void decl_addNonVarParameters (decl_node n, decl_node i, decl_node type, unsigned int isused);
/*
makeVarargs - returns a varargs node.
*/
EXTERN decl_node decl_makeVarargs (void);
/*
isVarargs - returns TRUE if, n, is a varargs node.
*/
EXTERN unsigned int decl_isVarargs (decl_node n);
/*
addParameter - adds a parameter, param, to procedure or proctype, proc.
*/
EXTERN void decl_addParameter (decl_node proc, decl_node param);
/*
makeBinaryTok - creates and returns a boolean type node with,
l, and, r, nodes.
*/
EXTERN decl_node decl_makeBinaryTok (mcReserved_toktype op, decl_node l, decl_node r);
/*
makeUnaryTok - creates and returns a boolean type node with,
e, node.
*/
EXTERN decl_node decl_makeUnaryTok (mcReserved_toktype op, decl_node e);
/*
makeComponentRef - build a componentref node which accesses, field,
within, record, rec.
*/
EXTERN decl_node decl_makeComponentRef (decl_node rec, decl_node field);
/*
makePointerRef - build a pointerref node which accesses, field,
within, pointer to record, ptr.
*/
EXTERN decl_node decl_makePointerRef (decl_node ptr, decl_node field);
/*
isPointerRef - returns TRUE if, n, is a pointerref node.
*/
EXTERN unsigned int decl_isPointerRef (decl_node n);
/*
makeDeRef - dereferences the pointer defined by, n.
*/
EXTERN decl_node decl_makeDeRef (decl_node n);
/*
makeArrayRef - build an arrayref node which access element,
index, in, array. array is a variable/expression/constant
which has a type array.
*/
EXTERN decl_node decl_makeArrayRef (decl_node array, decl_node index);
/*
getLastOp - return the right most non leaf node.
*/
EXTERN decl_node decl_getLastOp (decl_node n);
/*
getCardinal - returns the cardinal type node.
*/
EXTERN decl_node decl_getCardinal (void);
/*
makeLiteralInt - creates and returns a literal node based on an integer type.
*/
EXTERN decl_node decl_makeLiteralInt (nameKey_Name n);
/*
makeLiteralReal - creates and returns a literal node based on a real type.
*/
EXTERN decl_node decl_makeLiteralReal (nameKey_Name n);
/*
makeString - creates and returns a node containing string, n.
*/
EXTERN decl_node decl_makeString (nameKey_Name n);
/*
makeSetValue - creates and returns a setvalue node.
*/
EXTERN decl_node decl_makeSetValue (void);
/*
isSetValue - returns TRUE if, n, is a setvalue node.
*/
EXTERN unsigned int decl_isSetValue (decl_node n);
/*
putSetValue - assigns the type, t, to the set value, n. The
node, n, is returned.
*/
EXTERN decl_node decl_putSetValue (decl_node n, decl_node t);
/*
includeSetValue - includes the range l..h into the setvalue.
h might be NIL indicating that a single element
is to be included into the set.
n is returned.
*/
EXTERN decl_node decl_includeSetValue (decl_node n, decl_node l, decl_node h);
/*
getBuiltinConst - creates and returns a builtin const if available.
*/
EXTERN decl_node decl_getBuiltinConst (nameKey_Name n);
/*
makeExpList - creates and returns an expList node.
*/
EXTERN decl_node decl_makeExpList (void);
/*
isExpList - returns TRUE if, n, is an explist node.
*/
EXTERN unsigned int decl_isExpList (decl_node n);
/*
putExpList - places, expression, e, within the explist, n.
*/
EXTERN void decl_putExpList (decl_node n, decl_node e);
/*
makeConstExp - returns a constexp node.
*/
EXTERN decl_node decl_makeConstExp (void);
/*
getNextConstExp - returns the next constexp node.
*/
EXTERN decl_node decl_getNextConstExp (void);
/*
setConstExpComplete - sets the field inside the def or imp or module, n.
*/
EXTERN void decl_setConstExpComplete (decl_node n);
/*
fixupConstExp - assign fixup expression, e, into the argument of, c.
*/
EXTERN decl_node decl_fixupConstExp (decl_node c, decl_node e);
/*
resetConstExpPos - resets the index into the saved list of constexps inside
module, n.
*/
EXTERN void decl_resetConstExpPos (decl_node n);
/*
makeFuncCall - builds a function call to c with param list, n.
*/
EXTERN decl_node decl_makeFuncCall (decl_node c, decl_node n);
/*
makeStatementSequence - create and return a statement sequence node.
*/
EXTERN decl_node decl_makeStatementSequence (void);
/*
isStatementSequence - returns TRUE if node, n, is a statement sequence.
*/
EXTERN unsigned int decl_isStatementSequence (decl_node n);
/*
addStatement - adds node, n, as a statement to statememt sequence, s.
*/
EXTERN void decl_addStatement (decl_node s, decl_node n);
/*
addCommentBody - adds a body comment to a statement sequence node.
*/
EXTERN void decl_addCommentBody (decl_node n);
/*
addCommentAfter - adds an after comment to a statement sequence node.
*/
EXTERN void decl_addCommentAfter (decl_node n);
/*
addIfComments - adds the, body, and, after, comments to if node, n.
*/
EXTERN void decl_addIfComments (decl_node n, decl_node body, decl_node after);
/*
addElseComments - adds the, body, and, after, comments to an, if, or an elsif, node, n.
*/
EXTERN void decl_addElseComments (decl_node n, decl_node body, decl_node after);
/*
addIfEndComments - adds the, body, and, after, comments to an, if, node, n.
*/
EXTERN void decl_addIfEndComments (decl_node n, decl_node body, decl_node after);
/*
makeReturn - creates and returns a return node.
*/
EXTERN decl_node decl_makeReturn (void);
/*
isReturn - returns TRUE if node, n, is a return.
*/
EXTERN unsigned int decl_isReturn (decl_node n);
/*
putReturn - assigns node, e, as the expression on the return node.
*/
EXTERN void decl_putReturn (decl_node n, decl_node e);
/*
makeWhile - creates and returns a while node.
*/
EXTERN decl_node decl_makeWhile (void);
/*
putWhile - places an expression, e, and statement sequence, s, into the while
node, n.
*/
EXTERN void decl_putWhile (decl_node n, decl_node e, decl_node s);
/*
isWhile - returns TRUE if node, n, is a while.
*/
EXTERN unsigned int decl_isWhile (decl_node n);
/*
addWhileDoComment - adds body and after comments to while node, w.
*/
EXTERN void decl_addWhileDoComment (decl_node w, decl_node body, decl_node after);
/*
addWhileEndComment - adds body and after comments to the end of a while node, w.
*/
EXTERN void decl_addWhileEndComment (decl_node w, decl_node body, decl_node after);
/*
makeAssignment - creates and returns an assignment node.
The designator is, d, and expression, e.
*/
EXTERN decl_node decl_makeAssignment (decl_node d, decl_node e);
/*
putBegin - assigns statements, s, to be the normal part in
block, b. The block may be a procedure or module,
or implementation node.
*/
EXTERN void decl_putBegin (decl_node b, decl_node s);
/*
putFinally - assigns statements, s, to be the final part in
block, b. The block may be a module
or implementation node.
*/
EXTERN void decl_putFinally (decl_node b, decl_node s);
/*
makeExit - creates and returns an exit node.
*/
EXTERN decl_node decl_makeExit (decl_node l, unsigned int n);
/*
isExit - returns TRUE if node, n, is an exit.
*/
EXTERN unsigned int decl_isExit (decl_node n);
/*
makeLoop - creates and returns a loop node.
*/
EXTERN decl_node decl_makeLoop (void);
/*
isLoop - returns TRUE if, n, is a loop node.
*/
EXTERN unsigned int decl_isLoop (decl_node n);
/*
putLoop - places statement sequence, s, into loop, l.
*/
EXTERN void decl_putLoop (decl_node l, decl_node s);
/*
makeComment - creates and returns a comment node.
*/
EXTERN decl_node decl_makeComment (const char *a_, unsigned int _a_high);
/*
makeCommentS - creates and returns a comment node.
*/
EXTERN decl_node decl_makeCommentS (mcComment_commentDesc c);
/*
makeIf - creates and returns an if node. The if node
will have expression, e, and statement sequence, s,
as the then component.
*/
EXTERN decl_node decl_makeIf (decl_node e, decl_node s);
/*
isIf - returns TRUE if, n, is an if node.
*/
EXTERN unsigned int decl_isIf (decl_node n);
/*
makeElsif - creates and returns an elsif node.
This node has an expression, e, and statement
sequence, s.
*/
EXTERN decl_node decl_makeElsif (decl_node i, decl_node e, decl_node s);
/*
isElsif - returns TRUE if node, n, is an elsif node.
*/
EXTERN unsigned int decl_isElsif (decl_node n);
/*
putElse - the else is grafted onto the if/elsif node, i,
and the statement sequence will be, s.
*/
EXTERN void decl_putElse (decl_node i, decl_node s);
/*
makeFor - creates and returns a for node.
*/
EXTERN decl_node decl_makeFor (void);
/*
isFor - returns TRUE if node, n, is a for node.
*/
EXTERN unsigned int decl_isFor (decl_node n);
/*
putFor - assigns the fields of the for node with
ident, i,
start, s,
end, e,
increment, i,
statements, sq.
*/
EXTERN void decl_putFor (decl_node f, decl_node i, decl_node s, decl_node e, decl_node b, decl_node sq);
/*
makeRepeat - creates and returns a repeat node.
*/
EXTERN decl_node decl_makeRepeat (void);
/*
isRepeat - returns TRUE if node, n, is a repeat node.
*/
EXTERN unsigned int decl_isRepeat (decl_node n);
/*
putRepeat - places statements, s, and expression, e, into
repeat statement, n.
*/
EXTERN void decl_putRepeat (decl_node n, decl_node s, decl_node e);
/*
addRepeatComment - adds body and after comments to repeat node, r.
*/
EXTERN void decl_addRepeatComment (decl_node r, decl_node body, decl_node after);
/*
addUntilComment - adds body and after comments to the until section of a repeat node, r.
*/
EXTERN void decl_addUntilComment (decl_node r, decl_node body, decl_node after);
/*
makeCase - builds and returns a case statement node.
*/
EXTERN decl_node decl_makeCase (void);
/*
isCase - returns TRUE if node, n, is a case statement.
*/
EXTERN unsigned int decl_isCase (decl_node n);
/*
putCaseExpression - places expression, e, into case statement, n.
n is returned.
*/
EXTERN decl_node decl_putCaseExpression (decl_node n, decl_node e);
/*
putCaseElse - places else statement, e, into case statement, n.
n is returned.
*/
EXTERN decl_node decl_putCaseElse (decl_node n, decl_node e);
/*
putCaseStatement - places a caselist, l, and associated
statement sequence, s, into case statement, n.
n is returned.
*/
EXTERN decl_node decl_putCaseStatement (decl_node n, decl_node l, decl_node s);
/*
makeCaseLabelList - creates and returns a caselabellist node.
*/
EXTERN decl_node decl_makeCaseLabelList (decl_node l, decl_node s);
/*
isCaseLabelList - returns TRUE if, n, is a caselabellist.
*/
EXTERN unsigned int decl_isCaseLabelList (decl_node n);
/*
makeCaseList - creates and returns a case statement node.
*/
EXTERN decl_node decl_makeCaseList (void);
/*
isCaseList - returns TRUE if, n, is a case list.
*/
EXTERN unsigned int decl_isCaseList (decl_node n);
/*
putCaseRange - places the case range lo..hi into caselist, n.
*/
EXTERN decl_node decl_putCaseRange (decl_node n, decl_node lo, decl_node hi);
/*
makeRange - creates and returns a case range.
*/
EXTERN decl_node decl_makeRange (decl_node lo, decl_node hi);
/*
isRange - returns TRUE if node, n, is a range.
*/
EXTERN unsigned int decl_isRange (decl_node n);
/*
setNoReturn - sets noreturn field inside procedure.
*/
EXTERN void decl_setNoReturn (decl_node n, unsigned int value);
/*
dupExpr - duplicate the expression nodes, it does not duplicate
variables, literals, constants but only the expression
operators (including function calls and parameter lists).
*/
EXTERN decl_node decl_dupExpr (decl_node n);
/*
setLangC - set the target language as ansi C.
*/
EXTERN void decl_setLangC (void);
/*
setLangCP - set the target language as C++.
*/
EXTERN void decl_setLangCP (void);
/*
setLangM2 - set the target language as Modula-2.
*/
EXTERN void decl_setLangM2 (void);
/*
out - walks the tree of node declarations for the main module
and writes the output to the outputFile specified in
mcOptions. It outputs the declarations in the language
specified above.
*/
EXTERN void decl_out (void);
# ifdef __cplusplus
}
# endif
# undef EXTERN
#endif