diff options
author | obrien <obrien@FreeBSD.org> | 1999-08-26 09:30:50 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 1999-08-26 09:30:50 +0000 |
commit | 0bedf4fb30066e5e1d4342a1d3914dae7d37cba7 (patch) | |
tree | 68d8110b41afd0ebbf39167b1a4918eea667a7c5 /contrib/gcc/f/global.h | |
parent | d4db5fb866b7ad5216abd5047774a3973b9901a9 (diff) | |
download | FreeBSD-src-0bedf4fb30066e5e1d4342a1d3914dae7d37cba7.zip FreeBSD-src-0bedf4fb30066e5e1d4342a1d3914dae7d37cba7.tar.gz |
Virgin import of gcc from EGCS 1.1.2
Diffstat (limited to 'contrib/gcc/f/global.h')
-rw-r--r-- | contrib/gcc/f/global.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/contrib/gcc/f/global.h b/contrib/gcc/f/global.h new file mode 100644 index 0000000..38cf8d5 --- /dev/null +++ b/contrib/gcc/f/global.h @@ -0,0 +1,200 @@ +/* global.h -- Public #include File (module.h template V1.0) + Copyright (C) 1995, 1997 Free Software Foundation, Inc. + Contributed by James Craig Burley (burley@gnu.org). + +This file is part of GNU Fortran. + +GNU Fortran is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Fortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Fortran; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. + + Owning Modules: + global.c + + Modifications: +*/ + +/* Allow multiple inclusion to work. */ + +#ifndef _H_f_global +#define _H_f_global + +/* Simple definitions and enumerations. */ + +typedef enum + { + FFEGLOBAL_typeNONE, + FFEGLOBAL_typeMAIN, + FFEGLOBAL_typeEXT, /* EXTERNAL is all we know. */ + FFEGLOBAL_typeSUBR, + FFEGLOBAL_typeFUNC, + FFEGLOBAL_typeBDATA, + FFEGLOBAL_typeCOMMON, + FFEGLOBAL_typeANY, /* Confusion reigns, so just ignore. */ + FFEGLOBAL_type + } ffeglobalType; + +typedef enum + { + FFEGLOBAL_argsummaryNONE, /* No arg present. */ + FFEGLOBAL_argsummaryVAL, /* Pass-by-value. */ + FFEGLOBAL_argsummaryREF, /* Pass-by-reference. */ + FFEGLOBAL_argsummaryDESCR, /* Pass-by-descriptor. */ + FFEGLOBAL_argsummaryPROC, /* Procedure (intrinsic, external). */ + FFEGLOBAL_argsummarySUBR, /* Subroutine (intrinsic, external). */ + FFEGLOBAL_argsummaryFUNC, /* Function (intrinsic, external). */ + FFEGLOBAL_argsummaryALTRTN, /* Alternate-return (label). */ + FFEGLOBAL_argsummaryANY, + FFEGLOBAL_argsummary + } ffeglobalArgSummary; + +/* Typedefs. */ + +typedef struct _ffeglobal_arginfo_ *ffeglobalArgInfo_; +typedef struct _ffeglobal_ *ffeglobal; + +/* Include files needed by this one. */ + +#include "info.h" +#include "lex.h" +#include "name.h" +#include "symbol.h" +#include "target.h" +#include "top.h" + +/* Structure definitions. */ + +struct _ffeglobal_arginfo_ +{ + ffelexToken t; /* Different from master token when difference is important. */ + char *name; /* Name of dummy arg, or NULL if not yet known. */ + ffeglobalArgSummary as; + ffeinfoBasictype bt; + ffeinfoKindtype kt; + bool array; +}; + +struct _ffeglobal_ +{ + ffelexToken t; + ffename n; +#ifdef FFECOM_globalHOOK + ffecomGlobal hook; +#endif + ffeCounter tick; /* Recent transition in this progunit. */ + ffeglobalType type; + bool intrinsic; /* Known as intrinsic? */ + bool explicit_intrinsic; /* Explicit intrinsic? */ + union { + struct { + ffelexToken initt; /* First initial value. */ + bool have_pad; /* Padding info avail for COMMON? */ + ffetargetAlign pad; /* Initial padding for COMMON. */ + ffewhereLine pad_where_line; + ffewhereColumn pad_where_col; + bool have_save; /* Save info avail for COMMON? */ + bool save; /* Save info for COMMON. */ + ffewhereLine save_where_line; + ffewhereColumn save_where_col; + bool have_size; /* Size info avail for COMMON? */ + ffetargetOffset size; /* Size info for COMMON. */ + bool blank; /* TRUE if blank COMMON. */ + } common; + struct { + bool defined; /* Seen actual code yet? */ + ffeinfoBasictype bt; /* NONE for non-function. */ + ffeinfoKindtype kt; /* NONE for non-function. */ + ffetargetCharacterSize sz; + int n_args; /* 0 for main/blockdata. */ + ffelexToken other_t; /* Location of reference. */ + ffeglobalArgInfo_ arg_info; /* Info on each argument. */ + } proc; + } u; +}; + +/* Global objects accessed by users of this module. */ + + +/* Declare functions with prototypes. */ + +void ffeglobal_drive (ffeglobal (*fn) ()); +void ffeglobal_init_1 (void); +void ffeglobal_init_common (ffesymbol s, ffelexToken t); +void ffeglobal_new_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type); +void ffeglobal_new_common (ffesymbol s, ffelexToken t, bool blank); +void ffeglobal_pad_common (ffesymbol s, ffetargetAlign pad, ffewhereLine wl, + ffewhereColumn wc); +void ffeglobal_proc_def_arg (ffesymbol s, int argno, char *name, ffeglobalArgSummary as, + ffeinfoBasictype bt, ffeinfoKindtype kt, + bool array); +void ffeglobal_proc_def_nargs (ffesymbol s, int n_args); +bool ffeglobal_proc_ref_arg (ffesymbol s, int argno, ffeglobalArgSummary as, + ffeinfoBasictype bt, ffeinfoKindtype kt, + bool array, ffelexToken t); +bool ffeglobal_proc_ref_nargs (ffesymbol s, int n_args, ffelexToken t); +ffeglobal ffeglobal_promoted (ffesymbol s); +void ffeglobal_ref_intrinsic (ffesymbol s, ffelexToken t, bool explicit); +bool ffeglobal_ref_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type); +void ffeglobal_save_common (ffesymbol s, bool save, ffewhereLine wl, + ffewhereColumn wc); +bool ffeglobal_size_common (ffesymbol s, ffetargetOffset size); +void ffeglobal_terminate_1 (void); + +/* Define macros. */ + +#if FFECOM_targetCURRENT == FFECOM_targetFFE +#define FFEGLOBAL_ENABLED 0 +#elif FFECOM_targetCURRENT == FFECOM_targetGCC +#define FFEGLOBAL_ENABLED 1 +#else +#error +#endif + +#define ffeglobal_common_init(g) ((g)->tick != 0) +#define ffeglobal_common_have_pad(g) ((g)->u.common.have_pad) +#define ffeglobal_common_have_size(g) ((g)->u.common.have_size) +#define ffeglobal_common_pad(g) ((g)->u.common.pad) +#define ffeglobal_common_size(g) ((g)->u.common.size) +#define ffeglobal_hook(g) ((g)->hook) +#define ffeglobal_init_0() +#define ffeglobal_init_2() +#define ffeglobal_init_3() +#define ffeglobal_init_4() +#define ffeglobal_new_blockdata(s,t) \ + ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeBDATA) +#define ffeglobal_new_function(s,t) \ + ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeFUNC) +#define ffeglobal_new_program(s,t) \ + ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeMAIN) +#define ffeglobal_new_subroutine(s,t) \ + ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeSUBR) +#define ffeglobal_ref_blockdata(s,t) \ + ffeglobal_ref_progunit_(s,t,FFEGLOBAL_typeBDATA) +#define ffeglobal_ref_external(s,t) \ + ffeglobal_ref_progunit_(s,t,FFEGLOBAL_typeEXT) +#define ffeglobal_ref_function(s,t) \ + ffeglobal_ref_progunit_(s,t,FFEGLOBAL_typeFUNC) +#define ffeglobal_ref_subroutine(s,t) \ + ffeglobal_ref_progunit_(s,t,FFEGLOBAL_typeSUBR) +#define ffeglobal_set_hook(g,h) ((g)->hook = (h)) +#define ffeglobal_terminate_0() +#define ffeglobal_terminate_2() +#define ffeglobal_terminate_3() +#define ffeglobal_terminate_4() +#define ffeglobal_text(g) ffename_text((g)->n) +#define ffeglobal_type(g) ((g)->type) + +/* End of #include file. */ + +#endif |