1 /* do not edit automatically generated by mc from decl. */
2 /* decl.def declaration nodes used to create the AST.
4 Copyright (C) 2015-2023 Free Software Foundation, Inc.
5 Contributed by Gaius Mulley <gaius@glam.ac.uk>.
7 This file is part of GNU Modula-2.
9 GNU Modula-2 is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 GNU Modula-2 is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GNU Modula-2; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 #if !defined (_decl_H)
32 # if !defined (PROC_D)
34 typedef void (*PROC_t
) (void);
35 typedef struct { PROC_t proc
; } PROC
;
38 # include "GnameKey.h"
39 # include "GsymbolKey.h"
40 # include "GmcReserved.h"
41 # include "GmcComment.h"
43 # if defined (_decl_C)
46 # define EXTERN extern
49 #if !defined (decl_node_D)
51 typedef void *decl_node
;
54 typedef struct decl_isNodeF_p decl_isNodeF
;
56 typedef unsigned int (*decl_isNodeF_t
) (decl_node
);
57 struct decl_isNodeF_p
{ decl_isNodeF_t proc
; };
61 getDeclaredMod - returns the token number associated with the nodes declaration
62 in the implementation or program module.
65 EXTERN
unsigned int decl_getDeclaredMod (decl_node n
);
68 getDeclaredDef - returns the token number associated with the nodes declaration
69 in the definition module.
72 EXTERN
unsigned int decl_getDeclaredDef (decl_node n
);
75 getFirstUsed - returns the token number associated with the first use of
79 EXTERN
unsigned int decl_getFirstUsed (decl_node n
);
82 isDef - return TRUE if node, n, is a definition module.
85 EXTERN
unsigned int decl_isDef (decl_node n
);
88 isImp - return TRUE if node, n, is an implementation module.
91 EXTERN
unsigned int decl_isImp (decl_node n
);
94 isImpOrModule - returns TRUE if, n, is a program module or implementation module.
97 EXTERN
unsigned int decl_isImpOrModule (decl_node n
);
100 isVisited - returns TRUE if the node was visited.
103 EXTERN
unsigned int decl_isVisited (decl_node n
);
106 unsetVisited - unset the visited flag on a def/imp/module node.
109 EXTERN
void decl_unsetVisited (decl_node n
);
112 setVisited - set the visited flag on a def/imp/module node.
115 EXTERN
void decl_setVisited (decl_node n
);
118 setEnumsComplete - sets the field inside the def or imp or module, n.
121 EXTERN
void decl_setEnumsComplete (decl_node n
);
124 getEnumsComplete - gets the field from the def or imp or module, n.
127 EXTERN
unsigned int decl_getEnumsComplete (decl_node n
);
130 resetEnumPos - resets the index into the saved list of enums inside
134 EXTERN
void decl_resetEnumPos (decl_node n
);
137 getNextEnum - returns the next enumeration node.
140 EXTERN decl_node
decl_getNextEnum (void);
143 isModule - return TRUE if node, n, is a program module.
146 EXTERN
unsigned int decl_isModule (decl_node n
);
149 isMainModule - return TRUE if node, n, is the main module specified
150 by the source file. This might be a definition,
151 implementation or program module.
154 EXTERN
unsigned int decl_isMainModule (decl_node n
);
157 setMainModule - sets node, n, as the main module to be compiled.
160 EXTERN
void decl_setMainModule (decl_node n
);
163 setCurrentModule - sets node, n, as the current module being compiled.
166 EXTERN
void decl_setCurrentModule (decl_node n
);
169 lookupDef - returns a definition module node named, n.
172 EXTERN decl_node
decl_lookupDef (nameKey_Name n
);
175 lookupImp - returns an implementation module node named, n.
178 EXTERN decl_node
decl_lookupImp (nameKey_Name n
);
181 lookupModule - returns a module node named, n.
184 EXTERN decl_node
decl_lookupModule (nameKey_Name n
);
187 putDefForC - the definition module was defined FOR "C".
190 EXTERN
void decl_putDefForC (decl_node n
);
193 lookupInScope - looks up a symbol named, n, from, scope.
196 EXTERN decl_node
decl_lookupInScope (decl_node scope
, nameKey_Name n
);
199 isConst - returns TRUE if node, n, is a const.
202 EXTERN
unsigned int decl_isConst (decl_node n
);
205 isType - returns TRUE if node, n, is a type.
208 EXTERN
unsigned int decl_isType (decl_node n
);
211 putType - places, exp, as the type alias to des.
215 EXTERN
void decl_putType (decl_node des
, decl_node exp
);
218 getType - returns the type associated with node, n.
221 EXTERN decl_node
decl_getType (decl_node n
);
224 skipType - skips over type aliases.
227 EXTERN decl_node
decl_skipType (decl_node n
);
230 putTypeHidden - marks type, des, as being a hidden type.
234 EXTERN
void decl_putTypeHidden (decl_node des
);
237 isTypeHidden - returns TRUE if type, n, is hidden.
240 EXTERN
unsigned int decl_isTypeHidden (decl_node n
);
243 hasHidden - returns TRUE if module, n, has a hidden type.
246 EXTERN
unsigned int decl_hasHidden (decl_node n
);
249 isVar - returns TRUE if node, n, is a type.
252 EXTERN
unsigned int decl_isVar (decl_node n
);
255 isTemporary - returns TRUE if node, n, is a variable and temporary.
258 EXTERN
unsigned int decl_isTemporary (decl_node n
);
261 isExported - returns TRUE if symbol, n, is exported from
262 the definition module.
265 EXTERN
unsigned int decl_isExported (decl_node n
);
268 getDeclScope - returns the node representing the
269 current declaration scope.
272 EXTERN decl_node
decl_getDeclScope (void);
275 getScope - returns the scope associated with node, n.
278 EXTERN decl_node
decl_getScope (decl_node n
);
281 isLiteral - returns TRUE if, n, is a literal.
284 EXTERN
unsigned int decl_isLiteral (decl_node n
);
287 isConstSet - returns TRUE if, n, is a constant set.
290 EXTERN
unsigned int decl_isConstSet (decl_node n
);
293 isEnumerationField - returns TRUE if, n, is an enumeration field.
296 EXTERN
unsigned int decl_isEnumerationField (decl_node n
);
299 isEnumeration - returns TRUE if node, n, is an enumeration type.
302 EXTERN
unsigned int decl_isEnumeration (decl_node n
);
305 isUnbounded - returns TRUE if, n, is an unbounded array.
308 EXTERN
unsigned int decl_isUnbounded (decl_node n
);
311 isParameter - returns TRUE if, n, is a parameter.
314 EXTERN
unsigned int decl_isParameter (decl_node n
);
317 isVarParam - returns TRUE if, n, is a var parameter.
320 EXTERN
unsigned int decl_isVarParam (decl_node n
);
323 isParam - returns TRUE if, n, is a non var parameter.
326 EXTERN
unsigned int decl_isParam (decl_node n
);
329 isNonVarParam - is an alias to isParam.
332 EXTERN
unsigned int decl_isNonVarParam (decl_node n
);
335 addOptParameter - returns an optarg which has been created and added to
336 procedure node, proc. It has a name, id, and, type,
337 and an initial value, init.
340 EXTERN decl_node
decl_addOptParameter (decl_node proc
, nameKey_Name id
, decl_node type
, decl_node init
);
343 isOptarg - returns TRUE if, n, is an optarg.
346 EXTERN
unsigned int decl_isOptarg (decl_node n
);
349 isRecord - returns TRUE if, n, is a record.
352 EXTERN
unsigned int decl_isRecord (decl_node n
);
355 isRecordField - returns TRUE if, n, is a record field.
358 EXTERN
unsigned int decl_isRecordField (decl_node n
);
361 isVarientField - returns TRUE if, n, is a varient field.
364 EXTERN
unsigned int decl_isVarientField (decl_node n
);
367 isArray - returns TRUE if, n, is an array.
370 EXTERN
unsigned int decl_isArray (decl_node n
);
373 isProcType - returns TRUE if, n, is a procedure type.
376 EXTERN
unsigned int decl_isProcType (decl_node n
);
379 isPointer - returns TRUE if, n, is a pointer.
382 EXTERN
unsigned int decl_isPointer (decl_node n
);
385 isProcedure - returns TRUE if, n, is a procedure.
388 EXTERN
unsigned int decl_isProcedure (decl_node n
);
391 isVarient - returns TRUE if, n, is a varient record.
394 EXTERN
unsigned int decl_isVarient (decl_node n
);
397 isSet - returns TRUE if, n, is a set type.
400 EXTERN
unsigned int decl_isSet (decl_node n
);
403 isSubrange - returns TRUE if, n, is a subrange type.
406 EXTERN
unsigned int decl_isSubrange (decl_node n
);
409 isZtype - returns TRUE if, n, is the Z type.
412 EXTERN
unsigned int decl_isZtype (decl_node n
);
415 isRtype - returns TRUE if, n, is the R type.
418 EXTERN
unsigned int decl_isRtype (decl_node n
);
421 makeConst - create, initialise and return a const node.
424 EXTERN decl_node
decl_makeConst (nameKey_Name n
);
427 putConst - places value, v, into node, n.
430 EXTERN
void decl_putConst (decl_node n
, decl_node v
);
433 makeType - create, initialise and return a type node.
436 EXTERN decl_node
decl_makeType (nameKey_Name n
);
439 makeTypeImp - lookup a type in the definition module
440 and return it. Otherwise create a new type.
443 EXTERN decl_node
decl_makeTypeImp (nameKey_Name n
);
446 makeVar - create, initialise and return a var node.
449 EXTERN decl_node
decl_makeVar (nameKey_Name n
);
452 putVar - places, type, as the type for var.
455 EXTERN
void decl_putVar (decl_node var
, decl_node type
, decl_node decl
);
458 makeVarDecl - creates a variable declaration list from
459 identlist, i, and, type, in the current scope.
462 EXTERN decl_node
decl_makeVarDecl (decl_node i
, decl_node type
);
465 makeEnum - creates an enumerated type and returns the node.
468 EXTERN decl_node
decl_makeEnum (void);
471 makeEnumField - returns an enumeration field, named, n.
474 EXTERN decl_node
decl_makeEnumField (decl_node e
, nameKey_Name n
);
477 makeSubrange - returns a subrange node, built from range: low..high.
480 EXTERN decl_node
decl_makeSubrange (decl_node low
, decl_node high
);
483 putSubrangeType - assigns, type, to the subrange type, sub.
486 EXTERN
void decl_putSubrangeType (decl_node sub
, decl_node type
);
489 makePointer - returns a pointer of, type, node.
492 EXTERN decl_node
decl_makePointer (decl_node type
);
495 makeSet - returns a set of, type, node.
498 EXTERN decl_node
decl_makeSet (decl_node type
);
501 makeArray - returns a node representing ARRAY subrange OF type.
504 EXTERN decl_node
decl_makeArray (decl_node subr
, decl_node type
);
507 putUnbounded - sets array, n, as unbounded.
510 EXTERN
void decl_putUnbounded (decl_node n
);
513 makeRecord - creates and returns a record node.
516 EXTERN decl_node
decl_makeRecord (void);
519 makeVarient - creates a new symbol, a varient symbol for record or varient field
523 EXTERN decl_node
decl_makeVarient (decl_node r
);
526 addFieldsToRecord - adds fields, i, of type, t, into a record, r.
530 EXTERN decl_node
decl_addFieldsToRecord (decl_node r
, decl_node v
, decl_node i
, decl_node t
);
533 buildVarientSelector - builds a field of name, tag, of, type, t, varient, r.
536 EXTERN
void decl_buildVarientSelector (decl_node r
, decl_node v
, nameKey_Name tag
, decl_node type
);
539 buildVarientFieldRecord - builds a varient field into a varient symbol, v.
540 The varient field is returned.
543 EXTERN decl_node
decl_buildVarientFieldRecord (decl_node v
, decl_node p
);
546 getSymName - returns the name of symbol, n.
549 EXTERN nameKey_Name
decl_getSymName (decl_node n
);
552 import - attempts to add node, n, into the scope of module, m.
553 It might fail due to a name clash in which case the
554 previous named symbol is returned. On success, n,
558 EXTERN decl_node
decl_import (decl_node m
, decl_node n
);
561 lookupExported - attempts to lookup a node named, i, from definition
562 module, n. The node is returned if found.
563 NIL is returned if not found.
566 EXTERN decl_node
decl_lookupExported (decl_node n
, nameKey_Name i
);
569 lookupSym - returns the symbol named, n, from the scope stack.
572 EXTERN decl_node
decl_lookupSym (nameKey_Name n
);
575 addImportedModule - add module, i, to be imported by, m.
576 If scoped then module, i, is added to the
580 EXTERN
void decl_addImportedModule (decl_node m
, decl_node i
, unsigned int scoped
);
583 setSource - sets the source filename for module, n, to s.
586 EXTERN
void decl_setSource (decl_node n
, nameKey_Name s
);
589 getSource - returns the source filename for module, n.
592 EXTERN nameKey_Name
decl_getSource (decl_node n
);
595 getMainModule - returns the main module node.
598 EXTERN decl_node
decl_getMainModule (void);
601 getCurrentModule - returns the current module being compiled.
604 EXTERN decl_node
decl_getCurrentModule (void);
607 foreachDefModuleDo - foreach definition node, n, in the module universe,
611 EXTERN
void decl_foreachDefModuleDo (symbolKey_performOperation p
);
614 foreachModModuleDo - foreach implementation or module node, n, in the module universe,
618 EXTERN
void decl_foreachModModuleDo (symbolKey_performOperation p
);
621 enterScope - pushes symbol, n, to the scope stack.
624 EXTERN
void decl_enterScope (decl_node n
);
627 leaveScope - removes the top level scope and all enumeration transparent scopes.
630 EXTERN
void decl_leaveScope (void);
633 makeProcedure - create, initialise and return a procedure node.
636 EXTERN decl_node
decl_makeProcedure (nameKey_Name n
);
639 putCommentDefProcedure - remembers the procedure comment (if it exists) as a
640 definition module procedure heading. NIL is placed
641 if there is no procedure comment available.
644 EXTERN
void decl_putCommentDefProcedure (decl_node n
);
647 putCommentModProcedure - remembers the procedure comment (if it exists) as an
648 implementation/program module procedure heading. NIL is placed
649 if there is no procedure comment available.
652 EXTERN
void decl_putCommentModProcedure (decl_node n
);
655 makeProcType - returns a proctype node.
658 EXTERN decl_node
decl_makeProcType (void);
661 putReturnType - sets the return type of procedure or proctype, proc, to, type.
664 EXTERN
void decl_putReturnType (decl_node proc
, decl_node type
);
667 putOptReturn - sets, proctype or procedure, proc, to have an optional return type.
670 EXTERN
void decl_putOptReturn (decl_node proc
);
673 makeVarParameter - returns a var parameter node with namelist and type.
674 Where the parameters are declared as l: type.
677 EXTERN decl_node
decl_makeVarParameter (decl_node l
, decl_node type
, decl_node proc
, unsigned int isused
);
680 makeNonVarParameter - returns a non var parameter node with namelist and type.
681 Where the parameters are declared as l: type.
684 EXTERN decl_node
decl_makeNonVarParameter (decl_node l
, decl_node type
, decl_node proc
, unsigned int isused
);
687 paramEnter - reset the parameter count.
690 EXTERN
void decl_paramEnter (decl_node n
);
693 paramLeave - set paramater checking to TRUE from now onwards.
696 EXTERN
void decl_paramLeave (decl_node n
);
699 makeIdentList - returns a node which will be used to maintain an ident list.
702 EXTERN decl_node
decl_makeIdentList (void);
705 putIdent - places ident, i, into identlist, n.
708 EXTERN
unsigned int decl_putIdent (decl_node n
, nameKey_Name i
);
711 addVarParameters - adds the identlist, i, of, type, to be VAR parameters
715 EXTERN
void decl_addVarParameters (decl_node n
, decl_node i
, decl_node type
, unsigned int isused
);
718 addNonVarParameters - adds the identlist, i, of, type, to be parameters
722 EXTERN
void decl_addNonVarParameters (decl_node n
, decl_node i
, decl_node type
, unsigned int isused
);
725 makeVarargs - returns a varargs node.
728 EXTERN decl_node
decl_makeVarargs (void);
731 isVarargs - returns TRUE if, n, is a varargs node.
734 EXTERN
unsigned int decl_isVarargs (decl_node n
);
737 addParameter - adds a parameter, param, to procedure or proctype, proc.
740 EXTERN
void decl_addParameter (decl_node proc
, decl_node param
);
743 makeBinaryTok - creates and returns a boolean type node with,
747 EXTERN decl_node
decl_makeBinaryTok (mcReserved_toktype op
, decl_node l
, decl_node r
);
750 makeUnaryTok - creates and returns a boolean type node with,
754 EXTERN decl_node
decl_makeUnaryTok (mcReserved_toktype op
, decl_node e
);
757 makeComponentRef - build a componentref node which accesses, field,
761 EXTERN decl_node
decl_makeComponentRef (decl_node rec
, decl_node field
);
764 makePointerRef - build a pointerref node which accesses, field,
765 within, pointer to record, ptr.
768 EXTERN decl_node
decl_makePointerRef (decl_node ptr
, decl_node field
);
771 isPointerRef - returns TRUE if, n, is a pointerref node.
774 EXTERN
unsigned int decl_isPointerRef (decl_node n
);
777 makeDeRef - dereferences the pointer defined by, n.
780 EXTERN decl_node
decl_makeDeRef (decl_node n
);
783 makeArrayRef - build an arrayref node which access element,
784 index, in, array. array is a variable/expression/constant
785 which has a type array.
788 EXTERN decl_node
decl_makeArrayRef (decl_node array
, decl_node index
);
791 getLastOp - return the right most non leaf node.
794 EXTERN decl_node
decl_getLastOp (decl_node n
);
797 getCardinal - returns the cardinal type node.
800 EXTERN decl_node
decl_getCardinal (void);
803 makeLiteralInt - creates and returns a literal node based on an integer type.
806 EXTERN decl_node
decl_makeLiteralInt (nameKey_Name n
);
809 makeLiteralReal - creates and returns a literal node based on a real type.
812 EXTERN decl_node
decl_makeLiteralReal (nameKey_Name n
);
815 makeString - creates and returns a node containing string, n.
818 EXTERN decl_node
decl_makeString (nameKey_Name n
);
821 makeSetValue - creates and returns a setvalue node.
824 EXTERN decl_node
decl_makeSetValue (void);
827 isSetValue - returns TRUE if, n, is a setvalue node.
830 EXTERN
unsigned int decl_isSetValue (decl_node n
);
833 putSetValue - assigns the type, t, to the set value, n. The
834 node, n, is returned.
837 EXTERN decl_node
decl_putSetValue (decl_node n
, decl_node t
);
840 includeSetValue - includes the range l..h into the setvalue.
841 h might be NIL indicating that a single element
842 is to be included into the set.
846 EXTERN decl_node
decl_includeSetValue (decl_node n
, decl_node l
, decl_node h
);
849 getBuiltinConst - creates and returns a builtin const if available.
852 EXTERN decl_node
decl_getBuiltinConst (nameKey_Name n
);
855 makeExpList - creates and returns an expList node.
858 EXTERN decl_node
decl_makeExpList (void);
861 isExpList - returns TRUE if, n, is an explist node.
864 EXTERN
unsigned int decl_isExpList (decl_node n
);
867 putExpList - places, expression, e, within the explist, n.
870 EXTERN
void decl_putExpList (decl_node n
, decl_node e
);
873 makeConstExp - returns a constexp node.
876 EXTERN decl_node
decl_makeConstExp (void);
879 getNextConstExp - returns the next constexp node.
882 EXTERN decl_node
decl_getNextConstExp (void);
885 setConstExpComplete - sets the field inside the def or imp or module, n.
888 EXTERN
void decl_setConstExpComplete (decl_node n
);
891 fixupConstExp - assign fixup expression, e, into the argument of, c.
894 EXTERN decl_node
decl_fixupConstExp (decl_node c
, decl_node e
);
897 resetConstExpPos - resets the index into the saved list of constexps inside
901 EXTERN
void decl_resetConstExpPos (decl_node n
);
904 makeFuncCall - builds a function call to c with param list, n.
907 EXTERN decl_node
decl_makeFuncCall (decl_node c
, decl_node n
);
910 makeStatementSequence - create and return a statement sequence node.
913 EXTERN decl_node
decl_makeStatementSequence (void);
916 isStatementSequence - returns TRUE if node, n, is a statement sequence.
919 EXTERN
unsigned int decl_isStatementSequence (decl_node n
);
922 addStatement - adds node, n, as a statement to statememt sequence, s.
925 EXTERN
void decl_addStatement (decl_node s
, decl_node n
);
928 addCommentBody - adds a body comment to a statement sequence node.
931 EXTERN
void decl_addCommentBody (decl_node n
);
934 addCommentAfter - adds an after comment to a statement sequence node.
937 EXTERN
void decl_addCommentAfter (decl_node n
);
940 addIfComments - adds the, body, and, after, comments to if node, n.
943 EXTERN
void decl_addIfComments (decl_node n
, decl_node body
, decl_node after
);
946 addElseComments - adds the, body, and, after, comments to an, if, or an elsif, node, n.
949 EXTERN
void decl_addElseComments (decl_node n
, decl_node body
, decl_node after
);
952 addIfEndComments - adds the, body, and, after, comments to an, if, node, n.
955 EXTERN
void decl_addIfEndComments (decl_node n
, decl_node body
, decl_node after
);
958 makeReturn - creates and returns a return node.
961 EXTERN decl_node
decl_makeReturn (void);
964 isReturn - returns TRUE if node, n, is a return.
967 EXTERN
unsigned int decl_isReturn (decl_node n
);
970 putReturn - assigns node, e, as the expression on the return node.
973 EXTERN
void decl_putReturn (decl_node n
, decl_node e
);
976 makeWhile - creates and returns a while node.
979 EXTERN decl_node
decl_makeWhile (void);
982 putWhile - places an expression, e, and statement sequence, s, into the while
986 EXTERN
void decl_putWhile (decl_node n
, decl_node e
, decl_node s
);
989 isWhile - returns TRUE if node, n, is a while.
992 EXTERN
unsigned int decl_isWhile (decl_node n
);
995 addWhileDoComment - adds body and after comments to while node, w.
998 EXTERN
void decl_addWhileDoComment (decl_node w
, decl_node body
, decl_node after
);
1001 addWhileEndComment - adds body and after comments to the end of a while node, w.
1004 EXTERN
void decl_addWhileEndComment (decl_node w
, decl_node body
, decl_node after
);
1007 makeAssignment - creates and returns an assignment node.
1008 The designator is, d, and expression, e.
1011 EXTERN decl_node
decl_makeAssignment (decl_node d
, decl_node e
);
1014 putBegin - assigns statements, s, to be the normal part in
1015 block, b. The block may be a procedure or module,
1016 or implementation node.
1019 EXTERN
void decl_putBegin (decl_node b
, decl_node s
);
1022 putFinally - assigns statements, s, to be the final part in
1023 block, b. The block may be a module
1024 or implementation node.
1027 EXTERN
void decl_putFinally (decl_node b
, decl_node s
);
1030 makeExit - creates and returns an exit node.
1033 EXTERN decl_node
decl_makeExit (decl_node l
, unsigned int n
);
1036 isExit - returns TRUE if node, n, is an exit.
1039 EXTERN
unsigned int decl_isExit (decl_node n
);
1042 makeLoop - creates and returns a loop node.
1045 EXTERN decl_node
decl_makeLoop (void);
1048 isLoop - returns TRUE if, n, is a loop node.
1051 EXTERN
unsigned int decl_isLoop (decl_node n
);
1054 putLoop - places statement sequence, s, into loop, l.
1057 EXTERN
void decl_putLoop (decl_node l
, decl_node s
);
1060 makeComment - creates and returns a comment node.
1063 EXTERN decl_node
decl_makeComment (const char *a_
, unsigned int _a_high
);
1066 makeCommentS - creates and returns a comment node.
1069 EXTERN decl_node
decl_makeCommentS (mcComment_commentDesc c
);
1072 makeIf - creates and returns an if node. The if node
1073 will have expression, e, and statement sequence, s,
1074 as the then component.
1077 EXTERN decl_node
decl_makeIf (decl_node e
, decl_node s
);
1080 isIf - returns TRUE if, n, is an if node.
1083 EXTERN
unsigned int decl_isIf (decl_node n
);
1086 makeElsif - creates and returns an elsif node.
1087 This node has an expression, e, and statement
1091 EXTERN decl_node
decl_makeElsif (decl_node i
, decl_node e
, decl_node s
);
1094 isElsif - returns TRUE if node, n, is an elsif node.
1097 EXTERN
unsigned int decl_isElsif (decl_node n
);
1100 putElse - the else is grafted onto the if/elsif node, i,
1101 and the statement sequence will be, s.
1104 EXTERN
void decl_putElse (decl_node i
, decl_node s
);
1107 makeFor - creates and returns a for node.
1110 EXTERN decl_node
decl_makeFor (void);
1113 isFor - returns TRUE if node, n, is a for node.
1116 EXTERN
unsigned int decl_isFor (decl_node n
);
1119 putFor - assigns the fields of the for node with
1127 EXTERN
void decl_putFor (decl_node f
, decl_node i
, decl_node s
, decl_node e
, decl_node b
, decl_node sq
);
1130 makeRepeat - creates and returns a repeat node.
1133 EXTERN decl_node
decl_makeRepeat (void);
1136 isRepeat - returns TRUE if node, n, is a repeat node.
1139 EXTERN
unsigned int decl_isRepeat (decl_node n
);
1142 putRepeat - places statements, s, and expression, e, into
1143 repeat statement, n.
1146 EXTERN
void decl_putRepeat (decl_node n
, decl_node s
, decl_node e
);
1149 addRepeatComment - adds body and after comments to repeat node, r.
1152 EXTERN
void decl_addRepeatComment (decl_node r
, decl_node body
, decl_node after
);
1155 addUntilComment - adds body and after comments to the until section of a repeat node, r.
1158 EXTERN
void decl_addUntilComment (decl_node r
, decl_node body
, decl_node after
);
1161 makeCase - builds and returns a case statement node.
1164 EXTERN decl_node
decl_makeCase (void);
1167 isCase - returns TRUE if node, n, is a case statement.
1170 EXTERN
unsigned int decl_isCase (decl_node n
);
1173 putCaseExpression - places expression, e, into case statement, n.
1177 EXTERN decl_node
decl_putCaseExpression (decl_node n
, decl_node e
);
1180 putCaseElse - places else statement, e, into case statement, n.
1184 EXTERN decl_node
decl_putCaseElse (decl_node n
, decl_node e
);
1187 putCaseStatement - places a caselist, l, and associated
1188 statement sequence, s, into case statement, n.
1192 EXTERN decl_node
decl_putCaseStatement (decl_node n
, decl_node l
, decl_node s
);
1195 makeCaseLabelList - creates and returns a caselabellist node.
1198 EXTERN decl_node
decl_makeCaseLabelList (decl_node l
, decl_node s
);
1201 isCaseLabelList - returns TRUE if, n, is a caselabellist.
1204 EXTERN
unsigned int decl_isCaseLabelList (decl_node n
);
1207 makeCaseList - creates and returns a case statement node.
1210 EXTERN decl_node
decl_makeCaseList (void);
1213 isCaseList - returns TRUE if, n, is a case list.
1216 EXTERN
unsigned int decl_isCaseList (decl_node n
);
1219 putCaseRange - places the case range lo..hi into caselist, n.
1222 EXTERN decl_node
decl_putCaseRange (decl_node n
, decl_node lo
, decl_node hi
);
1225 makeRange - creates and returns a case range.
1228 EXTERN decl_node
decl_makeRange (decl_node lo
, decl_node hi
);
1231 isRange - returns TRUE if node, n, is a range.
1234 EXTERN
unsigned int decl_isRange (decl_node n
);
1237 setNoReturn - sets noreturn field inside procedure.
1240 EXTERN
void decl_setNoReturn (decl_node n
, unsigned int value
);
1243 dupExpr - duplicate the expression nodes, it does not duplicate
1244 variables, literals, constants but only the expression
1245 operators (including function calls and parameter lists).
1248 EXTERN decl_node
decl_dupExpr (decl_node n
);
1251 setLangC - set the target language as ansi C.
1254 EXTERN
void decl_setLangC (void);
1257 setLangCP - set the target language as C++.
1260 EXTERN
void decl_setLangCP (void);
1263 setLangM2 - set the target language as Modula-2.
1266 EXTERN
void decl_setLangM2 (void);
1269 out - walks the tree of node declarations for the main module
1270 and writes the output to the outputFile specified in
1271 mcOptions. It outputs the declarations in the language
1275 EXTERN
void decl_out (void);