/* stt.h -- Private #include File (module.h template V1.0) Copyright (C) 1995 Free Software Foundation, Inc. Contributed by James Craig Burley. 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: stt.c Modifications: */ /* Allow multiple inclusion to work. */ #ifndef _H_f_stt #define _H_f_stt /* Simple definitions and enumerations. */ /* Typedefs. */ typedef struct _ffest_case_list_ *ffesttCaseList; typedef struct _ffest_dim_list_ *ffesttDimList; typedef struct _ffest_expr_list_ *ffesttExprList; typedef struct _ffest_format_value_ ffesttFormatValue; typedef struct _ffest_format_list_ *ffesttFormatList; typedef struct _ffest_imp_list_ *ffesttImpList; typedef struct _ffest_token_item_ *ffesttTokenItem; typedef struct _ffest_token_list_ *ffesttTokenList; /* Include files needed by this one. */ #include "top.h" #include "bld.h" #include "info.h" #include "lex.h" #include "stp.h" /* Structure definitions. */ struct _ffest_case_list_ { ffesttCaseList next; ffesttCaseList previous; ffelexToken t; ffebld expr1; ffebld expr2; bool range; /* TRUE if "[expr1]:[expr2]", FALSE if "expr1". */ }; struct _ffest_dim_list_ { ffesttDimList next; ffesttDimList previous; ffelexToken t; ffebld lower; ffebld upper; }; struct _ffest_expr_list_ { ffesttExprList next; ffesttExprList previous; ffelexToken t; ffebld expr; }; struct _ffest_token_item_ { ffesttTokenItem next; ffesttTokenItem previous; ffelexToken t; }; struct _ffest_token_list_ { ffesttTokenItem first; ffesttTokenItem last; int count; /* Number of tokens in list. */ }; struct _ffest_format_value_ { bool present; /* TRUE if value supplied (needed for optional values only). */ bool rtexpr; /* FALSE if constant value here, TRUE if run-time expr (VXT). */ ffelexToken t; /* The first token, or perhaps just prior if can't get it. */ union { ffeUnionLongPtr unused; /* Make sure all the info gets copied. */ long signed_val; /* for R1011. */ unsigned long unsigned_val; /* For other constant values. */ ffebld expr; /* For run-time expression (VXT). */ } u; }; struct _ffest_format_list_ { ffesttFormatList next; ffesttFormatList previous; ffelexToken t; /* The NAME, CHARACTER, or HOLLERITH token. */ ffestpFormatType type; union ffest_format_ { struct { ffesttFormatValue R1004; /* r, the repeat count. */ ffesttFormatValue R1006; /* w, the field width. */ ffesttFormatValue R1007_or_R1008; /* m, the minimum number of digits; d, the number of decimal digits. */ ffesttFormatValue R1009; /* e, the number of exponent digits. */ } R1005; /* data-edit-desc. */ struct { ffesttFormatValue val; /* r, the repeat count; k, the precision magnitude adjustment; n, the column number (abs or rel). */ } R1010; /* control-edit-desc. */ struct { ffesttFormatValue R1004; /* r, the repeat count. */ ffesttFormatList format; /* the parenthesized format-item-list. */ } R1003D; /* format-item of for [r](format-item-list). */ struct { ffesttFormatList parent; /* NULL if outer list, else parent item. */ } root; /* FFESTP_formattypeNone case. */ } u; }; /* Global objects accessed by users of this module. */ /* Declare functions with prototypes. */ void ffestt_caselist_append (ffesttCaseList list, bool range, ffebld case1, ffebld case2, ffelexToken t); ffesttCaseList ffestt_caselist_create (void); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffestt_caselist_dump (ffesttCaseList list); #endif void ffestt_caselist_kill (ffesttCaseList list); void ffestt_dimlist_append (ffesttDimList list, ffebld lower, ffebld upper, ffelexToken t); ffebld ffestt_dimlist_as_expr (ffesttDimList list, ffeinfoRank *rank, ffebld *array_size, ffebld *extents, bool is_ugly_assumed); ffesttDimList ffestt_dimlist_create (void); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffestt_dimlist_dump (ffesttDimList list); #endif void ffestt_dimlist_kill (ffesttDimList list); ffestpDimtype ffestt_dimlist_type (ffesttDimList dims, bool is_ugly_assumed); void ffestt_exprlist_append (ffesttExprList list, ffebld expr, ffelexToken t); ffesttExprList ffestt_exprlist_create (void); void ffestt_exprlist_drive (ffesttExprList list, void (*fn) (ffebld, ffelexToken)); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffestt_exprlist_dump (ffesttExprList list); #endif void ffestt_exprlist_kill (ffesttExprList list); ffesttFormatList ffestt_formatlist_append (ffesttFormatList list); ffesttFormatList ffestt_formatlist_create (ffesttFormatList parent, ffelexToken t); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffestt_formatlist_dump (ffesttFormatList list); #endif void ffestt_formatlist_kill (ffesttFormatList list); void ffestt_implist_append (ffesttImpList list, ffelexToken first, ffelexToken last); ffesttImpList ffestt_implist_create (void); void ffestt_implist_drive (ffesttImpList list, void (*fn) (ffelexToken, ffelexToken)); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffestt_implist_dump (ffesttImpList list); #endif void ffestt_implist_kill (ffesttImpList list); void ffestt_tokenlist_append (ffesttTokenList list, ffelexToken t); ffesttTokenList ffestt_tokenlist_create (void); void ffestt_tokenlist_drive (ffesttTokenList list, void (*fn) (ffelexToken)); #if FFECOM_targetCURRENT == FFECOM_targetFFE void ffestt_tokenlist_dump (ffesttTokenList list); #endif ffelexHandler ffestt_tokenlist_handle (ffesttTokenList list, ffelexHandler handler); void ffestt_tokenlist_kill (ffesttTokenList list); /* Define macros. */ #define ffestt_init_0() #define ffestt_init_1() #define ffestt_init_2() #define ffestt_init_3() #define ffestt_init_4() #define ffestt_terminate_0() #define ffestt_terminate_1() #define ffestt_terminate_2() #define ffestt_terminate_3() #define ffestt_terminate_4() #define ffestt_tokenlist_count(tl) ((tl)->count) /* End of #include file. */ #endif