]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/m2/mc-boot/Gdecl.h
Update copyright years.
[thirdparty/gcc.git] / gcc / m2 / mc-boot / Gdecl.h
1 /* do not edit automatically generated by mc from decl. */
2 /* decl.def declaration nodes used to create the AST.
3
4 Copyright (C) 2015-2023 Free Software Foundation, Inc.
5 Contributed by Gaius Mulley <gaius@glam.ac.uk>.
6
7 This file is part of GNU Modula-2.
8
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)
12 any later version.
13
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.
18
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/>. */
22
23
24 #if !defined (_decl_H)
25 # define _decl_H
26
27 #include "config.h"
28 #include "system.h"
29 # ifdef __cplusplus
30 extern "C" {
31 # endif
32 # if !defined (PROC_D)
33 # define PROC_D
34 typedef void (*PROC_t) (void);
35 typedef struct { PROC_t proc; } PROC;
36 # endif
37
38 # include "GnameKey.h"
39 # include "GsymbolKey.h"
40 # include "GmcReserved.h"
41 # include "GmcComment.h"
42
43 # if defined (_decl_C)
44 # define EXTERN
45 # else
46 # define EXTERN extern
47 # endif
48
49 #if !defined (decl_node_D)
50 # define decl_node_D
51 typedef void *decl_node;
52 #endif
53
54 typedef struct decl_isNodeF_p decl_isNodeF;
55
56 typedef unsigned int (*decl_isNodeF_t) (decl_node);
57 struct decl_isNodeF_p { decl_isNodeF_t proc; };
58
59
60 /*
61 getDeclaredMod - returns the token number associated with the nodes declaration
62 in the implementation or program module.
63 */
64
65 EXTERN unsigned int decl_getDeclaredMod (decl_node n);
66
67 /*
68 getDeclaredDef - returns the token number associated with the nodes declaration
69 in the definition module.
70 */
71
72 EXTERN unsigned int decl_getDeclaredDef (decl_node n);
73
74 /*
75 getFirstUsed - returns the token number associated with the first use of
76 node, n.
77 */
78
79 EXTERN unsigned int decl_getFirstUsed (decl_node n);
80
81 /*
82 isDef - return TRUE if node, n, is a definition module.
83 */
84
85 EXTERN unsigned int decl_isDef (decl_node n);
86
87 /*
88 isImp - return TRUE if node, n, is an implementation module.
89 */
90
91 EXTERN unsigned int decl_isImp (decl_node n);
92
93 /*
94 isImpOrModule - returns TRUE if, n, is a program module or implementation module.
95 */
96
97 EXTERN unsigned int decl_isImpOrModule (decl_node n);
98
99 /*
100 isVisited - returns TRUE if the node was visited.
101 */
102
103 EXTERN unsigned int decl_isVisited (decl_node n);
104
105 /*
106 unsetVisited - unset the visited flag on a def/imp/module node.
107 */
108
109 EXTERN void decl_unsetVisited (decl_node n);
110
111 /*
112 setVisited - set the visited flag on a def/imp/module node.
113 */
114
115 EXTERN void decl_setVisited (decl_node n);
116
117 /*
118 setEnumsComplete - sets the field inside the def or imp or module, n.
119 */
120
121 EXTERN void decl_setEnumsComplete (decl_node n);
122
123 /*
124 getEnumsComplete - gets the field from the def or imp or module, n.
125 */
126
127 EXTERN unsigned int decl_getEnumsComplete (decl_node n);
128
129 /*
130 resetEnumPos - resets the index into the saved list of enums inside
131 module, n.
132 */
133
134 EXTERN void decl_resetEnumPos (decl_node n);
135
136 /*
137 getNextEnum - returns the next enumeration node.
138 */
139
140 EXTERN decl_node decl_getNextEnum (void);
141
142 /*
143 isModule - return TRUE if node, n, is a program module.
144 */
145
146 EXTERN unsigned int decl_isModule (decl_node n);
147
148 /*
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.
152 */
153
154 EXTERN unsigned int decl_isMainModule (decl_node n);
155
156 /*
157 setMainModule - sets node, n, as the main module to be compiled.
158 */
159
160 EXTERN void decl_setMainModule (decl_node n);
161
162 /*
163 setCurrentModule - sets node, n, as the current module being compiled.
164 */
165
166 EXTERN void decl_setCurrentModule (decl_node n);
167
168 /*
169 lookupDef - returns a definition module node named, n.
170 */
171
172 EXTERN decl_node decl_lookupDef (nameKey_Name n);
173
174 /*
175 lookupImp - returns an implementation module node named, n.
176 */
177
178 EXTERN decl_node decl_lookupImp (nameKey_Name n);
179
180 /*
181 lookupModule - returns a module node named, n.
182 */
183
184 EXTERN decl_node decl_lookupModule (nameKey_Name n);
185
186 /*
187 putDefForC - the definition module was defined FOR "C".
188 */
189
190 EXTERN void decl_putDefForC (decl_node n);
191
192 /*
193 lookupInScope - looks up a symbol named, n, from, scope.
194 */
195
196 EXTERN decl_node decl_lookupInScope (decl_node scope, nameKey_Name n);
197
198 /*
199 isConst - returns TRUE if node, n, is a const.
200 */
201
202 EXTERN unsigned int decl_isConst (decl_node n);
203
204 /*
205 isType - returns TRUE if node, n, is a type.
206 */
207
208 EXTERN unsigned int decl_isType (decl_node n);
209
210 /*
211 putType - places, exp, as the type alias to des.
212 TYPE des = exp ;
213 */
214
215 EXTERN void decl_putType (decl_node des, decl_node exp);
216
217 /*
218 getType - returns the type associated with node, n.
219 */
220
221 EXTERN decl_node decl_getType (decl_node n);
222
223 /*
224 skipType - skips over type aliases.
225 */
226
227 EXTERN decl_node decl_skipType (decl_node n);
228
229 /*
230 putTypeHidden - marks type, des, as being a hidden type.
231 TYPE des ;
232 */
233
234 EXTERN void decl_putTypeHidden (decl_node des);
235
236 /*
237 isTypeHidden - returns TRUE if type, n, is hidden.
238 */
239
240 EXTERN unsigned int decl_isTypeHidden (decl_node n);
241
242 /*
243 hasHidden - returns TRUE if module, n, has a hidden type.
244 */
245
246 EXTERN unsigned int decl_hasHidden (decl_node n);
247
248 /*
249 isVar - returns TRUE if node, n, is a type.
250 */
251
252 EXTERN unsigned int decl_isVar (decl_node n);
253
254 /*
255 isTemporary - returns TRUE if node, n, is a variable and temporary.
256 */
257
258 EXTERN unsigned int decl_isTemporary (decl_node n);
259
260 /*
261 isExported - returns TRUE if symbol, n, is exported from
262 the definition module.
263 */
264
265 EXTERN unsigned int decl_isExported (decl_node n);
266
267 /*
268 getDeclScope - returns the node representing the
269 current declaration scope.
270 */
271
272 EXTERN decl_node decl_getDeclScope (void);
273
274 /*
275 getScope - returns the scope associated with node, n.
276 */
277
278 EXTERN decl_node decl_getScope (decl_node n);
279
280 /*
281 isLiteral - returns TRUE if, n, is a literal.
282 */
283
284 EXTERN unsigned int decl_isLiteral (decl_node n);
285
286 /*
287 isConstSet - returns TRUE if, n, is a constant set.
288 */
289
290 EXTERN unsigned int decl_isConstSet (decl_node n);
291
292 /*
293 isEnumerationField - returns TRUE if, n, is an enumeration field.
294 */
295
296 EXTERN unsigned int decl_isEnumerationField (decl_node n);
297
298 /*
299 isEnumeration - returns TRUE if node, n, is an enumeration type.
300 */
301
302 EXTERN unsigned int decl_isEnumeration (decl_node n);
303
304 /*
305 isUnbounded - returns TRUE if, n, is an unbounded array.
306 */
307
308 EXTERN unsigned int decl_isUnbounded (decl_node n);
309
310 /*
311 isParameter - returns TRUE if, n, is a parameter.
312 */
313
314 EXTERN unsigned int decl_isParameter (decl_node n);
315
316 /*
317 isVarParam - returns TRUE if, n, is a var parameter.
318 */
319
320 EXTERN unsigned int decl_isVarParam (decl_node n);
321
322 /*
323 isParam - returns TRUE if, n, is a non var parameter.
324 */
325
326 EXTERN unsigned int decl_isParam (decl_node n);
327
328 /*
329 isNonVarParam - is an alias to isParam.
330 */
331
332 EXTERN unsigned int decl_isNonVarParam (decl_node n);
333
334 /*
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.
338 */
339
340 EXTERN decl_node decl_addOptParameter (decl_node proc, nameKey_Name id, decl_node type, decl_node init);
341
342 /*
343 isOptarg - returns TRUE if, n, is an optarg.
344 */
345
346 EXTERN unsigned int decl_isOptarg (decl_node n);
347
348 /*
349 isRecord - returns TRUE if, n, is a record.
350 */
351
352 EXTERN unsigned int decl_isRecord (decl_node n);
353
354 /*
355 isRecordField - returns TRUE if, n, is a record field.
356 */
357
358 EXTERN unsigned int decl_isRecordField (decl_node n);
359
360 /*
361 isVarientField - returns TRUE if, n, is a varient field.
362 */
363
364 EXTERN unsigned int decl_isVarientField (decl_node n);
365
366 /*
367 isArray - returns TRUE if, n, is an array.
368 */
369
370 EXTERN unsigned int decl_isArray (decl_node n);
371
372 /*
373 isProcType - returns TRUE if, n, is a procedure type.
374 */
375
376 EXTERN unsigned int decl_isProcType (decl_node n);
377
378 /*
379 isPointer - returns TRUE if, n, is a pointer.
380 */
381
382 EXTERN unsigned int decl_isPointer (decl_node n);
383
384 /*
385 isProcedure - returns TRUE if, n, is a procedure.
386 */
387
388 EXTERN unsigned int decl_isProcedure (decl_node n);
389
390 /*
391 isVarient - returns TRUE if, n, is a varient record.
392 */
393
394 EXTERN unsigned int decl_isVarient (decl_node n);
395
396 /*
397 isSet - returns TRUE if, n, is a set type.
398 */
399
400 EXTERN unsigned int decl_isSet (decl_node n);
401
402 /*
403 isSubrange - returns TRUE if, n, is a subrange type.
404 */
405
406 EXTERN unsigned int decl_isSubrange (decl_node n);
407
408 /*
409 isZtype - returns TRUE if, n, is the Z type.
410 */
411
412 EXTERN unsigned int decl_isZtype (decl_node n);
413
414 /*
415 isRtype - returns TRUE if, n, is the R type.
416 */
417
418 EXTERN unsigned int decl_isRtype (decl_node n);
419
420 /*
421 makeConst - create, initialise and return a const node.
422 */
423
424 EXTERN decl_node decl_makeConst (nameKey_Name n);
425
426 /*
427 putConst - places value, v, into node, n.
428 */
429
430 EXTERN void decl_putConst (decl_node n, decl_node v);
431
432 /*
433 makeType - create, initialise and return a type node.
434 */
435
436 EXTERN decl_node decl_makeType (nameKey_Name n);
437
438 /*
439 makeTypeImp - lookup a type in the definition module
440 and return it. Otherwise create a new type.
441 */
442
443 EXTERN decl_node decl_makeTypeImp (nameKey_Name n);
444
445 /*
446 makeVar - create, initialise and return a var node.
447 */
448
449 EXTERN decl_node decl_makeVar (nameKey_Name n);
450
451 /*
452 putVar - places, type, as the type for var.
453 */
454
455 EXTERN void decl_putVar (decl_node var, decl_node type, decl_node decl);
456
457 /*
458 makeVarDecl - creates a variable declaration list from
459 identlist, i, and, type, in the current scope.
460 */
461
462 EXTERN decl_node decl_makeVarDecl (decl_node i, decl_node type);
463
464 /*
465 makeEnum - creates an enumerated type and returns the node.
466 */
467
468 EXTERN decl_node decl_makeEnum (void);
469
470 /*
471 makeEnumField - returns an enumeration field, named, n.
472 */
473
474 EXTERN decl_node decl_makeEnumField (decl_node e, nameKey_Name n);
475
476 /*
477 makeSubrange - returns a subrange node, built from range: low..high.
478 */
479
480 EXTERN decl_node decl_makeSubrange (decl_node low, decl_node high);
481
482 /*
483 putSubrangeType - assigns, type, to the subrange type, sub.
484 */
485
486 EXTERN void decl_putSubrangeType (decl_node sub, decl_node type);
487
488 /*
489 makePointer - returns a pointer of, type, node.
490 */
491
492 EXTERN decl_node decl_makePointer (decl_node type);
493
494 /*
495 makeSet - returns a set of, type, node.
496 */
497
498 EXTERN decl_node decl_makeSet (decl_node type);
499
500 /*
501 makeArray - returns a node representing ARRAY subrange OF type.
502 */
503
504 EXTERN decl_node decl_makeArray (decl_node subr, decl_node type);
505
506 /*
507 putUnbounded - sets array, n, as unbounded.
508 */
509
510 EXTERN void decl_putUnbounded (decl_node n);
511
512 /*
513 makeRecord - creates and returns a record node.
514 */
515
516 EXTERN decl_node decl_makeRecord (void);
517
518 /*
519 makeVarient - creates a new symbol, a varient symbol for record or varient field
520 symbol, r.
521 */
522
523 EXTERN decl_node decl_makeVarient (decl_node r);
524
525 /*
526 addFieldsToRecord - adds fields, i, of type, t, into a record, r.
527 It returns, r.
528 */
529
530 EXTERN decl_node decl_addFieldsToRecord (decl_node r, decl_node v, decl_node i, decl_node t);
531
532 /*
533 buildVarientSelector - builds a field of name, tag, of, type, t, varient, r.
534 */
535
536 EXTERN void decl_buildVarientSelector (decl_node r, decl_node v, nameKey_Name tag, decl_node type);
537
538 /*
539 buildVarientFieldRecord - builds a varient field into a varient symbol, v.
540 The varient field is returned.
541 */
542
543 EXTERN decl_node decl_buildVarientFieldRecord (decl_node v, decl_node p);
544
545 /*
546 getSymName - returns the name of symbol, n.
547 */
548
549 EXTERN nameKey_Name decl_getSymName (decl_node n);
550
551 /*
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,
555 is returned.
556 */
557
558 EXTERN decl_node decl_import (decl_node m, decl_node n);
559
560 /*
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.
564 */
565
566 EXTERN decl_node decl_lookupExported (decl_node n, nameKey_Name i);
567
568 /*
569 lookupSym - returns the symbol named, n, from the scope stack.
570 */
571
572 EXTERN decl_node decl_lookupSym (nameKey_Name n);
573
574 /*
575 addImportedModule - add module, i, to be imported by, m.
576 If scoped then module, i, is added to the
577 module, m, scope.
578 */
579
580 EXTERN void decl_addImportedModule (decl_node m, decl_node i, unsigned int scoped);
581
582 /*
583 setSource - sets the source filename for module, n, to s.
584 */
585
586 EXTERN void decl_setSource (decl_node n, nameKey_Name s);
587
588 /*
589 getSource - returns the source filename for module, n.
590 */
591
592 EXTERN nameKey_Name decl_getSource (decl_node n);
593
594 /*
595 getMainModule - returns the main module node.
596 */
597
598 EXTERN decl_node decl_getMainModule (void);
599
600 /*
601 getCurrentModule - returns the current module being compiled.
602 */
603
604 EXTERN decl_node decl_getCurrentModule (void);
605
606 /*
607 foreachDefModuleDo - foreach definition node, n, in the module universe,
608 call p (n).
609 */
610
611 EXTERN void decl_foreachDefModuleDo (symbolKey_performOperation p);
612
613 /*
614 foreachModModuleDo - foreach implementation or module node, n, in the module universe,
615 call p (n).
616 */
617
618 EXTERN void decl_foreachModModuleDo (symbolKey_performOperation p);
619
620 /*
621 enterScope - pushes symbol, n, to the scope stack.
622 */
623
624 EXTERN void decl_enterScope (decl_node n);
625
626 /*
627 leaveScope - removes the top level scope and all enumeration transparent scopes.
628 */
629
630 EXTERN void decl_leaveScope (void);
631
632 /*
633 makeProcedure - create, initialise and return a procedure node.
634 */
635
636 EXTERN decl_node decl_makeProcedure (nameKey_Name n);
637
638 /*
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.
642 */
643
644 EXTERN void decl_putCommentDefProcedure (decl_node n);
645
646 /*
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.
650 */
651
652 EXTERN void decl_putCommentModProcedure (decl_node n);
653
654 /*
655 makeProcType - returns a proctype node.
656 */
657
658 EXTERN decl_node decl_makeProcType (void);
659
660 /*
661 putReturnType - sets the return type of procedure or proctype, proc, to, type.
662 */
663
664 EXTERN void decl_putReturnType (decl_node proc, decl_node type);
665
666 /*
667 putOptReturn - sets, proctype or procedure, proc, to have an optional return type.
668 */
669
670 EXTERN void decl_putOptReturn (decl_node proc);
671
672 /*
673 makeVarParameter - returns a var parameter node with namelist and type.
674 Where the parameters are declared as l: type.
675 */
676
677 EXTERN decl_node decl_makeVarParameter (decl_node l, decl_node type, decl_node proc, unsigned int isused);
678
679 /*
680 makeNonVarParameter - returns a non var parameter node with namelist and type.
681 Where the parameters are declared as l: type.
682 */
683
684 EXTERN decl_node decl_makeNonVarParameter (decl_node l, decl_node type, decl_node proc, unsigned int isused);
685
686 /*
687 paramEnter - reset the parameter count.
688 */
689
690 EXTERN void decl_paramEnter (decl_node n);
691
692 /*
693 paramLeave - set paramater checking to TRUE from now onwards.
694 */
695
696 EXTERN void decl_paramLeave (decl_node n);
697
698 /*
699 makeIdentList - returns a node which will be used to maintain an ident list.
700 */
701
702 EXTERN decl_node decl_makeIdentList (void);
703
704 /*
705 putIdent - places ident, i, into identlist, n.
706 */
707
708 EXTERN unsigned int decl_putIdent (decl_node n, nameKey_Name i);
709
710 /*
711 addVarParameters - adds the identlist, i, of, type, to be VAR parameters
712 in procedure, n.
713 */
714
715 EXTERN void decl_addVarParameters (decl_node n, decl_node i, decl_node type, unsigned int isused);
716
717 /*
718 addNonVarParameters - adds the identlist, i, of, type, to be parameters
719 in procedure, n.
720 */
721
722 EXTERN void decl_addNonVarParameters (decl_node n, decl_node i, decl_node type, unsigned int isused);
723
724 /*
725 makeVarargs - returns a varargs node.
726 */
727
728 EXTERN decl_node decl_makeVarargs (void);
729
730 /*
731 isVarargs - returns TRUE if, n, is a varargs node.
732 */
733
734 EXTERN unsigned int decl_isVarargs (decl_node n);
735
736 /*
737 addParameter - adds a parameter, param, to procedure or proctype, proc.
738 */
739
740 EXTERN void decl_addParameter (decl_node proc, decl_node param);
741
742 /*
743 makeBinaryTok - creates and returns a boolean type node with,
744 l, and, r, nodes.
745 */
746
747 EXTERN decl_node decl_makeBinaryTok (mcReserved_toktype op, decl_node l, decl_node r);
748
749 /*
750 makeUnaryTok - creates and returns a boolean type node with,
751 e, node.
752 */
753
754 EXTERN decl_node decl_makeUnaryTok (mcReserved_toktype op, decl_node e);
755
756 /*
757 makeComponentRef - build a componentref node which accesses, field,
758 within, record, rec.
759 */
760
761 EXTERN decl_node decl_makeComponentRef (decl_node rec, decl_node field);
762
763 /*
764 makePointerRef - build a pointerref node which accesses, field,
765 within, pointer to record, ptr.
766 */
767
768 EXTERN decl_node decl_makePointerRef (decl_node ptr, decl_node field);
769
770 /*
771 isPointerRef - returns TRUE if, n, is a pointerref node.
772 */
773
774 EXTERN unsigned int decl_isPointerRef (decl_node n);
775
776 /*
777 makeDeRef - dereferences the pointer defined by, n.
778 */
779
780 EXTERN decl_node decl_makeDeRef (decl_node n);
781
782 /*
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.
786 */
787
788 EXTERN decl_node decl_makeArrayRef (decl_node array, decl_node index);
789
790 /*
791 getLastOp - return the right most non leaf node.
792 */
793
794 EXTERN decl_node decl_getLastOp (decl_node n);
795
796 /*
797 getCardinal - returns the cardinal type node.
798 */
799
800 EXTERN decl_node decl_getCardinal (void);
801
802 /*
803 makeLiteralInt - creates and returns a literal node based on an integer type.
804 */
805
806 EXTERN decl_node decl_makeLiteralInt (nameKey_Name n);
807
808 /*
809 makeLiteralReal - creates and returns a literal node based on a real type.
810 */
811
812 EXTERN decl_node decl_makeLiteralReal (nameKey_Name n);
813
814 /*
815 makeString - creates and returns a node containing string, n.
816 */
817
818 EXTERN decl_node decl_makeString (nameKey_Name n);
819
820 /*
821 makeSetValue - creates and returns a setvalue node.
822 */
823
824 EXTERN decl_node decl_makeSetValue (void);
825
826 /*
827 isSetValue - returns TRUE if, n, is a setvalue node.
828 */
829
830 EXTERN unsigned int decl_isSetValue (decl_node n);
831
832 /*
833 putSetValue - assigns the type, t, to the set value, n. The
834 node, n, is returned.
835 */
836
837 EXTERN decl_node decl_putSetValue (decl_node n, decl_node t);
838
839 /*
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.
843 n is returned.
844 */
845
846 EXTERN decl_node decl_includeSetValue (decl_node n, decl_node l, decl_node h);
847
848 /*
849 getBuiltinConst - creates and returns a builtin const if available.
850 */
851
852 EXTERN decl_node decl_getBuiltinConst (nameKey_Name n);
853
854 /*
855 makeExpList - creates and returns an expList node.
856 */
857
858 EXTERN decl_node decl_makeExpList (void);
859
860 /*
861 isExpList - returns TRUE if, n, is an explist node.
862 */
863
864 EXTERN unsigned int decl_isExpList (decl_node n);
865
866 /*
867 putExpList - places, expression, e, within the explist, n.
868 */
869
870 EXTERN void decl_putExpList (decl_node n, decl_node e);
871
872 /*
873 makeConstExp - returns a constexp node.
874 */
875
876 EXTERN decl_node decl_makeConstExp (void);
877
878 /*
879 getNextConstExp - returns the next constexp node.
880 */
881
882 EXTERN decl_node decl_getNextConstExp (void);
883
884 /*
885 setConstExpComplete - sets the field inside the def or imp or module, n.
886 */
887
888 EXTERN void decl_setConstExpComplete (decl_node n);
889
890 /*
891 fixupConstExp - assign fixup expression, e, into the argument of, c.
892 */
893
894 EXTERN decl_node decl_fixupConstExp (decl_node c, decl_node e);
895
896 /*
897 resetConstExpPos - resets the index into the saved list of constexps inside
898 module, n.
899 */
900
901 EXTERN void decl_resetConstExpPos (decl_node n);
902
903 /*
904 makeFuncCall - builds a function call to c with param list, n.
905 */
906
907 EXTERN decl_node decl_makeFuncCall (decl_node c, decl_node n);
908
909 /*
910 makeStatementSequence - create and return a statement sequence node.
911 */
912
913 EXTERN decl_node decl_makeStatementSequence (void);
914
915 /*
916 isStatementSequence - returns TRUE if node, n, is a statement sequence.
917 */
918
919 EXTERN unsigned int decl_isStatementSequence (decl_node n);
920
921 /*
922 addStatement - adds node, n, as a statement to statememt sequence, s.
923 */
924
925 EXTERN void decl_addStatement (decl_node s, decl_node n);
926
927 /*
928 addCommentBody - adds a body comment to a statement sequence node.
929 */
930
931 EXTERN void decl_addCommentBody (decl_node n);
932
933 /*
934 addCommentAfter - adds an after comment to a statement sequence node.
935 */
936
937 EXTERN void decl_addCommentAfter (decl_node n);
938
939 /*
940 addIfComments - adds the, body, and, after, comments to if node, n.
941 */
942
943 EXTERN void decl_addIfComments (decl_node n, decl_node body, decl_node after);
944
945 /*
946 addElseComments - adds the, body, and, after, comments to an, if, or an elsif, node, n.
947 */
948
949 EXTERN void decl_addElseComments (decl_node n, decl_node body, decl_node after);
950
951 /*
952 addIfEndComments - adds the, body, and, after, comments to an, if, node, n.
953 */
954
955 EXTERN void decl_addIfEndComments (decl_node n, decl_node body, decl_node after);
956
957 /*
958 makeReturn - creates and returns a return node.
959 */
960
961 EXTERN decl_node decl_makeReturn (void);
962
963 /*
964 isReturn - returns TRUE if node, n, is a return.
965 */
966
967 EXTERN unsigned int decl_isReturn (decl_node n);
968
969 /*
970 putReturn - assigns node, e, as the expression on the return node.
971 */
972
973 EXTERN void decl_putReturn (decl_node n, decl_node e);
974
975 /*
976 makeWhile - creates and returns a while node.
977 */
978
979 EXTERN decl_node decl_makeWhile (void);
980
981 /*
982 putWhile - places an expression, e, and statement sequence, s, into the while
983 node, n.
984 */
985
986 EXTERN void decl_putWhile (decl_node n, decl_node e, decl_node s);
987
988 /*
989 isWhile - returns TRUE if node, n, is a while.
990 */
991
992 EXTERN unsigned int decl_isWhile (decl_node n);
993
994 /*
995 addWhileDoComment - adds body and after comments to while node, w.
996 */
997
998 EXTERN void decl_addWhileDoComment (decl_node w, decl_node body, decl_node after);
999
1000 /*
1001 addWhileEndComment - adds body and after comments to the end of a while node, w.
1002 */
1003
1004 EXTERN void decl_addWhileEndComment (decl_node w, decl_node body, decl_node after);
1005
1006 /*
1007 makeAssignment - creates and returns an assignment node.
1008 The designator is, d, and expression, e.
1009 */
1010
1011 EXTERN decl_node decl_makeAssignment (decl_node d, decl_node e);
1012
1013 /*
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.
1017 */
1018
1019 EXTERN void decl_putBegin (decl_node b, decl_node s);
1020
1021 /*
1022 putFinally - assigns statements, s, to be the final part in
1023 block, b. The block may be a module
1024 or implementation node.
1025 */
1026
1027 EXTERN void decl_putFinally (decl_node b, decl_node s);
1028
1029 /*
1030 makeExit - creates and returns an exit node.
1031 */
1032
1033 EXTERN decl_node decl_makeExit (decl_node l, unsigned int n);
1034
1035 /*
1036 isExit - returns TRUE if node, n, is an exit.
1037 */
1038
1039 EXTERN unsigned int decl_isExit (decl_node n);
1040
1041 /*
1042 makeLoop - creates and returns a loop node.
1043 */
1044
1045 EXTERN decl_node decl_makeLoop (void);
1046
1047 /*
1048 isLoop - returns TRUE if, n, is a loop node.
1049 */
1050
1051 EXTERN unsigned int decl_isLoop (decl_node n);
1052
1053 /*
1054 putLoop - places statement sequence, s, into loop, l.
1055 */
1056
1057 EXTERN void decl_putLoop (decl_node l, decl_node s);
1058
1059 /*
1060 makeComment - creates and returns a comment node.
1061 */
1062
1063 EXTERN decl_node decl_makeComment (const char *a_, unsigned int _a_high);
1064
1065 /*
1066 makeCommentS - creates and returns a comment node.
1067 */
1068
1069 EXTERN decl_node decl_makeCommentS (mcComment_commentDesc c);
1070
1071 /*
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.
1075 */
1076
1077 EXTERN decl_node decl_makeIf (decl_node e, decl_node s);
1078
1079 /*
1080 isIf - returns TRUE if, n, is an if node.
1081 */
1082
1083 EXTERN unsigned int decl_isIf (decl_node n);
1084
1085 /*
1086 makeElsif - creates and returns an elsif node.
1087 This node has an expression, e, and statement
1088 sequence, s.
1089 */
1090
1091 EXTERN decl_node decl_makeElsif (decl_node i, decl_node e, decl_node s);
1092
1093 /*
1094 isElsif - returns TRUE if node, n, is an elsif node.
1095 */
1096
1097 EXTERN unsigned int decl_isElsif (decl_node n);
1098
1099 /*
1100 putElse - the else is grafted onto the if/elsif node, i,
1101 and the statement sequence will be, s.
1102 */
1103
1104 EXTERN void decl_putElse (decl_node i, decl_node s);
1105
1106 /*
1107 makeFor - creates and returns a for node.
1108 */
1109
1110 EXTERN decl_node decl_makeFor (void);
1111
1112 /*
1113 isFor - returns TRUE if node, n, is a for node.
1114 */
1115
1116 EXTERN unsigned int decl_isFor (decl_node n);
1117
1118 /*
1119 putFor - assigns the fields of the for node with
1120 ident, i,
1121 start, s,
1122 end, e,
1123 increment, i,
1124 statements, sq.
1125 */
1126
1127 EXTERN void decl_putFor (decl_node f, decl_node i, decl_node s, decl_node e, decl_node b, decl_node sq);
1128
1129 /*
1130 makeRepeat - creates and returns a repeat node.
1131 */
1132
1133 EXTERN decl_node decl_makeRepeat (void);
1134
1135 /*
1136 isRepeat - returns TRUE if node, n, is a repeat node.
1137 */
1138
1139 EXTERN unsigned int decl_isRepeat (decl_node n);
1140
1141 /*
1142 putRepeat - places statements, s, and expression, e, into
1143 repeat statement, n.
1144 */
1145
1146 EXTERN void decl_putRepeat (decl_node n, decl_node s, decl_node e);
1147
1148 /*
1149 addRepeatComment - adds body and after comments to repeat node, r.
1150 */
1151
1152 EXTERN void decl_addRepeatComment (decl_node r, decl_node body, decl_node after);
1153
1154 /*
1155 addUntilComment - adds body and after comments to the until section of a repeat node, r.
1156 */
1157
1158 EXTERN void decl_addUntilComment (decl_node r, decl_node body, decl_node after);
1159
1160 /*
1161 makeCase - builds and returns a case statement node.
1162 */
1163
1164 EXTERN decl_node decl_makeCase (void);
1165
1166 /*
1167 isCase - returns TRUE if node, n, is a case statement.
1168 */
1169
1170 EXTERN unsigned int decl_isCase (decl_node n);
1171
1172 /*
1173 putCaseExpression - places expression, e, into case statement, n.
1174 n is returned.
1175 */
1176
1177 EXTERN decl_node decl_putCaseExpression (decl_node n, decl_node e);
1178
1179 /*
1180 putCaseElse - places else statement, e, into case statement, n.
1181 n is returned.
1182 */
1183
1184 EXTERN decl_node decl_putCaseElse (decl_node n, decl_node e);
1185
1186 /*
1187 putCaseStatement - places a caselist, l, and associated
1188 statement sequence, s, into case statement, n.
1189 n is returned.
1190 */
1191
1192 EXTERN decl_node decl_putCaseStatement (decl_node n, decl_node l, decl_node s);
1193
1194 /*
1195 makeCaseLabelList - creates and returns a caselabellist node.
1196 */
1197
1198 EXTERN decl_node decl_makeCaseLabelList (decl_node l, decl_node s);
1199
1200 /*
1201 isCaseLabelList - returns TRUE if, n, is a caselabellist.
1202 */
1203
1204 EXTERN unsigned int decl_isCaseLabelList (decl_node n);
1205
1206 /*
1207 makeCaseList - creates and returns a case statement node.
1208 */
1209
1210 EXTERN decl_node decl_makeCaseList (void);
1211
1212 /*
1213 isCaseList - returns TRUE if, n, is a case list.
1214 */
1215
1216 EXTERN unsigned int decl_isCaseList (decl_node n);
1217
1218 /*
1219 putCaseRange - places the case range lo..hi into caselist, n.
1220 */
1221
1222 EXTERN decl_node decl_putCaseRange (decl_node n, decl_node lo, decl_node hi);
1223
1224 /*
1225 makeRange - creates and returns a case range.
1226 */
1227
1228 EXTERN decl_node decl_makeRange (decl_node lo, decl_node hi);
1229
1230 /*
1231 isRange - returns TRUE if node, n, is a range.
1232 */
1233
1234 EXTERN unsigned int decl_isRange (decl_node n);
1235
1236 /*
1237 setNoReturn - sets noreturn field inside procedure.
1238 */
1239
1240 EXTERN void decl_setNoReturn (decl_node n, unsigned int value);
1241
1242 /*
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).
1246 */
1247
1248 EXTERN decl_node decl_dupExpr (decl_node n);
1249
1250 /*
1251 setLangC - set the target language as ansi C.
1252 */
1253
1254 EXTERN void decl_setLangC (void);
1255
1256 /*
1257 setLangCP - set the target language as C++.
1258 */
1259
1260 EXTERN void decl_setLangCP (void);
1261
1262 /*
1263 setLangM2 - set the target language as Modula-2.
1264 */
1265
1266 EXTERN void decl_setLangM2 (void);
1267
1268 /*
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
1272 specified above.
1273 */
1274
1275 EXTERN void decl_out (void);
1276 # ifdef __cplusplus
1277 }
1278 # endif
1279
1280 # undef EXTERN
1281 #endif