]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/f/lab.h
PR c++/17413
[thirdparty/gcc.git] / gcc / f / lab.h
CommitLineData
8e5578ea 1/* lab.h -- Public #include File (module.h template V1.0)
2 Copyright (C) 1995, 2003 Free Software Foundation, Inc.
3 Contributed by James Craig Burley.
4
5This file is part of GNU Fortran.
6
7GNU Fortran is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU Fortran is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU Fortran; see the file COPYING. If not, write to
19the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-1307, USA.
21
22 Owning Modules:
23 lab.c
24
25 Modifications:
26 22-Aug-89 JCB 1.1
27 Change for new ffewhere interface.
28*/
29
30/* Allow multiple inclusion to work. */
31
32#ifndef GCC_F_LAB_H
33#define GCC_F_LAB_H
34
35/* Simple definitions and enumerations. */
36
37typedef enum
38 {
39 FFELAB_typeUNKNOWN, /* No info yet on label. */
40 FFELAB_typeANY, /* Label valid for anything, no msgs. */
41 FFELAB_typeUSELESS, /* No valid way to reference this label. */
42 FFELAB_typeASSIGNABLE, /* Target of ASSIGN: so FORMAT or BRANCH. */
43 FFELAB_typeFORMAT, /* FORMAT label. */
44 FFELAB_typeLOOPEND, /* Target of a labeled DO statement. */
45 FFELAB_typeNOTLOOP, /* Branch target statement not valid DO
46 target. */
47 FFELAB_typeENDIF, /* END IF label. */
48 FFELAB_type
49 } ffelabType;
50
51#define FFELAB_valueNONE 0
52#define FFELAB_valueMAX 99999
53
54/* Typedefs. */
55
56typedef struct _ffelab_ *ffelab;
57typedef ffelab ffelabHandle;
58typedef unsigned long ffelabNumber; /* Count of new labels. */
59#define ffelabNumber_f "l"
60typedef unsigned long ffelabValue;
61#define ffelabValue_f "l"
62
63/* Include files needed by this one. */
64
65#include "com.h"
66#include "where.h"
67
68/* Structure definitions. */
69
70struct _ffelab_
71 {
72 ffelab next;
73 ffecomLabel hook;
74 ffelabValue value; /* 1 through 99999, or 100000+ for temp
75 labels. */
76 unsigned long blocknum; /* Managed entirely by user of module. */
77 ffewhereLine firstref_line;
78 ffewhereColumn firstref_col;
79 ffewhereLine doref_line;
80 ffewhereColumn doref_col;
81 ffewhereLine definition_line; /* ffewhere_line_unknown() if not
82 defined. */
83 ffewhereColumn definition_col;
84 ffelabType type;
85 };
86
87/* Global objects accessed by users of this module. */
88
89extern ffelab ffelab_list_;
90extern ffelabNumber ffelab_num_news_;
91
92/* Declare functions with prototypes. */
93
94ffelab ffelab_find (ffelabValue v);
95void ffelab_finish (void);
96void ffelab_init_3 (void);
97ffelab ffelab_new (ffelabValue v);
98
99/* Define macros. */
100
101#define ffelab_blocknum(l) ((l)->blocknum)
102#define ffelab_definition_column(l) ((l)->definition_col)
103#define ffelab_definition_filename(l) \
104 ffewhere_line_filename((l)->definition_line)
105#define ffelab_definition_filelinenum(l) \
106 ffewhere_line_filelinenum((l)->definition_line)
107#define ffelab_definition_line(l) ((l)->definition_line)
108#define ffelab_definition_line_number(l) \
109 ffewhere_line_number((l)->definition_line)
110#define ffelab_doref_column(l) ((l)->doref_col)
111#define ffelab_doref_filename(l) ffewhere_line_filename((l)->doref_line)
112#define ffelab_doref_filelinenum(l) ffewhere_line_filelinenum((l)->doref_line)
113#define ffelab_doref_line(l) ((l)->doref_line)
114#define ffelab_doref_line_number(l) ffewhere_line_number((l)->doref_line)
115#define ffelab_firstref_column(l) ((l)->firstref_col)
116#define ffelab_firstref_filename(l) ffewhere_line_filename((l)->firstref_line)
117#define ffelab_firstref_filelinenum(l) \
118 ffewhere_line_filelinenum((l)->firstref_line)
119#define ffelab_firstref_line(l) ((l)->firstref_line)
120#define ffelab_firstref_line_number(l) ffewhere_line_number((l)->firstref_line)
121#define ffelab_handle_done(h)
122#define ffelab_handle_first() ((ffelabHandle) ffelab_list_)
123#define ffelab_handle_next(h) ((ffelabHandle) (((ffelab) h)->next))
124#define ffelab_handle_target(h) ((ffelab) h)
125#define ffelab_hook(l) ((l)->hook)
126#define ffelab_init_0()
127#define ffelab_init_1()
128#define ffelab_init_2()
129#define ffelab_init_4()
130#define ffelab_kill(l) ffelab_set_value(l,FFELAB_valueNONE);
131#define ffelab_new_generated() (ffelab_new(ffelab_generated_++))
132#define ffelab_number() (ffelab_num_news_)
133#define ffelab_set_blocknum(l,b) ((l)->blocknum = (b))
134#define ffelab_set_definition_column(l,cn) ((l)->definition_col = (cn))
135#define ffelab_set_definition_line(l,ln) ((l)->definition_line = (ln))
136#define ffelab_set_doref_column(l,cn) ((l)->doref_col = (cn))
137#define ffelab_set_doref_line(l,ln) ((l)->doref_line = (ln))
138#define ffelab_set_firstref_column(l,cn) ((l)->firstref_col = (cn))
139#define ffelab_set_firstref_line(l,ln) ((l)->firstref_line = (ln))
140#define ffelab_set_hook(l,h) ((l)->hook = (h))
141#define ffelab_set_type(l,t) ((l)->type = (t))
142#define ffelab_terminate_0()
143#define ffelab_terminate_1()
144#define ffelab_terminate_2()
145#define ffelab_terminate_3()
146#define ffelab_terminate_4()
147#define ffelab_type(l) ((l)->type)
148#define ffelab_value(l) ((l)->value)
149
150/* End of #include file. */
151
152#endif /* ! GCC_F_LAB_H */