]> git.sur5r.net Git - cc65/blob - src/ld65/lineinfo.h
Removed unneeded include files.
[cc65] / src / ld65 / lineinfo.h
1 /*****************************************************************************/
2 /*                                                                           */
3 /*                                lineinfo.h                                 */
4 /*                                                                           */
5 /*                      Source file line info structure                      */
6 /*                                                                           */
7 /*                                                                           */
8 /*                                                                           */
9 /* (C) 2001-2011, Ullrich von Bassewitz                                      */
10 /*                Roemerstrasse 52                                           */
11 /*                D-70794 Filderstadt                                        */
12 /* EMail:         uz@cc65.org                                                */
13 /*                                                                           */
14 /*                                                                           */
15 /* This software is provided 'as-is', without any expressed or implied       */
16 /* warranty.  In no event will the authors be held liable for any damages    */
17 /* arising from the use of this software.                                    */
18 /*                                                                           */
19 /* Permission is granted to anyone to use this software for any purpose,     */
20 /* including commercial applications, and to alter it and redistribute it    */
21 /* freely, subject to the following restrictions:                            */
22 /*                                                                           */
23 /* 1. The origin of this software must not be misrepresented; you must not   */
24 /*    claim that you wrote the original software. If you use this software   */
25 /*    in a product, an acknowledgment in the product documentation would be  */
26 /*    appreciated but is not required.                                       */
27 /* 2. Altered source versions must be plainly marked as such, and must not   */
28 /*    be misrepresented as being the original software.                      */
29 /* 3. This notice may not be removed or altered from any source              */
30 /*    distribution.                                                          */
31 /*                                                                           */
32 /*****************************************************************************/
33
34
35
36 #ifndef LINEINFO_H
37 #define LINEINFO_H
38
39
40
41 #include <stdio.h>
42
43 /* common */
44 #include "coll.h"
45 #include "filepos.h"
46
47 /* ld65 */
48 #include "span.h"
49 #include "spool.h"
50
51
52
53 /*****************************************************************************/
54 /*                                 Forwards                                  */
55 /*****************************************************************************/
56
57
58
59 struct ObjData;
60 struct Segment;
61
62
63
64 /*****************************************************************************/
65 /*                                   Data                                    */
66 /*****************************************************************************/
67
68
69
70 /* Structure holding line information. The Pos.Name field is always the
71  * global string id of the file name. If the line info was read from the
72  * object file, the File pointer is valid, otherwise it is NULL.
73  */
74 typedef struct LineInfo LineInfo;
75 struct LineInfo {
76     unsigned            Id;             /* Line info id */
77     struct FileInfo*    File;           /* File struct for this line if any */
78     unsigned            Type;           /* Type of line info */
79     FilePos             Pos;            /* Position in file */
80     unsigned*           Spans;          /* Spans for this line */
81 };
82
83
84
85 /*****************************************************************************/
86 /*                                   Code                                    */
87 /*****************************************************************************/
88
89
90
91 LineInfo* GenLineInfo (const FilePos* Pos);
92 /* Generate a new (internally used) line info with the given information */
93
94 LineInfo* ReadLineInfo (FILE* F, struct ObjData* O);
95 /* Read a line info from a file and return it */
96
97 void FreeLineInfo (LineInfo* LI);
98 /* Free a LineInfo structure. */
99
100 void ReadLineInfoList (FILE* F, struct ObjData* O, Collection* LineInfos);
101 /* Read a list of line infos stored as a list of indices in the object file,
102  * make real line infos from them and place them into the passed collection.
103  */
104
105 const LineInfo* GetAsmLineInfo (const Collection* LineInfos);
106 /* Find a line info of type LI_TYPE_ASM in the given collection and return it.
107  * Return NULL if no such line info was found.
108  */
109
110 #if defined(HAVE_INLINE)
111 INLINE const FilePos* GetSourcePos (const LineInfo* LI)
112 /* Return the source file position from the given line info */
113 {
114     return &LI->Pos;
115 }
116 #else
117 #  define GetSourcePos(LI)      (&(LI)->Pos)
118 #endif
119
120 #if defined(HAVE_INLINE)
121 INLINE const char* GetSourceName (const LineInfo* LI)
122 /* Return the name of a source file from the given line info */
123 {
124     return GetString (LI->Pos.Name);
125 }
126 #else
127 #  define GetSourceName(LI)     (GetString ((LI)->Pos.Name))
128 #endif
129
130 #if defined(HAVE_INLINE)
131 INLINE unsigned GetSourceLine (const LineInfo* LI)
132 /* Return the source file line from the given line info */
133 {
134     return LI->Pos.Line;
135 }
136 #else
137 #  define GetSourceLine(LI)     ((LI)->Pos.Line)
138 #endif
139
140 #if defined(HAVE_INLINE)
141 INLINE unsigned GetSourceCol (const LineInfo* LI)
142 /* Return the source file column from the given line info */
143 {
144     return LI->Pos.Col;
145 }
146 #else
147 #  define GetSourceCol(LI)      ((LI)->Pos.Col)
148 #endif
149
150 #if defined(HAVE_INLINE)
151 INLINE const char* GetSourceNameFromList (const Collection* LineInfos)
152 /* Return the name of a source file from a list of line infos */
153 {
154     /* The relevant entry is in slot zero */
155     return GetSourceName (CollConstAt (LineInfos, 0));
156 }
157 #else
158 #  define GetSourceNameFromList(LineInfos)      \
159         GetSourceName ((const LineInfo*) CollConstAt ((LineInfos), 0))
160 #endif
161
162 #if defined(HAVE_INLINE)
163 INLINE unsigned GetSourceLineFromList (const Collection* LineInfos)
164 /* Return the source file line from a list of line infos */
165 {
166     /* The relevant entry is in slot zero */
167     return GetSourceLine (CollConstAt (LineInfos, 0));
168 }
169 #else
170 #  define GetSourceLineFromList(LineInfos)      \
171         GetSourceLine ((const LineInfo*) CollConstAt ((LineInfos), 0))
172 #endif
173
174 unsigned LineInfoCount (void);
175 /* Return the total number of line infos */
176
177 void AssignLineInfoIds (void);
178 /* Assign the ids to the line infos */
179
180 void PrintDbgLineInfo (FILE* F);
181 /* Output the line infos to a debug info file */
182
183
184
185 /* End of lineinfo.h */
186 #endif
187
188
189