Blame lexer.l

Packit 4a5d52
/***************************************************************************
Packit 4a5d52
Packit 4a5d52
    lexer.l (IDL lex scanner)
Packit 4a5d52
Packit 4a5d52
    Copyright (C) 1998, 1999 Andrew T. Veliath
Packit 4a5d52
Packit 4a5d52
    This library is free software; you can redistribute it and/or
Packit 4a5d52
    modify it under the terms of the GNU Library General Public
Packit 4a5d52
    License as published by the Free Software Foundation; either
Packit 4a5d52
    version 2 of the License, or (at your option) any later version.
Packit 4a5d52
Packit 4a5d52
    This library is distributed in the hope that it will be useful,
Packit 4a5d52
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 4a5d52
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 4a5d52
    Library General Public License for more details.
Packit 4a5d52
Packit 4a5d52
    You should have received a copy of the GNU Library General Public
Packit 4a5d52
    License along with this library; if not, write to the Free
Packit 4a5d52
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Packit 4a5d52
Packit 4a5d52
    $Id: lexer.l,v 1.83 2003/05/09 15:19:06 jody Exp $
Packit 4a5d52
Packit 4a5d52
***************************************************************************/
Packit 4a5d52
%{
Packit 4a5d52
#include <assert.h>
Packit 4a5d52
#include <stdio.h>
Packit 4a5d52
#include <stdlib.h>
Packit 4a5d52
#include <ctype.h>
Packit 4a5d52
#include <string.h>
Packit 4a5d52
#include <glib.h>
Packit 4a5d52
#include "rename.h"
Packit 4a5d52
#include "util.h"
Packit 4a5d52
#include "parser.h"
Packit 4a5d52
Packit 4a5d52
#ifdef XP_MAC
Packit 4a5d52
#  include <unix.h>
Packit 4a5d52
#  define YY_NEVER_INTERACTIVE 1
Packit 4a5d52
#endif
Packit 4a5d52
Packit 4a5d52
/* Eliminate warning */
Packit 4a5d52
#define YY_NO_UNPUT 1
Packit 4a5d52
Packit 4a5d52
#define YY_INPUT(buf,result,the_max_size)	do {				\
Packit 4a5d52
	if (__IDL_inputcb == NULL) {						\
Packit 4a5d52
		if ((result = fread (buf, 1, the_max_size, yyin)) == YY_NULL &&	\
Packit 4a5d52
		    ferror (yyin))						\
Packit 4a5d52
			YY_FATAL_ERROR ("input in scanner failed");		\
Packit 4a5d52
	} else {								\
Packit 4a5d52
		union IDL_input_data data;					\
Packit 4a5d52
										\
Packit 4a5d52
		data.fill.buffer = buf;						\
Packit 4a5d52
		data.fill.max_size = the_max_size;				\
Packit 4a5d52
		result = (*__IDL_inputcb) (IDL_INPUT_REASON_FILL, &data,	\
Packit 4a5d52
					   __IDL_inputcb_user_data);		\
Packit 4a5d52
		if (result < 0)							\
Packit 4a5d52
			YY_FATAL_ERROR ("input callback returned failure");	\
Packit 4a5d52
	}									\
Packit 4a5d52
} while (0)
Packit 4a5d52
Packit 4a5d52
#define tokreturn(token)			do {	\
Packit 4a5d52
	__IDL_prev_token_line = __IDL_cur_token_line;	\
Packit 4a5d52
	__IDL_cur_token_line = __IDL_cur_line;		\
Packit 4a5d52
	return token;					\
Packit 4a5d52
} while (0)
Packit 4a5d52
Packit 4a5d52
#define SELECT_START				\
Packit 4a5d52
	/* Parser driven start conditions */	\
Packit 4a5d52
	if (__IDL_flagsi & IDLFP_PROPERTIES)	\
Packit 4a5d52
		BEGIN (PROP);			\
Packit 4a5d52
	else if (__IDL_flagsi & IDLFP_NATIVE)	\
Packit 4a5d52
		BEGIN (NATIVE);			\
Packit 4a5d52
	/* Global syntax start conditions */	\
Packit 4a5d52
	else if (__IDL_flags & IDLF_XPIDL)	\
Packit 4a5d52
		BEGIN (XP);			\
Packit 4a5d52
	else if (__IDL_flags & IDLF_CODEFRAGS)	\
Packit 4a5d52
		BEGIN (CFRG);
Packit 4a5d52
Packit 4a5d52
#define SELECT_RESTART				\
Packit 4a5d52
	SELECT_START				\
Packit 4a5d52
	else					\
Packit 4a5d52
		BEGIN (INITIAL);
Packit 4a5d52
Packit 4a5d52
static int		count_nl			(const char *s);
Packit 4a5d52
Packit 4a5d52
static void IDL_parse_cpp_status(char *mytext) {
Packit 4a5d52
	gint   line;
Packit 4a5d52
Packit 4a5d52
	line = atoi (mytext);
Packit 4a5d52
Packit 4a5d52
	while (g_ascii_isdigit (*mytext))
Packit 4a5d52
		mytext++;
Packit 4a5d52
Packit 4a5d52
	if (g_ascii_isspace (*mytext)) {
Packit 4a5d52
		mytext++;
Packit 4a5d52
Packit 4a5d52
		if (mytext [0] == '"') {
Packit 4a5d52
			gchar *p = ++mytext;
Packit 4a5d52
Packit 4a5d52
			while (*p && *p != '"') p++;
Packit 4a5d52
Packit 4a5d52
			*p = '\0';
Packit 4a5d52
		}
Packit 4a5d52
Packit 4a5d52
		if (mytext [0] ==  '<' &&
Packit 4a5d52
		    (!strcmp (mytext, "<builtin>")  ||
Packit 4a5d52
		     !strcmp (mytext, "<built-in>") ||
Packit 4a5d52
		     !strcmp (mytext, "<stdin>")    ||
Packit 4a5d52
		     !strcmp (mytext, "<command-line>") ||
Packit 4a5d52
		     !strcmp (mytext, "<command line>")))
Packit 4a5d52
Packit 4a5d52
			yylval.tree = IDL_file_set ("", line);
Packit 4a5d52
		else {
Packit 4a5d52
			gchar *filename = g_strdup (mytext);
Packit 4a5d52
#ifdef G_OS_WIN32
Packit 4a5d52
			/*
Packit 4a5d52
			 * On Windows when using MSVC, the file name
Packit 4a5d52
			 * output by cl.exe may have "\\" as the path
Packit 4a5d52
			 * separator. We need to strip the extra '\'
Packit 4a5d52
			 * so we can compare to our internal file
Packit 4a5d52
			 * name.
Packit 4a5d52
			 */
Packit 4a5d52
			gchar *dst, *src;
Packit 4a5d52
			for (dst = filename, src = mytext;
Packit 4a5d52
			     *src != '\0'; src++, dst++) {
Packit 4a5d52
			  if (*src == '\\' && *(src + 1) == '\\') {
Packit 4a5d52
			    src++;
Packit 4a5d52
			  }
Packit 4a5d52
			  *dst = *src;
Packit 4a5d52
			}
Packit 4a5d52
			*dst = '\0';
Packit 4a5d52
#endif
Packit 4a5d52
Packit 4a5d52
			yylval.tree = IDL_file_set (filename, line);
Packit 4a5d52
Packit 4a5d52
			g_free (filename);
Packit 4a5d52
		}
Packit 4a5d52
	}
Packit 4a5d52
	else
Packit 4a5d52
		yylval.tree = IDL_file_set ("", line);
Packit 4a5d52
}
Packit 4a5d52
Packit 4a5d52
Packit 4a5d52
#ifdef YYDEBUG
Packit 4a5d52
extern int				yydebug;
Packit 4a5d52
#endif
Packit 4a5d52
int					__IDL_prev_token_line;
Packit 4a5d52
int					__IDL_cur_token_line;
Packit 4a5d52
static int				warn_underscores;
Packit 4a5d52
static char *				codefrag_desc;
Packit 4a5d52
static GSList *				codefrag_list;
Packit 4a5d52
static GSList *				codefrag_list_tail;
Packit 4a5d52
%}
Packit 4a5d52
Packit 4a5d52
whitespace		[ \t\v\f\r]*
Packit 4a5d52
whitespacenl		[ \t\v\f\r\n]*
Packit 4a5d52
newline			\n
Packit 4a5d52
cpp_pragma		^{whitespace}#{whitespace}pragma{whitespace}.*
Packit 4a5d52
cpp_status		^{whitespace}#{whitespace}[0-9][0-9]*.*
Packit 4a5d52
cpp_status_ms		^{whitespace}#line{whitespace}[0-9][0-9]*.*
Packit 4a5d52
cpp_other		^{whitespace}#.*
Packit 4a5d52
b8_int			0[0-9]*
Packit 4a5d52
b10_uint		[1-9][0-9]*
Packit 4a5d52
b16_int			0[xX][0-9A-Fa-f]+
Packit 4a5d52
float_lit		[0-9]*\.[0-9]+([eE]-?[0-9]+)?|[0-9]+\.?([eE]-?[0-9]+)?
Packit 4a5d52
fixed_lit		([0-9]*\.[0-9]+|-?[0-9]+\.?[0-9]*)[dD]
Packit 4a5d52
declspec		__declspec{whitespacenl}\({whitespacenl}[A-Za-z]*{whitespacenl}\)
Packit 4a5d52
happy_ident		[A-Za-z][A-Za-z0-9]*
Packit 4a5d52
escaped_ident		_[A-Za-z0-9_]+
Packit 4a5d52
warn1_ident		[A-Za-z][A-Za-z0-9_]*
Packit 4a5d52
prop_key		[A-Za-z][A-Za-z0-9_]*
Packit 4a5d52
prop_value		\([^\)]+\)
Packit 4a5d52
native_type		[^\)]+\)
Packit 4a5d52
sqstring		\'[^\'\n]*[\'\n]
Packit 4a5d52
dqstring		\"[^\"\n]*[\"\n]
Packit 4a5d52
Packit 4a5d52
%p 5000
Packit 4a5d52
Packit 4a5d52
%s XP
Packit 4a5d52
Packit 4a5d52
%x PROP
Packit 4a5d52
%x NATIVE
Packit 4a5d52
Packit 4a5d52
%s CFRG
Packit 4a5d52
%x CFRGX
Packit 4a5d52
Packit 4a5d52
%%
Packit 4a5d52
Packit 4a5d52
	SELECT_START;
Packit 4a5d52
Packit 4a5d52
<INITIAL,XP,CFRG>^%\{.*					{
Packit 4a5d52
	char *s = yytext + 2;
Packit 4a5d52
Packit 4a5d52
	while (g_ascii_isspace (*s)) ++s;
Packit 4a5d52
	codefrag_desc = g_strdup (s);
Packit 4a5d52
	codefrag_list = codefrag_list_tail = NULL;
Packit 4a5d52
Packit 4a5d52
	if (!(__IDL_flags & IDLF_XPIDL || __IDL_flags & IDLF_CODEFRAGS))
Packit 4a5d52
		yyerror ("Code fragment syntax not enabled");
Packit 4a5d52
	else
Packit 4a5d52
		BEGIN (CFRGX);
Packit 4a5d52
}
Packit 4a5d52
<CFRGX>^%\}.*						{
Packit 4a5d52
	yylval.tree = IDL_codefrag_new (codefrag_desc, codefrag_list);
Packit 4a5d52
	tokreturn (TOK_CODEFRAG);
Packit 4a5d52
}
Packit 4a5d52
<CFRGX>.*						{
Packit 4a5d52
	char *s;
Packit 4a5d52
	GSList *slist;
Packit 4a5d52
Packit 4a5d52
	s = g_strdup (yytext);
Packit 4a5d52
	slist = g_slist_alloc ();
Packit 4a5d52
	slist->data = s;
Packit 4a5d52
Packit 4a5d52
	if (codefrag_list == NULL) {
Packit 4a5d52
		codefrag_list = slist;
Packit 4a5d52
		codefrag_list_tail = slist;
Packit 4a5d52
	} else {
Packit 4a5d52
		codefrag_list_tail->next = slist;
Packit 4a5d52
		codefrag_list_tail = slist;
Packit 4a5d52
	}
Packit 4a5d52
}
Packit 4a5d52
<*>{cpp_pragma}						{
Packit 4a5d52
	int n;
Packit 4a5d52
	char *p = yytext;
Packit 4a5d52
	char *s, *t;
Packit 4a5d52
Packit 4a5d52
	while (g_ascii_isspace (*p) || *p == '#') ++p;
Packit 4a5d52
	s = p;
Packit 4a5d52
	sscanf (p, "%*6s%n", &n); s += n;
Packit 4a5d52
	while (g_ascii_isspace (*s)) ++s;
Packit 4a5d52
Packit 4a5d52
	t = s + strlen(s) - 1;
Packit 4a5d52
	while(g_ascii_isspace(*t) && t > s) *(t--) = '\0'; /* Chomp trailing spaces */
Packit 4a5d52
Packit 4a5d52
	__IDL_do_pragma (s);
Packit 4a5d52
}
Packit 4a5d52
<*>{cpp_status}						{
Packit 4a5d52
	gchar *mytext = yytext;
Packit 4a5d52
Packit 4a5d52
	while (g_ascii_isspace (*mytext))
Packit 4a5d52
		mytext++;
Packit 4a5d52
Packit 4a5d52
	g_assert (mytext [0] == '#' && mytext [1] == ' ');
Packit 4a5d52
Packit 4a5d52
	mytext += 2;
Packit 4a5d52
	IDL_parse_cpp_status(mytext);
Packit 4a5d52
	if (yylval.tree)
Packit 4a5d52
	 	tokreturn (TOK_SRCFILE);
Packit 4a5d52
}
Packit 4a5d52
<*>{cpp_status_ms}						{
Packit 4a5d52
	gchar *mytext = yytext;
Packit 4a5d52
Packit 4a5d52
	while (g_ascii_isspace (*mytext))
Packit 4a5d52
		mytext++;
Packit 4a5d52
Packit 4a5d52
	g_assert (mytext [0] == '#' &&
Packit 4a5d52
		  mytext [1] == 'l' &&
Packit 4a5d52
		  mytext [2] == 'i' &&
Packit 4a5d52
		  mytext [3] == 'n' &&
Packit 4a5d52
		  mytext [4] == 'e' &&
Packit 4a5d52
		  g_ascii_isspace(mytext [5]));
Packit 4a5d52
Packit 4a5d52
	mytext += 6;
Packit 4a5d52
	IDL_parse_cpp_status(mytext);
Packit 4a5d52
	if (yylval.tree)
Packit 4a5d52
	 	tokreturn (TOK_SRCFILE);
Packit 4a5d52
}
Packit 4a5d52
<*>{cpp_other}						;
Packit 4a5d52
<*>{whitespace}						;
Packit 4a5d52
{b8_int}						{
Packit 4a5d52
	yylval.integer = 0;
Packit 4a5d52
	sscanf (yytext, "%" IDL_LL "o", &yylval.integer);
Packit 4a5d52
	tokreturn (TOK_INTEGER);
Packit 4a5d52
}
Packit 4a5d52
{b10_uint}						{
Packit 4a5d52
	yylval.integer = 0;
Packit 4a5d52
	sscanf (yytext, "%" IDL_LL "u", &yylval.integer);
Packit 4a5d52
	tokreturn (TOK_INTEGER);
Packit 4a5d52
}
Packit 4a5d52
{b16_int}						{
Packit 4a5d52
	yylval.integer = 0;
Packit 4a5d52
	sscanf (yytext + 2, "%" IDL_LL "x", &yylval.integer);
Packit 4a5d52
	tokreturn (TOK_INTEGER);
Packit 4a5d52
}
Packit 4a5d52
{fixed_lit}						{
Packit 4a5d52
	yylval.str = g_strdup (yytext);
Packit 4a5d52
	tokreturn (TOK_FIXEDP);
Packit 4a5d52
}
Packit 4a5d52
{float_lit}						{
Packit 4a5d52
	yylval.floatp = atof (yytext);
Packit 4a5d52
	tokreturn (TOK_FLOATP);
Packit 4a5d52
}
Packit 4a5d52
FALSE			tokreturn (TOK_FALSE);
Packit 4a5d52
TRUE			tokreturn (TOK_TRUE);
Packit 4a5d52
any			tokreturn (TOK_ANY);
Packit 4a5d52
attribute		tokreturn (TOK_ATTRIBUTE);
Packit 4a5d52
boolean			tokreturn (TOK_BOOLEAN);
Packit 4a5d52
case			tokreturn (TOK_CASE);
Packit 4a5d52
char			tokreturn (TOK_CHAR);
Packit 4a5d52
const			tokreturn (TOK_CONST);
Packit 4a5d52
context			tokreturn (TOK_CONTEXT);
Packit 4a5d52
default			tokreturn (TOK_DEFAULT);
Packit 4a5d52
double			tokreturn (TOK_DOUBLE);
Packit 4a5d52
enum			tokreturn (TOK_ENUM);
Packit 4a5d52
exception		tokreturn (TOK_EXCEPTION);
Packit 4a5d52
fixed			tokreturn (TOK_FIXED);
Packit 4a5d52
float			tokreturn (TOK_FLOAT);
Packit 4a5d52
in			tokreturn (TOK_IN);
Packit 4a5d52
inout			tokreturn (TOK_INOUT);
Packit 4a5d52
interface		tokreturn (TOK_INTERFACE);
Packit 4a5d52
long			tokreturn (TOK_LONG);
Packit 4a5d52
module			tokreturn (TOK_MODULE);
Packit 4a5d52
native			tokreturn (TOK_NATIVE);
Packit 4a5d52
octet			tokreturn (TOK_OCTET);
Packit 4a5d52
oneway			tokreturn (TOK_ONEWAY);
Packit 4a5d52
out			tokreturn (TOK_OUT);
Packit 4a5d52
raises			tokreturn (TOK_RAISES);
Packit 4a5d52
readonly		tokreturn (TOK_READONLY);
Packit 4a5d52
sequence		tokreturn (TOK_SEQUENCE);
Packit 4a5d52
short			tokreturn (TOK_SHORT);
Packit 4a5d52
string			tokreturn (TOK_STRING);
Packit 4a5d52
struct			tokreturn (TOK_STRUCT);
Packit 4a5d52
switch			tokreturn (TOK_SWITCH);
Packit 4a5d52
typedef			tokreturn (TOK_TYPEDEF);
Packit 4a5d52
union			tokreturn (TOK_UNION);
Packit 4a5d52
unsigned		tokreturn (TOK_UNSIGNED);
Packit 4a5d52
<XP>\.\.\.		tokreturn (TOK_VARARGS);
Packit 4a5d52
void			tokreturn (TOK_VOID);
Packit 4a5d52
wchar			tokreturn (TOK_WCHAR);
Packit 4a5d52
wstring			tokreturn (TOK_WSTRING);
Packit 4a5d52
::			tokreturn (TOK_OP_SCOPE);
Packit 4a5d52
\>\>			tokreturn (TOK_OP_SHR);
Packit 4a5d52
\<\<			tokreturn (TOK_OP_SHL);
Packit 4a5d52
{declspec}						{
Packit 4a5d52
	char *s = g_strdup (yytext);
Packit 4a5d52
Packit 4a5d52
	/* Get the parenthesized expression (ignoring whitespace) */
Packit 4a5d52
	sscanf (yytext, "__declspec %*[(] %[A-Za-z_] %*[)]", s);
Packit 4a5d52
	yylval.str = s;
Packit 4a5d52
	__IDL_cur_line += count_nl (yytext);
Packit 4a5d52
	tokreturn (TOK_DECLSPEC);
Packit 4a5d52
}
Packit 4a5d52
{happy_ident}						{
Packit 4a5d52
#if 0
Packit 4a5d52
	if ((__IDL_flags & IDLF_TYPECODES) && strcmp (yytext, "TypeCode") == 0)
Packit 4a5d52
		tokreturn (TOK_TYPECODE);
Packit 4a5d52
#endif
Packit 4a5d52
	if (__IDL_typecodes_as_tok>0 && strcmp (yytext, "TypeCode") == 0)
Packit 4a5d52
		tokreturn (TOK_TYPECODE);
Packit 4a5d52
	if ( (__IDL_pidl <= 0) && strcmp(yytext, "Object")==0 )
Packit 4a5d52
		tokreturn (TOK_OBJECT);
Packit 4a5d52
	yylval.str = g_strdup (yytext);
Packit 4a5d52
	tokreturn (TOK_IDENT);
Packit 4a5d52
}
Packit 4a5d52
{escaped_ident}						{
Packit 4a5d52
	yylval.str = g_strdup (&yytext[1]);
Packit 4a5d52
	tokreturn (TOK_IDENT);
Packit 4a5d52
}
Packit 4a5d52
{warn1_ident}						{
Packit 4a5d52
	if (!warn_underscores) {
Packit 4a5d52
		yywarningv (IDL_WARNING2,
Packit 4a5d52
			   "`%s' underscores within identifiers are discouraged for use "
Packit 4a5d52
			   "with C-language IDL mappings", yytext);
Packit 4a5d52
		warn_underscores = 1;
Packit 4a5d52
	}
Packit 4a5d52
	yylval.str = g_strdup (yytext);
Packit 4a5d52
	tokreturn (TOK_IDENT);
Packit 4a5d52
}
Packit 4a5d52
<PROP>]							{
Packit 4a5d52
	__IDL_flagsi &= ~IDLFP_PROPERTIES;
Packit 4a5d52
	SELECT_RESTART;
Packit 4a5d52
	tokreturn (yytext[0]);
Packit 4a5d52
}
Packit 4a5d52
<PROP>{prop_key}					{
Packit 4a5d52
	yylval.str = g_strdup (yytext);
Packit 4a5d52
	tokreturn (TOK_PROP_KEY);
Packit 4a5d52
}
Packit 4a5d52
<PROP>{prop_value}					{
Packit 4a5d52
	yylval.str = g_strdup (yytext + 1);
Packit 4a5d52
	yylval.str[strlen (yylval.str) - 1] = 0;
Packit 4a5d52
	tokreturn (TOK_PROP_VALUE);
Packit 4a5d52
}
Packit 4a5d52
<NATIVE>{native_type}					{
Packit 4a5d52
	__IDL_flagsi &= ~IDLFP_NATIVE;
Packit 4a5d52
	yylval.str = g_strdup (yytext);
Packit 4a5d52
	yylval.str[strlen (yylval.str) - 1] = 0;
Packit 4a5d52
	tokreturn (TOK_NATIVE_TYPE);
Packit 4a5d52
}
Packit 4a5d52
{sqstring}						{
Packit 4a5d52
	yylval.str = g_strdup (yytext + 1);
Packit 4a5d52
	yylval.str[strlen (yytext) - 2] = 0;
Packit 4a5d52
	tokreturn (TOK_SQSTRING);
Packit 4a5d52
}
Packit 4a5d52
{dqstring}						{
Packit 4a5d52
	yylval.str = g_strdup (yytext + 1);
Packit 4a5d52
	yylval.str[strlen (yytext) - 2] = 0;
Packit 4a5d52
	tokreturn (TOK_DQSTRING);
Packit 4a5d52
}
Packit 4a5d52
<*>{newline}		++__IDL_cur_line;
Packit 4a5d52
<*>\/\/.*		;
Packit 4a5d52
<*>\/\*							{
Packit 4a5d52
	int c;
Packit 4a5d52
Packit 4a5d52
	while (1) {
Packit 4a5d52
		while ((c = input ()) != '*' && c != EOF)
Packit 4a5d52
			if (c == '\n') ++__IDL_cur_line;
Packit 4a5d52
		if (c == '*') {
Packit 4a5d52
			while ((c = input ()) == '*') ;
Packit 4a5d52
			if (c == '/') break;
Packit 4a5d52
		}
Packit 4a5d52
		if (c == '\n') ++__IDL_cur_line;
Packit 4a5d52
		if (c == EOF) {
Packit 4a5d52
			yywarning (IDL_WARNING1, "End of file in comment");
Packit 4a5d52
			break;
Packit 4a5d52
		}
Packit 4a5d52
	}
Packit 4a5d52
}
Packit 4a5d52
<*>.			tokreturn (yytext[0]);
Packit 4a5d52
Packit 4a5d52
%%
Packit 4a5d52
Packit 4a5d52
void __IDL_lex_init (void)
Packit 4a5d52
{
Packit 4a5d52
	__IDL_inputcb = NULL;
Packit 4a5d52
	__IDL_cur_line = 1;
Packit 4a5d52
	__IDL_cur_token_line = 0;
Packit 4a5d52
	__IDL_prev_token_line = 0;
Packit 4a5d52
	__IDL_cur_filename = NULL;
Packit 4a5d52
	__IDL_cur_fileinfo = NULL;
Packit 4a5d52
	warn_underscores = 0;
Packit 4a5d52
}
Packit 4a5d52
Packit 4a5d52
void __IDL_lex_cleanup (void)
Packit 4a5d52
{
Packit 4a5d52
	__IDL_cur_filename = NULL;
Packit 4a5d52
#ifdef YY_NEW_FILE
Packit 4a5d52
	YY_NEW_FILE; /* obsolete with newer versions of flex */
Packit 4a5d52
#endif
Packit 4a5d52
}
Packit 4a5d52
Packit 4a5d52
int yywrap (void)
Packit 4a5d52
{
Packit 4a5d52
	return 1;
Packit 4a5d52
}
Packit 4a5d52
Packit 4a5d52
static int count_nl (const char *s)
Packit 4a5d52
{
Packit 4a5d52
	int i;
Packit 4a5d52
Packit 4a5d52
	for (i = 0;
Packit 4a5d52
	     (s = strchr (s, '\n')) != NULL;
Packit 4a5d52
	     ++s, ++i) ;
Packit 4a5d52
Packit 4a5d52
	return i;
Packit 4a5d52
}
Packit 4a5d52
Packit 4a5d52
/*
Packit 4a5d52
 * Local variables:
Packit 4a5d52
 * mode: C
Packit 4a5d52
 * c-basic-offset: 8
Packit 4a5d52
 * tab-width: 8
Packit 4a5d52
 * indent-tabs-mode: t
Packit 4a5d52
 * End:
Packit 4a5d52
 */