home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / storag.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  6KB  |  160 lines

  1. /* storag.h -- Public #include File (module.h template V1.0)
  2.    Copyright (C) 1995 Free Software Foundation, Inc.
  3.    Contributed by James Craig Burley (burley@gnu.ai.mit.edu).
  4.  
  5. This file is part of GNU Fortran.
  6.  
  7. GNU Fortran is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 2, or (at your option)
  10. any later version.
  11.  
  12. GNU Fortran is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with GNU Fortran; see the file COPYING.  If not, write to
  19. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21.    Owning Modules:
  22.       storag.c
  23.  
  24.    Modifications:
  25. */
  26.  
  27. /* Allow multiple inclusion to work. */
  28.  
  29. #ifndef _H_f_storag
  30. #define _H_f_storag
  31.  
  32. /* Simple definitions and enumerations. */
  33.  
  34. typedef enum
  35.   {
  36.     FFESTORAG_typeNONE,
  37.     FFESTORAG_typeCBLOCK,    /* A COMMON block. */
  38.     FFESTORAG_typeCOMMON,    /* A COMMON variable. */
  39.     FFESTORAG_typeLOCAL,    /* A local entity (var/array/equivalence). */
  40.     FFESTORAG_typeDUMMY,    /* A dummy (not used, currently). */
  41.     FFESTORAG_typeEQUIV,    /* An entity equivalenced into a COMMON/LOCAL
  42.                    entity. */
  43.     FFESTORAG_type
  44.   } ffestoragType;
  45.  
  46. /* Typedefs. */
  47.  
  48. typedef struct _ffestorag_ *ffestorag;
  49. typedef struct _ffestorag_list_ *ffestoragList;
  50. typedef struct _ffestorag_list_ ffestoragList_;
  51.  
  52. /* Include files needed by this one. */
  53.  
  54. #include "bld.h"
  55. #include "info.h"
  56. #include "symbol.h"
  57. #include "target.h"
  58.  
  59. /* Structure definitions. */
  60.  
  61. struct _ffestorag_list_
  62.   {
  63.     ffestorag first;        /* First storage area in list. */
  64.     ffestorag last;        /* Last storage area in list. */
  65.   };
  66.  
  67. struct _ffestorag_
  68.   {
  69.     ffestorag next;        /* Next storage area in list. */
  70.     ffestorag previous;        /* Previous storage area in list. */
  71.     ffestorag parent;        /* Parent who holds aggregate
  72.                    initializations. */
  73.     ffebld init;        /* Initialization expression. */
  74.     ffebld accretion;        /* Initializations seen so far for aggregate. */
  75.     ffetargetOffset accretes;    /* # inits needed to fill entire aggregate. */
  76.     ffesymbol symbol;        /* NULL if typeLOCAL and non-NULL equivs. */
  77.     ffestoragList_ equivs_;    /* NULL if typeLOCAL and non-NULL symbol. */
  78.     ffetargetOffset size;    /* Size of area. */
  79.     ffetargetOffset offset;    /* Offset of entity within area. */
  80.     ffetargetAlign alignment;    /* Initial alignment for entity. */
  81.     ffetargetAlign modulo;    /* Modulo within alignment. */
  82. #ifdef FFECOM_storageHOOK
  83.     ffecomStorage hook;        /* Whatever the backend needs here. */
  84. #endif
  85.     ffestoragType type;
  86.     ffeinfoBasictype basic_type;/* NONE= >1 non-CHARACTER; ANY=
  87.                    CHAR+non-CHAR. */
  88.     ffeinfoKindtype kind_type;    /* NONE= >1 kind type or NONE/ANY basic_type. */
  89.     ffesymbol type_symbol;    /* First symbol for basic_type/kind_type. */
  90.     bool save;            /* SAVE flag set for this storage area. */
  91.   };
  92.  
  93. /* Global objects accessed by users of this module. */
  94.  
  95. extern ffestoragList_ ffestorag_list_;
  96.  
  97. /* Declare functions with prototypes. */
  98.  
  99. void ffestorag_drive (ffestoragList sl, void (*fn) (ffestorag mst, ffestorag st),
  100.               ffestorag mst);
  101. void ffestorag_dump (ffestorag s);
  102. void ffestorag_end_layout (ffesymbol s);
  103. void ffestorag_exec_layout (ffesymbol s);
  104. void ffestorag_init_2 (void);
  105. ffestorag ffestorag_new (ffestoragList sl);
  106. void ffestorag_report (void);
  107. void ffestorag_update (ffestorag s, ffesymbol sym, ffeinfoBasictype bt,
  108.                ffeinfoKindtype kt);
  109. void ffestorag_update_save (ffestorag s);
  110.  
  111. /* Define macros. */
  112.  
  113. #define ffestorag_accretes(s) ((s)->accretes)
  114. #define ffestorag_accretion(s) ((s)->accretion)
  115. #define ffestorag_alignment(s) ((s)->alignment)
  116. #define ffestorag_basictype(s) ((s)->basic_type)
  117. #define ffestorag_hook(s) ((s)->hook)
  118. #define ffestorag_init(s) ((s)->init)
  119. #define ffestorag_init_0()
  120. #define ffestorag_init_1()
  121. #define ffestorag_init_3()
  122. #define ffestorag_init_4()
  123. #define ffestorag_kindtype(s) ((s)->kind_type)
  124. #define ffestorag_list_equivs(s) (&(s)->equivs_)
  125. #define ffestorag_list_master() (&ffestorag_list_)
  126. #define ffestorag_modulo(s) ((s)->modulo)
  127. #define ffestorag_offset(s) ((s)->offset)
  128. #define ffestorag_parent(s) ((s)->parent)
  129. #define ffestorag_ptr_to_alignment(s) (&(s)->alignment)
  130. #define ffestorag_ptr_to_modulo(s) (&(s)->modulo)
  131. #define ffestorag_save(s) ((s)->save)
  132. #define ffestorag_set_accretes(s,a) ((s)->accretes = (a))
  133. #define ffestorag_set_accretion(s,a) ((s)->accretion = (a))
  134. #define ffestorag_set_alignment(s,a) ((s)->alignment = (a))
  135. #define ffestorag_set_basictype(s,b) ((s)->basic_type = (b))
  136. #define ffestorag_set_hook(s,h) ((s)->hook = (h))
  137. #define ffestorag_set_init(s,i) ((s)->init = (i))
  138. #define ffestorag_set_kindtype(s,k) ((s)->kind_type = (k))
  139. #define ffestorag_set_modulo(s,m) ((s)->modulo = (m))
  140. #define ffestorag_set_offset(s,o) ((s)->offset = (o))
  141. #define ffestorag_set_parent(s,p) ((s)->parent = (p))
  142. #define ffestorag_set_save(s,sa) ((s)->save = (sa))
  143. #define ffestorag_set_size(s,si) ((s)->size = (si))
  144. #define ffestorag_set_symbol(s,sy) ((s)->symbol = (sy))
  145. #define ffestorag_set_type(s,t) ((s)->type = (t))
  146. #define ffestorag_set_typesymbol(s,sy) ((s)->type_symbol = (sy))
  147. #define ffestorag_size(s) ((s)->size)
  148. #define ffestorag_symbol(s) ((s)->symbol)
  149. #define ffestorag_terminate_0()
  150. #define ffestorag_terminate_1()
  151. #define ffestorag_terminate_2()
  152. #define ffestorag_terminate_3()
  153. #define ffestorag_terminate_4()
  154. #define ffestorag_type(s) ((s)->type)
  155. #define ffestorag_typesymbol(s) ((s)->type_symbol)
  156.  
  157. /* End of #include file. */
  158.  
  159. #endif
  160.