| /* Definitions and documentations for attributes used in GNU F77 compiler |
| Copyright (C) 1995, 1996 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. */ |
| |
| /* "How g77 learns about symbols" |
| |
| There are three primary things in a symbol that g77 uses to keep |
| track of what it has learned about that symbol: |
| |
| 1. The state |
| 2. The attributes |
| 3. The info |
| |
| State, attributes, and info (see f-info* files) all start out with |
| "NONE" fields when a symbol is first created. |
| |
| In a PROGRAM or BLOCK DATA program unit, info where cannot be DUMMY |
| or RESULT. Any combinations including those possibilities are not |
| considered possible in such program units. |
| |
| As soon as a symbol is created, it _must_ have its state changed to |
| SEEN, UNCERTAIN, or UNDERSTOOD. |
| |
| If SEEN, some info might be set, such as the type info (as in when |
| the TYPE attribute is present) or kind/where info. |
| |
| If UNCERTAIN, the permitted combinations of attributes and info are |
| listed below. Only the attributes ACTUALARG, ADJUSTABLE, ANYLEN, ARRAY, |
| DUMMY, EXTERNAL, SFARG, and TYPE are permitted. (All these attributes |
| are contrasted to each attribute below, even though some combinations |
| wouldn't be permitted in SEEN state either.) Note that DUMMY and |
| RESULT are not permitted in a PROGRAM/BLOCKDATA program unit, which |
| results in some of the combinations below not occurring (not UNCERTAIN, |
| but UNDERSTOOD). |
| |
| ANYLEN|TYPE & ~(ACTUALARG|ADJUSTABLE|ARRAY|DUMMY|EXTERNAL|SFARG): |
| ENTITY/DUMMY, ENTITY/RESULT, FUNCTION/INTRINSIC. |
| |
| ARRAY & ~(ACTUALARG|ANYLEN|DUMMY|EXTERNAL|SFARG|TYPE): |
| ENTITY/DUMMY, ENTITY/LOCAL. |
| |
| ARRAY|TYPE & ~(ACTUALARG|ANYLEN|DUMMY|EXTERNAL|SFARG): |
| ENTITY/DUMMY, ENTITY/LOCAL. |
| |
| DUMMY & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|EXTERNAL|SFARG|TYPE): |
| ENTITY/DUMMY, FUNCTION/DUMMY, SUBROUTINE/DUMMY. |
| |
| DUMMY|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|EXTERNAL|SFARG): |
| ENTITY/DUMMY, FUNCTION/DUMMY. |
| |
| EXTERNAL & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG|TYPE): |
| FUNCTION/DUMMY, FUNCTION/GLOBAL, SUBROUTINE/DUMMY, |
| SUBROUTINE/GLOBAL, BLOCKDATA/GLOBAL. |
| |
| EXTERNAL|ACTUALARG & ~(ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG|TYPE): |
| FUNCTION/GLOBAL, SUBROUTINE/GLOBAL. |
| |
| EXTERNAL|DUMMY & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|SFARG|TYPE): |
| FUNCTION/DUMMY, SUBROUTINE/DUMMY. |
| |
| EXTERNAL|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|SFARG): |
| FUNCTION/DUMMY, FUNCTION/GLOBAL. |
| |
| SFARG & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|EXTERNAL|TYPE): |
| ENTITY/DUMMY, ENTITY/LOCAL. |
| |
| SFARG|TYPE & ~(ACTUALARG|ADJUSTABLE|ANYLEN|ARRAY|DUMMY|EXTERNAL): |
| ENTITY/DUMMY, ENTITY/LOCAL. |
| |
| TYPE & ~(ACTUALARG|ANYLEN|ARRAY|DUMMY|EXTERNAL|SFARG): |
| ENTITY/DUMMY, ENTITY/LOCAL, ENTITY/RESULT, FUNCTION/DUMMY, |
| FUNCTION/GLOBAL, FUNCTION/INTRINSIC. |
| |
| If UNDERSTOOD, the attributes are no longer considered, and the info |
| field is considered to be as fully filled in as possible by analyzing |
| a single program unit. |
| |
| Each of the attributes (used only for SEEN/UNCERTAIN states) is |
| defined and described below. In many cases, a symbol starts out as |
| SEEN and has attributes set as it is seen in various contexts prior |
| to the first executable statement being seen (the "exec transition"). |
| Once that happens, either it becomes immediately UNDERSTOOD and all |
| its info filled in, or it becomes UNCERTAIN and its info only partially |
| filled in until it becomes UNDERSTOOD. While UNCERTAIN, only a |
| subset of attributes are possible/important. |
| |
| Not all symbols reach the UNDERSTOOD state, and in some cases symbols |
| go immediately from NONE to the UNDERSTOOD or even UNCERTAIN state. |
| For example, given "PROGRAM FOO", everything is known about the name |
| "FOO", so it becomes immediately UNDERSTOOD. |
| |
| Also, there are multiple name spaces, and not all attributes are |
| possible/permitted in all name spaces. |
| |
| The only attributes permitted in the global name space are: |
| |
| ANY, CBLOCK, SAVECBLOCK. |
| |
| The only attributes permitted in the local name space are: |
| |
| ANY, ACTUALARG, ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY, COMMON, |
| DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, SAVE, SFARG, |
| SFUNC, TYPE. |
| |
| In the stmt-func name space, no attributes are used, just the states. |
| |
| */ |
| |
| |
| /* Actual argument. Always accompanied by EXTERNAL. |
| |
| Context is a name used as an actual argument passed to a procedure |
| other than a statement function. |
| |
| Valid in UNCERTAIN state and local name space only. |
| |
| This attribute is used only to flag the fact that an EXTERNAL'ed name |
| has been seen as an actual argument, and therefore cannot be |
| discovered later to be a DUMMY argument (via an ENTRY statement). |
| |
| If DUMMY + EXTERNAL already, it is permitted to see the name |
| as an actual argument, but ACTUALARG is not added as an attribute since |
| that fact does not improve knowledge about the name. Hence it is not |
| permitted to transition ACTUALARG + EXTERNAL += DUMMY, and the |
| transition DUMMY + EXTERNAL += ACTUALARG is not actually done. |
| |
| Cannot be combined with: ANYLEN, ARRAY, DUMMY, SFARG, TYPE. |
| |
| Can be combined with: ACTUALARG, ANY, EXTERNAL. |
| |
| Unrelated: ADJUSTABLE, ADJUSTS, ANYSIZE, CBLOCK, COMMON, EQUIV, INIT, |
| INTRINSIC, NAMELIST, RESULT, SAVE, SAVECBLOCK, SFUNC. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrACTUALARG, FFESYMBOL_attrsACTUALARG, "ACTUALARG") |
| #ifndef FFESYMBOL_attrsACTUALARG |
| #define FFESYMBOL_attrsACTUALARG ((ffesymbolAttrs) 1 << FFESYMBOL_attrACTUALARG) |
| #endif |
| |
| /* Has adjustable dimension(s). Always accompanied by ARRAY. |
| |
| Context is an ARRAY-attributed name with an adjustable dimension (at |
| least one dimension containing a variable reference). |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ADJUSTS, COMMON, EQUIV, EXTERNAL, |
| NAMELIST, INIT, INTRINSIC, RESULT, SAVE, SFARG, SFUNC. |
| |
| Can be combined with: ANY, ANYLEN, ANYSIZE, ARRAY, TYPE. |
| |
| Must be combined with: DUMMY. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrADJUSTABLE, FFESYMBOL_attrsADJUSTABLE, "ADJUSTABLE") |
| #ifndef FFESYMBOL_attrsADJUSTABLE |
| #define FFESYMBOL_attrsADJUSTABLE ((ffesymbolAttrs) 1 << FFESYMBOL_attrADJUSTABLE) |
| #endif |
| |
| /* Adjusts an array. |
| |
| Context is an expression in an array declarator, such as in a |
| DIMENSION, COMMON, or type-specification statement. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, ARRAY, |
| EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC. |
| |
| Can be combined with: ADJUSTS, ANY, COMMON, DUMMY, EQUIV, INIT, |
| NAMELIST, SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrADJUSTS, FFESYMBOL_attrsADJUSTS, "ADJUSTS") |
| #ifndef FFESYMBOL_attrsADJUSTS |
| #define FFESYMBOL_attrsADJUSTS ((ffesymbolAttrs) 1 << FFESYMBOL_attrADJUSTS) |
| #endif |
| |
| /* Can be anything now, diagnostic has been issued at least once. |
| |
| Valid in UNDERSTOOD state only. Valid in any name space. |
| |
| Can be combined with anything. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrANY, FFESYMBOL_attrsANY, "ANY") |
| #ifndef FFESYMBOL_attrsANY |
| #define FFESYMBOL_attrsANY ((ffesymbolAttrs) 1 << FFESYMBOL_attrANY) |
| #endif |
| |
| /* Assumed (any) length. Always accompanied by TYPE. |
| |
| Context is a name listed in a CHARACTER statement and given a length |
| specification of (*). |
| |
| Valid in SEEN and UNCERTAIN states. Valid in local name space only. |
| |
| In SEEN state, attributes marked below with "=" are unrelated. |
| |
| In UNCERTAIN state, attributes marked below with "+" are unrelated, |
| attributes marked below with "-" cannot be combined with ANYLEN, |
| and attributes marked below with "!" transition to state UNDERSTOOD |
| instead of acquiring the new attribute. Any other subsequent mentioning |
| of the name transitions to state UNDERSTOOD. UNCERTAIN state is not |
| valid for this attribute in PROGRAM/BLOCKDATA program unit. |
| |
| Cannot be combined with: ACTUALARG=, ADJUSTS+, ANYLEN, COMMON+, EQUIV+, |
| EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, SAVE+, SFARG, SFUNC+. |
| |
| Can be combined with: ADJUSTABLE+, ANY, ANYSIZE+, ARRAY-, DUMMY!, RESULT+, |
| TYPE. |
| |
| Unrelated: CBLOCK, SAVECBLOCK. |
| |
| In PROGRAM/BLOCKDATA, cannot be combined with ARRAY. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrANYLEN, FFESYMBOL_attrsANYLEN, "ANYLEN") |
| #ifndef FFESYMBOL_attrsANYLEN |
| #define FFESYMBOL_attrsANYLEN ((ffesymbolAttrs) 1 << FFESYMBOL_attrANYLEN) |
| #endif |
| |
| /* Has assumed (any) size. Always accompanied by ARRAY. |
| |
| Context is an ARRAY-attributed name with its last dimension having |
| an upper bound of "*". |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTS, ANYSIZE, COMMON, EQUIV, EXTERNAL, |
| NAMELIST, INIT, INTRINSIC, RESULT, SAVE, SFARG, SFUNC. |
| |
| Can be combined with: ADJUSTABLE, ANY, ANYLEN, ARRAY, TYPE. |
| |
| Must be combined with: DUMMY. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrANYSIZE, FFESYMBOL_attrsANYSIZE, "ANYSIZE") |
| #ifndef FFESYMBOL_attrsANYSIZE |
| #define FFESYMBOL_attrsANYSIZE ((ffesymbolAttrs) 1 << FFESYMBOL_attrANYSIZE) |
| #endif |
| |
| /* Array. |
| |
| Context is a name followed by an array declarator, such as in a |
| type-statement-decl, a DIMENSION statement, or a COMMON statement. |
| |
| Valid in SEEN and UNCERTAIN states. Valid in local name space only. |
| |
| In SEEN state, attributes marked below with "=" are unrelated. |
| |
| In UNCERTAIN state, attributes marked below with "+" are unrelated, |
| attributes marked below with "-" cannot be combined with ARRAY, |
| and attributes marked below with "!" transition to state UNDERSTOOD |
| instead of acquiring the new attribute. Any other subsequent mentioning |
| of the name transitions to state UNDERSTOOD. UNCERTAIN state is not |
| valid for this attribute in PROGRAM/BLOCKDATA program unit. |
| |
| Cannot be combined with: ACTUALARG=, ADJUSTS+, ARRAY, EXTERNAL, |
| INTRINSIC+, RESULT+, SFARG, SFUNC+. |
| |
| Can be combined with: ADJUSTABLE+, ANY, ANYLEN-, ANYSIZE+, COMMON+, |
| DUMMY!, EQUIV+, INIT+, NAMELIST+, SAVE+, TYPE. |
| |
| Unrelated: CBLOCK, SAVECBLOCK. |
| |
| In PROGRAM/BLOCKDATA, cannot be combined with ANYLEN. |
| Cannot follow INIT. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrARRAY, FFESYMBOL_attrsARRAY, "ARRAY") |
| #ifndef FFESYMBOL_attrsARRAY |
| #define FFESYMBOL_attrsARRAY ((ffesymbolAttrs) 1 << FFESYMBOL_attrARRAY) |
| #endif |
| |
| /* COMMON block. |
| |
| Context is a name enclosed in slashes in a COMMON statement. |
| |
| Valid in SEEN state and global name space only. |
| |
| Cannot be combined with: |
| |
| Can be combined with: CBLOCK, SAVECBLOCK. |
| |
| Unrelated: ACTUALARG, ADJUSTABLE, ADJUSTS, ANY, ANYLEN, ANYSIZE, |
| ARRAY, COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, |
| RESULT, SAVE, SFARG, SFUNC, TYPE. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrCBLOCK, FFESYMBOL_attrsCBLOCK, "CBLOCK") |
| #ifndef FFESYMBOL_attrsCBLOCK |
| #define FFESYMBOL_attrsCBLOCK ((ffesymbolAttrs) 1 << FFESYMBOL_attrCBLOCK) |
| #endif |
| |
| /* Placed in COMMON. |
| |
| Context is a name listed in a COMMON statement but not enclosed in |
| slashes. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, COMMON, DUMMY, |
| EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC. |
| |
| Can be combined with: ADJUSTS, ANY, ARRAY, EQUIV, INIT, NAMELIST, |
| SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrCOMMON, FFESYMBOL_attrsCOMMON, "COMMON") |
| #ifndef FFESYMBOL_attrsCOMMON |
| #define FFESYMBOL_attrsCOMMON ((ffesymbolAttrs) 1 << FFESYMBOL_attrCOMMON) |
| #endif |
| |
| /* Dummy argument. |
| |
| Context is a name listed in the arglist of FUNCTION, SUBROUTINE, ENTRY. |
| (Statement-function definitions have dummy arguments, but since they're |
| the only possible entities in the statement-function name space, this |
| attribution mechanism isn't used for them.) |
| |
| Valid in SEEN and UNCERTAIN states. Valid in local name space only. |
| |
| In SEEN state, attributes marked below with "=" are unrelated. |
| |
| In UNCERTAIN state, attributes marked below with "+" are unrelated, |
| attributes marked below with "-" cannot be combined with DUMMY, |
| and attributes marked below with "!" transition to state UNDERSTOOD |
| instead of acquiring the new attribute. Any other subsequent mentioning |
| of the name transitions to state UNDERSTOOD. UNCERTAIN state is not |
| valid for this attribute in PROGRAM/BLOCKDATA program unit. |
| |
| Cannot be combined with: ACTUALARG=, COMMON+, EQUIV+, INIT+, INTRINSIC+, |
| NAMELIST+, RESULT+, SAVE+, SFUNC+. |
| |
| Can be combined with: ADJUSTABLE+, ADJUSTS+, ANY, ANYLEN-, ANYSIZE+, |
| ARRAY-, DUMMY, EXTERNAL, SFARG-, TYPE. |
| |
| Unrelated: CBLOCK, SAVECBLOCK. |
| |
| VXT Fortran disallows DUMMY + NAMELIST. |
| F90 allows DUMMY + NAMELIST (with some restrictions), g77 doesn't yet. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrDUMMY, FFESYMBOL_attrsDUMMY, "DUMMY") |
| #ifndef FFESYMBOL_attrsDUMMY |
| #define FFESYMBOL_attrsDUMMY ((ffesymbolAttrs) 1 << FFESYMBOL_attrDUMMY) |
| #endif |
| |
| /* EQUIVALENCE'd. |
| |
| Context is a name given in an EQUIVALENCE statement. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, |
| EXTERNAL, INTRINSIC, RESULT, SFUNC. |
| |
| Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, INIT, |
| NAMELIST, SAVE, SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrEQUIV, FFESYMBOL_attrsEQUIV, "EQUIV") |
| #ifndef FFESYMBOL_attrsEQUIV |
| #define FFESYMBOL_attrsEQUIV ((ffesymbolAttrs) 1 << FFESYMBOL_attrEQUIV) |
| #endif |
| |
| /* EXTERNAL. |
| |
| Context is a name listed in an EXTERNAL statement. |
| |
| Valid in SEEN and UNCERTAIN states. Valid in local name space only. |
| |
| In SEEN state, attributes marked below with "=" are unrelated. |
| |
| In UNCERTAIN state, attributes marked below with "+" are unrelated, |
| attributes marked below with "-" cannot be combined with EXTERNAL, |
| and attributes marked below with "!" transition to state UNDERSTOOD |
| instead of acquiring the new attribute. Many other subsequent mentionings |
| of the name transitions to state UNDERSTOOD. UNCERTAIN state is not |
| valid for this attribute in PROGRAM/BLOCKDATA program unit. |
| |
| Cannot be combined with: ADJUSTABLE+, ADJUSTS+, ANYLEN, ANYSIZE+, |
| ARRAY, COMMON+, EQUIV+, EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, RESULT+, |
| SAVE+, SFARG, SFUNC+. |
| |
| Can be combined with: ACTUALARG=, ANY, DUMMY, TYPE. |
| |
| Unrelated: CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrEXTERNAL, FFESYMBOL_attrsEXTERNAL, "EXTERNAL") |
| #ifndef FFESYMBOL_attrsEXTERNAL |
| #define FFESYMBOL_attrsEXTERNAL ((ffesymbolAttrs) 1 << FFESYMBOL_attrEXTERNAL) |
| #endif |
| |
| /* Given an initial value. |
| |
| Context is a name listed in a type-def-stmt such as INTEGER or REAL |
| and given an initial value or values. Someday will also include |
| names in DATA statements, which currently immediately exec-transition |
| their targets. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, EXTERNAL, |
| INIT, INTRINSIC, RESULT, SFUNC. |
| |
| Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, NAMELIST, |
| SAVE, SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| Cannot be followed by ARRAY. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrINIT, FFESYMBOL_attrsINIT, "INIT") |
| #ifndef FFESYMBOL_attrsINIT |
| #define FFESYMBOL_attrsINIT ((ffesymbolAttrs) 1 << FFESYMBOL_attrINIT) |
| #endif |
| |
| /* INTRINSIC. |
| |
| Context is a name listed in an INTRINSIC statement. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY, |
| COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, |
| SAVE, SFARG, SFUNC. |
| |
| Can be combined with: ANY, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrINTRINSIC, FFESYMBOL_attrsINTRINSIC, "INTRINSIC") |
| #ifndef FFESYMBOL_attrsINTRINSIC |
| #define FFESYMBOL_attrsINTRINSIC ((ffesymbolAttrs) 1 << FFESYMBOL_attrINTRINSIC) |
| #endif |
| |
| /* NAMELISTed. |
| |
| Context is a name listed in a NAMELIST statement but not enclosed in |
| slashes. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ANYLEN, ANYSIZE, DUMMY, EXTERNAL, |
| INTRINSIC, RESULT, SFUNC. |
| |
| Can be combined with: ADJUSTS, ANY, ARRAY, COMMON, EQUIV, INIT, |
| NAMELIST, SAVE, SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrNAMELIST, FFESYMBOL_attrsNAMELIST, "NAMELIST") |
| #ifndef FFESYMBOL_attrsNAMELIST |
| #define FFESYMBOL_attrsNAMELIST ((ffesymbolAttrs) 1 << FFESYMBOL_attrNAMELIST) |
| #endif |
| |
| /* RESULT of a function. |
| |
| Context is name in RESULT() clause in FUNCTION or ENTRY statement, or |
| the name in a FUNCTION or ENTRY statement (within a FUNCTION subprogram) |
| that has no RESULT() clause. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYSIZE, ARRAY, COMMON, |
| DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, SAVE, SFUNC. |
| |
| Can be combined with: ANY, ANYLEN, SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| Cannot be preceded by SFARG. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrRESULT, FFESYMBOL_attrsRESULT, "RESULT") |
| #ifndef FFESYMBOL_attrsRESULT |
| #define FFESYMBOL_attrsRESULT ((ffesymbolAttrs) 1 << FFESYMBOL_attrRESULT) |
| #endif |
| |
| /* SAVEd (not enclosed in slashes). |
| |
| Context is a name listed in a SAVE statement but not enclosed in slashes. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, COMMON, |
| DUMMY, EXTERNAL, INTRINSIC, RESULT, SAVE, SFUNC. |
| |
| Can be combined with: ANY, ARRAY, EQUIV, INIT, NAMELIST, |
| SFARG, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrSAVE, FFESYMBOL_attrsSAVE, "SAVE") |
| #ifndef FFESYMBOL_attrsSAVE |
| #define FFESYMBOL_attrsSAVE ((ffesymbolAttrs) 1 << FFESYMBOL_attrSAVE) |
| #endif |
| |
| /* SAVEd (enclosed in slashes). |
| |
| Context is a name enclosed in slashes in a SAVE statement. |
| |
| Valid in SEEN state and global name space only. |
| |
| Cannot be combined with: SAVECBLOCK. |
| |
| Can be combined with: CBLOCK. |
| |
| Unrelated: ACTUALARG, ADJUSTABLE, ADJUSTS, ANY, ANYLEN, ANYSIZE, |
| ARRAY, COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, |
| RESULT, SAVE, SFARG, SFUNC, TYPE. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrSAVECBLOCK, FFESYMBOL_attrsSAVECBLOCK, "SAVECBLOCK") |
| #ifndef FFESYMBOL_attrsSAVECBLOCK |
| #define FFESYMBOL_attrsSAVECBLOCK ((ffesymbolAttrs) 1 << FFESYMBOL_attrSAVECBLOCK) |
| #endif |
| |
| /* Name used as a statement function arg or DATA implied-DO iterator. |
| |
| Context is a name listed in the arglist of statement-function-definition |
| or as the iterator in an implied-DO construct in a DATA statement. |
| |
| Valid in SEEN and UNCERTAIN states. Valid in local name space only. |
| |
| In SEEN state, attributes marked below with "=" are unrelated. |
| |
| In UNCERTAIN state, attributes marked below with "+" are unrelated, |
| attributes marked below with "-" cannot be combined with SFARG, |
| and attributes marked below with "!" transition to state UNDERSTOOD |
| instead of acquiring the new attribute. Any other subsequent mentioning |
| of the name transitions to state UNDERSTOOD. UNCERTAIN state is not |
| valid for this attribute in PROGRAM/BLOCKDATA program unit. |
| |
| Cannot be combined with: ACTUALARG=, ADJUSTABLE+, ANYLEN, ANYSIZE+, |
| ARRAY, EXTERNAL, INTRINSIC+, SFUNC+. |
| |
| Can be combined with: ADJUSTS+, ANY, COMMON+, DUMMY!, EQUIV+, INIT+, |
| NAMELIST+, RESULT+, SAVE+, SFARG, TYPE. |
| |
| Unrelated: CBLOCK, SAVECBLOCK. |
| |
| Cannot be followed by RESULT. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrSFARG, FFESYMBOL_attrsSFARG, "SFARG") |
| #ifndef FFESYMBOL_attrsSFARG |
| #define FFESYMBOL_attrsSFARG ((ffesymbolAttrs) 1 << FFESYMBOL_attrSFARG) |
| #endif |
| |
| /* Statement function name. |
| |
| Context is a statement-function-definition statement, the name being |
| defined. |
| |
| Valid in SEEN state and local name space only. |
| |
| Cannot be combined with: ADJUSTABLE, ADJUSTS, ANYLEN, ANYSIZE, ARRAY, |
| COMMON, DUMMY, EQUIV, EXTERNAL, INIT, INTRINSIC, NAMELIST, RESULT, |
| SAVE, SFARG, SFUNC. |
| |
| Can be combined with: ANY, TYPE. |
| |
| Unrelated: ACTUALARG, CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrSFUNC, FFESYMBOL_attrsSFUNC, "SFUNC") |
| #ifndef FFESYMBOL_attrsSFUNC |
| #define FFESYMBOL_attrsSFUNC ((ffesymbolAttrs) 1 << FFESYMBOL_attrSFUNC) |
| #endif |
| |
| /* Explicitly typed. |
| |
| Context is a name listed in a type-def-stmt such as INTEGER or REAL. |
| |
| Valid in SEEN and UNCERTAIN states. Valid in local name space only. |
| |
| In SEEN state, attributes marked below with "=" are unrelated. |
| |
| In UNCERTAIN state, attributes marked below with "+" are unrelated, |
| attributes marked below with "-" cannot be combined with TYPE, |
| and attributes marked below with "!" transition to state UNDERSTOOD |
| instead of acquiring the new attribute. Many other subsequent mentionings |
| of the name transitions to state UNDERSTOOD. UNCERTAIN state is not |
| valid for this attribute in PROGRAM/BLOCKDATA program unit. |
| |
| Cannot be combined with: ACTUALARG=, TYPE. |
| |
| Can be combined with: ADJUSTABLE+, ADJUSTS+, ANY, ANYLEN, ANYSIZE+, |
| ARRAY, COMMON+, DUMMY, EQUIV+, EXTERNAL, INIT+, INTRINSIC+, NAMELIST+, |
| RESULT+, SAVE+, SFARG, SFUNC+. |
| |
| Unrelated: CBLOCK, SAVECBLOCK. |
| |
| */ |
| |
| DEFATTR (FFESYMBOL_attrTYPE, FFESYMBOL_attrsTYPE, "TYPE") |
| #ifndef FFESYMBOL_attrsTYPE |
| #define FFESYMBOL_attrsTYPE ((ffesymbolAttrs) 1 << FFESYMBOL_attrTYPE) |
| #endif |