#ifndef GCC_F_SYMBOL_H
#define GCC_F_SYMBOL_H
typedef struct _ffesymbol_ *ffesymbol;
enum _ffesymbol_state_
{
FFESYMBOL_stateNONE,
FFESYMBOL_stateSEEN,
FFESYMBOL_stateUNCERTAIN,
FFESYMBOL_stateUNDERSTOOD,
FFESYMBOL_state
};
typedef enum _ffesymbol_state_ ffesymbolState;
#define ffesymbolState_f ""
typedef long int ffesymbolAttrs;
#define ffesymbolAttrs_f "l"
enum _ffesymbol_attr_
{
#define DEFATTR(ATTR,ATTRS,NAME) ATTR,
#include "symbol.def"
#undef DEFATTR
FFESYMBOL_attr
};
typedef enum _ffesymbol_attr_ ffesymbolAttr;
#define ffesymbolAttr_f ""
#define FFESYMBOL_attrsetNONE 0
#define FFESYMBOL_attrsetALL (((ffesymbolAttrs) 1 << FFESYMBOL_attr) - 1)
enum _ffesymbol_checkstate_
{
FFESYMBOL_checkstateNONE_,
FFESYMBOL_checkstateINHIBITED_,
FFESYMBOL_checkstatePENDING_,
FFESYMBOL_checkstateCHECKED_,
FFESYMBOL_checkstate_
};
typedef enum _ffesymbol_checkstate_ ffesymbolCheckState_;
#define ffesymbolCheckState_f_ ""
#include "bld.h"
#include "com.h"
#include "equiv.h"
#include "global.h"
#include "info.h"
#include "intrin.h"
#include "lex.h"
#include "malloc.h"
#include "name.h"
#include "storag.h"
#include "target.h"
#include "top.h"
#include "where.h"
struct _ffesymbol_
{
ffename name;
ffename other_space_name;
ffeglobal global;
ffesymbolAttrs attrs;
ffesymbolState state;
ffeinfo info;
ffebld dims;
ffebld extents;
ffebld dim_syms;
ffebld array_size;
ffebld init;
ffebld accretion;
ffetargetOffset accretes;
ffebld dummy_args;
ffebld namelist;
ffebld common_list;
ffebld sfunc_expr;
ffebldListBottom list_bottom;
ffesymbol common;
ffeequiv equiv;
ffestorag storage;
#ifdef FFECOM_symbolHOOK
ffecomSymbol hook;
#endif
ffesymbol sfa_dummy_parent;
ffesymbol func_result;
ffetargetIntegerDefault value;
ffesymbolCheckState_ check_state;
ffelexToken check_token;
int max_entry_num;
int num_entries;
ffeintrinGen generic;
ffeintrinSpec specific;
ffeintrinImp implementation;
bool is_save;
bool is_init;
bool do_iter;
bool reported;
bool have_old;
bool explicit_where;
bool namelisted;
bool assigned;
};
#define ffesymbol_accretes(s) ((s)->accretes)
#define ffesymbol_accretion(s) ((s)->accretion)
#define ffesymbol_arraysize(s) ((s)->array_size)
#define ffesymbol_assigned(s) ((s)->assigned)
#define ffesymbol_attr(s,a) ((s)->attrs & ((ffesymbolAttrs) 1 << (a)))
#define ffesymbol_attrs(s) ((s)->attrs)
const char *ffesymbol_attrs_string (ffesymbolAttrs attrs);
#define ffesymbol_basictype(s) ffeinfo_basictype((s)->info)
void ffesymbol_check (ffesymbol s, ffelexToken t, bool maybe_intrin);
#define ffesymbol_common(s) ((s)->common)
#define ffesymbol_commonlist(s) ((s)->common_list)
ffesymbol ffesymbol_declare_blockdataunit (ffelexToken t, ffewhereLine wl,
ffewhereColumn wc);
ffesymbol ffesymbol_declare_cblock (ffelexToken t, ffewhereLine wl,
ffewhereColumn wc);
ffesymbol ffesymbol_declare_funcnotresunit (ffelexToken t);
ffesymbol ffesymbol_declare_funcresult (ffelexToken t);
ffesymbol ffesymbol_declare_funcunit (ffelexToken t);
ffesymbol ffesymbol_declare_local (ffelexToken t, bool maybe_intrin);
ffesymbol ffesymbol_declare_programunit (ffelexToken t, ffewhereLine wl,
ffewhereColumn wc);
ffesymbol ffesymbol_declare_sfdummy (ffelexToken t);
ffesymbol ffesymbol_declare_subrunit (ffelexToken t);
#define ffesymbol_dims(s) ((s)->dims)
#define ffesymbol_dim_syms(s) ((s)->dim_syms)
void ffesymbol_drive (ffesymbol (*fn) (ffesymbol));
void ffesymbol_drive_sfnames (ffesymbol (*fn) (ffesymbol));
#define ffesymbol_dummyargs(s) ((s)->dummy_args)
void ffesymbol_error (ffesymbol s, ffelexToken t);
#define ffesymbol_equiv(s) ((s)->equiv)
#define ffesymbol_explicitwhere(s) ((s)->explicit_where)
#define ffesymbol_extents(s) ((s)->extents)
#define ffesymbol_first_token(s) ((s)->name == NULL ? NULL \
: ffename_first_token((s)->name))
#define ffesymbol_funcresult(s) ((s)->func_result)
#define ffesymbol_generic(s) ((s)->generic)
#define ffesymbol_global(s) ((s)->global)
#define ffesymbol_hook(s) ((s)->hook)
#define ffesymbol_implementation(s) ((s)->implementation)
#define ffesymbol_info(s) ((s)->info)
#define ffesymbol_init(s) ((s)->init)
void ffesymbol_init_0 (void);
void ffesymbol_init_1 (void);
void ffesymbol_init_2 (void);
void ffesymbol_init_3 (void);
void ffesymbol_init_4 (void);
#define ffesymbol_is_doiter(s) ((s)->do_iter)
#define ffesymbol_is_dualspace(s) ((s)->other_space_name != NULL)
#define ffesymbol_is_f2c(s) (ffe_is_f2c())
#define ffesymbol_is_init(s) ((s)->is_init)
#define ffesymbol_is_reported(s) ((s)->reported)
#define ffesymbol_is_save(s) ((s)->is_save)
#define ffesymbol_is_specable(s) ffesymbol_state_is_specable(s->state)
#define ffesymbol_kindtype(s) ffeinfo_kindtype((s)->info)
#define ffesymbol_kind(s) ffeinfo_kind((s)->info)
ffesymbol ffesymbol_lookup_local (ffelexToken t);
#define ffesymbol_maxentrynum(s) ((s)->max_entry_num)
#define ffesymbol_name(s) ((s)->name)
#define ffesymbol_namelist(s) ((s)->namelist)
#define ffesymbol_namelisted(s) ((s)->namelisted)
#define ffesymbol_numentries(s) ((s)->num_entries)
#define ffesymbol_ptr_to_commonlist(s) (&(s)->common_list)
#define ffesymbol_ptr_to_listbottom(s) (&(s)->list_bottom)
#define ffesymbol_ptr_to_namelist(s) (&(s)->namelist)
#define ffesymbol_rank(s) ffeinfo_rank((s)->info)
void ffesymbol_reference (ffesymbol s, ffelexToken t, bool explicit);
void ffesymbol_resolve_intrin (ffesymbol s);
void ffesymbol_retract (bool retract);
bool ffesymbol_retractable (void);
#define ffesymbol_set_accretes(s,a) ((s)->accretes = (a))
#define ffesymbol_set_accretion(s,a) ((s)->accretion = (a))
#define ffesymbol_set_arraysize(s,a) ((s)->array_size = (a))
#define ffesymbol_set_assigned(s,a) ((s)->assigned = (a))
#define ffesymbol_set_attr(s,a) ((s)->attrs |= ((ffesymbolAttrs) 1 << (a)))
#define ffesymbol_set_attrs(s,a) ((s)->attrs = (a))
#define ffesymbol_set_common(s,c) ((s)->common = (c))
#define ffesymbol_set_commonlist(s,c) ((s)->common_list = (c))
#define ffesymbol_set_dims(s,d) ((s)->dims = (d))
#define ffesymbol_set_dim_syms(s,d) ((s)->dim_syms = (d))
#define ffesymbol_set_dummyargs(s,d) ((s)->dummy_args = (d))
#define ffesymbol_set_equiv(s,e) ((s)->equiv = (e))
#define ffesymbol_set_explicitwhere(s,e) ((s)->explicit_where = (e))
#define ffesymbol_set_extents(s,e) ((s)->extents = (e))
#define ffesymbol_set_funcresult(s,f) ((s)->func_result = (f))
#define ffesymbol_set_generic(s,g) ((s)->generic = (g))
#define ffesymbol_set_global(s,g) ((s)->global = (g))
#define ffesymbol_set_hook(s,h) ((s)->hook = (h))
#define ffesymbol_set_implementation(s,im) ((s)->implementation = (im))
#define ffesymbol_set_init(s,i) ((s)->init = (i))
#define ffesymbol_set_info(s,i) ((s)->info = (i))
#define ffesymbol_set_is_doiter(s,f) ((s)->do_iter = (f))
#define ffesymbol_set_is_init(s,in) ((s)->is_init = (in))
#define ffesymbol_set_is_save(s,sa) ((s)->is_save = (sa))
#define ffesymbol_set_maxentrynum(s,m) ((s)->max_entry_num = (m))
#define ffesymbol_set_namelist(s,n) ((s)->namelist = (n))
#define ffesymbol_set_namelisted(s,n) ((s)->namelisted = (n))
#define ffesymbol_set_numentries(s,n) ((s)->num_entries = (n))
void ffesymbol_set_retractable (mallocPool pool);
#define ffesymbol_set_sfexpr(s,e) ((s)->sfunc_expr = (e))
#define ffesymbol_set_specific(s,sp) ((s)->specific = (sp))
#define ffesymbol_set_state(s,st) ((s)->state = (st))
#define ffesymbol_set_storage(s,st) ((s)->storage = (st))
#define ffesymbol_set_value(s,v) ((s)->value = (v))
#define ffesymbol_sfdummyparent(s) ((s)->sfa_dummy_parent)
#define ffesymbol_sfexpr(s) ((s)->sfunc_expr)
void ffesymbol_signal_change (ffesymbol s);
#define ffesymbol_signal_unreported(s) ((s)->reported = FALSE)
#define ffesymbol_size(s) ffeinfo_size((s)->info)
#define ffesymbol_specific(s) ((s)->specific)
#define ffesymbol_state(s) ((s)->state)
#define ffesymbol_state_is_specable(s) ((s) <= FFESYMBOL_stateSEEN)
const char *ffesymbol_state_string (ffesymbolState state);
#define ffesymbol_storage(s) ((s)->storage)
void ffesymbol_terminate_0 (void);
void ffesymbol_terminate_1 (void);
void ffesymbol_terminate_2 (void);
void ffesymbol_terminate_3 (void);
void ffesymbol_terminate_4 (void);
#define ffesymbol_text(s) (((s)->name == NULL) ? "<->" : ffename_text((s)->name))
void ffesymbol_update_init (ffesymbol s);
void ffesymbol_update_save (ffesymbol s);
#define ffesymbol_value(s) ((s)->value)
#define ffesymbol_where(s) ffeinfo_where((s)->info)
#define ffesymbol_where_column(s) (((s)->name == NULL) \
? ffewhere_column_unknown() : ffename_where_column((s)->name))
#define ffesymbol_where_filename(s) \
ffewhere_line_filename(ffesymbol_where_line(s))
#define ffesymbol_where_filelinenum(s) \
ffewhere_line_filelinenum(ffesymbol_where_line(s))
#define ffesymbol_where_line(s) (((s)->name == NULL) ? ffewhere_line_unknown() \
: ffename_where_line((s)->name))
#endif