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