Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/scripts/dtc/srcpos.h
10817 views
1
/*
2
* Copyright 2007 Jon Loeliger, Freescale Semiconductor, Inc.
3
*
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License as
6
* published by the Free Software Foundation; either version 2 of the
7
* License, or (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17
* USA
18
*/
19
20
#ifndef _SRCPOS_H_
21
#define _SRCPOS_H_
22
23
#include <stdio.h>
24
25
struct srcfile_state {
26
FILE *f;
27
char *name;
28
char *dir;
29
int lineno, colno;
30
struct srcfile_state *prev;
31
};
32
33
extern struct srcfile_state *current_srcfile; /* = NULL */
34
35
FILE *srcfile_relative_open(const char *fname, char **fullnamep);
36
void srcfile_push(const char *fname);
37
int srcfile_pop(void);
38
39
struct srcpos {
40
int first_line;
41
int first_column;
42
int last_line;
43
int last_column;
44
struct srcfile_state *file;
45
};
46
47
#define YYLTYPE struct srcpos
48
49
#define YYLLOC_DEFAULT(Current, Rhs, N) \
50
do { \
51
if (N) { \
52
(Current).first_line = YYRHSLOC(Rhs, 1).first_line; \
53
(Current).first_column = YYRHSLOC(Rhs, 1).first_column; \
54
(Current).last_line = YYRHSLOC(Rhs, N).last_line; \
55
(Current).last_column = YYRHSLOC (Rhs, N).last_column; \
56
(Current).file = YYRHSLOC(Rhs, N).file; \
57
} else { \
58
(Current).first_line = (Current).last_line = \
59
YYRHSLOC(Rhs, 0).last_line; \
60
(Current).first_column = (Current).last_column = \
61
YYRHSLOC(Rhs, 0).last_column; \
62
(Current).file = YYRHSLOC (Rhs, 0).file; \
63
} \
64
} while (0)
65
66
67
/*
68
* Fictional source position used for IR nodes that are
69
* created without otherwise knowing a true source position.
70
* For example,constant definitions from the command line.
71
*/
72
extern struct srcpos srcpos_empty;
73
74
extern void srcpos_update(struct srcpos *pos, const char *text, int len);
75
extern struct srcpos *srcpos_copy(struct srcpos *pos);
76
extern char *srcpos_string(struct srcpos *pos);
77
extern void srcpos_dump(struct srcpos *pos);
78
79
extern void srcpos_verror(struct srcpos *pos, char const *, va_list va)
80
__attribute__((format(printf, 2, 0)));
81
extern void srcpos_error(struct srcpos *pos, char const *, ...)
82
__attribute__((format(printf, 2, 3)));
83
extern void srcpos_warn(struct srcpos *pos, char const *, ...)
84
__attribute__((format(printf, 2, 3)));
85
86
#endif /* _SRCPOS_H_ */
87
88