linux/scripts/dtc/srcpos.h
<<
>>
Prefs
   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
  25struct srcfile_state {
  26        FILE *f;
  27        char *name;
  28        char *dir;
  29        int lineno, colno;
  30        struct srcfile_state *prev;
  31};
  32
  33extern FILE *depfile; /* = NULL */
  34extern struct srcfile_state *current_srcfile; /* = NULL */
  35
  36FILE *srcfile_relative_open(const char *fname, char **fullnamep);
  37void srcfile_push(const char *fname);
  38int srcfile_pop(void);
  39
  40struct srcpos {
  41    int first_line;
  42    int first_column;
  43    int last_line;
  44    int last_column;
  45    struct srcfile_state *file;
  46};
  47
  48#define YYLTYPE struct srcpos
  49
  50#define YYLLOC_DEFAULT(Current, Rhs, N)                                         \
  51        do {                                                                    \
  52                if (N) {                                                        \
  53                        (Current).first_line = YYRHSLOC(Rhs, 1).first_line;     \
  54                        (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \
  55                        (Current).last_line = YYRHSLOC(Rhs, N).last_line;       \
  56                        (Current).last_column  = YYRHSLOC (Rhs, N).last_column; \
  57                        (Current).file = YYRHSLOC(Rhs, N).file;                 \
  58                } else {                                                        \
  59                        (Current).first_line = (Current).last_line =            \
  60                                YYRHSLOC(Rhs, 0).last_line;                     \
  61                        (Current).first_column = (Current).last_column =        \
  62                                YYRHSLOC(Rhs, 0).last_column;                   \
  63                        (Current).file = YYRHSLOC (Rhs, 0).file;                \
  64                }                                                               \
  65        } while (0)
  66
  67
  68/*
  69 * Fictional source position used for IR nodes that are
  70 * created without otherwise knowing a true source position.
  71 * For example,constant definitions from the command line.
  72 */
  73extern struct srcpos srcpos_empty;
  74
  75extern void srcpos_update(struct srcpos *pos, const char *text, int len);
  76extern struct srcpos *srcpos_copy(struct srcpos *pos);
  77extern char *srcpos_string(struct srcpos *pos);
  78extern void srcpos_dump(struct srcpos *pos);
  79
  80extern void srcpos_verror(struct srcpos *pos, char const *, va_list va)
  81     __attribute__((format(printf, 2, 0)));
  82extern void srcpos_error(struct srcpos *pos, char const *, ...)
  83     __attribute__((format(printf, 2, 3)));
  84extern void srcpos_warn(struct srcpos *pos, char const *, ...)
  85     __attribute__((format(printf, 2, 3)));
  86
  87#endif /* _SRCPOS_H_ */
  88