2007-12-18 07:06:42 +03:00
/*
* Copyright 2007 Jon Loeliger , Freescale Semiconductor , Inc .
*
* This program 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 of the
* License , or ( at your option ) any later version .
*
* This program 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 this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307
* USA
*/
2010-11-18 02:28:20 +03:00
# ifndef _SRCPOS_H_
# define _SRCPOS_H_
2007-12-18 07:06:42 +03:00
2008-08-07 06:24:17 +04:00
# include <stdio.h>
2010-11-18 02:28:20 +03:00
struct srcfile_state {
FILE * f ;
char * name ;
2008-08-07 06:24:17 +04:00
char * dir ;
2010-11-18 02:28:20 +03:00
int lineno , colno ;
struct srcfile_state * prev ;
2008-08-07 06:24:17 +04:00
} ;
2010-11-18 02:28:20 +03:00
extern struct srcfile_state * current_srcfile ; /* = NULL */
FILE * srcfile_relative_open ( const char * fname , char * * fullnamep ) ;
void srcfile_push ( const char * fname ) ;
int srcfile_pop ( void ) ;
struct srcpos {
2007-12-18 07:06:42 +03:00
int first_line ;
int first_column ;
int last_line ;
int last_column ;
2010-11-18 02:28:20 +03:00
struct srcfile_state * file ;
} ;
2007-12-18 07:06:42 +03:00
2010-11-18 02:28:20 +03:00
# define YYLTYPE struct srcpos
2007-12-18 07:06:42 +03:00
2010-11-18 02:28:20 +03:00
# define YYLLOC_DEFAULT(Current, Rhs, N) \
do { \
if ( N ) { \
( Current ) . first_line = YYRHSLOC ( Rhs , 1 ) . first_line ; \
( Current ) . first_column = YYRHSLOC ( Rhs , 1 ) . first_column ; \
( Current ) . last_line = YYRHSLOC ( Rhs , N ) . last_line ; \
( Current ) . last_column = YYRHSLOC ( Rhs , N ) . last_column ; \
( Current ) . file = YYRHSLOC ( Rhs , N ) . file ; \
} else { \
( Current ) . first_line = ( Current ) . last_line = \
YYRHSLOC ( Rhs , 0 ) . last_line ; \
( Current ) . first_column = ( Current ) . last_column = \
YYRHSLOC ( Rhs , 0 ) . last_column ; \
( Current ) . file = YYRHSLOC ( Rhs , 0 ) . file ; \
} \
} while ( 0 )
2007-12-18 07:06:42 +03:00
2010-11-18 02:28:20 +03:00
/*
* Fictional source position used for IR nodes that are
* created without otherwise knowing a true source position .
* For example , constant definitions from the command line .
*/
extern struct srcpos srcpos_empty ;
2007-12-18 07:06:42 +03:00
2010-11-18 02:28:20 +03:00
extern void srcpos_update ( struct srcpos * pos , const char * text , int len ) ;
extern struct srcpos * srcpos_copy ( struct srcpos * pos ) ;
extern char * srcpos_string ( struct srcpos * pos ) ;
extern void srcpos_dump ( struct srcpos * pos ) ;
2007-12-18 07:06:42 +03:00
2010-11-18 02:28:20 +03:00
extern void srcpos_verror ( struct srcpos * pos , char const * , va_list va )
__attribute__ ( ( format ( printf , 2 , 0 ) ) ) ;
extern void srcpos_error ( struct srcpos * pos , char const * , . . . )
__attribute__ ( ( format ( printf , 2 , 3 ) ) ) ;
extern void srcpos_warn ( struct srcpos * pos , char const * , . . . )
__attribute__ ( ( format ( printf , 2 , 3 ) ) ) ;
2007-12-18 07:06:42 +03:00
2010-11-18 02:28:20 +03:00
# endif /* _SRCPOS_H_ */