Annotation of src/usr.bin/lex/flex.skl, Revision 1.13
1.13 ! tedu 1: /* $OpenBSD: flex.skl,v 1.12 2013/11/04 17:03:32 millert Exp $ */
1.2 deraadt 2:
1.13 ! tedu 3: %# -*-C-*- vi: set ft=c:
! 4: %# This file is processed in several stages.
! 5: %# Here are the stages, as best as I can describe:
! 6: %#
! 7: %# 1. flex.skl is processed through GNU m4 during the
! 8: %# pre-compilation stage of flex. Only macros starting
! 9: %# with `m4preproc_' are processed, and quoting is normal.
! 10: %#
! 11: %# 2. The preprocessed skeleton is translated verbatim into a
! 12: %# C array, saved as "skel.c" and compiled into the flex binary.
! 13: %#
! 14: %# 3. At runtime, the skeleton is generated and filtered (again)
! 15: %# through m4. Macros beginning with `m4_' will be processed.
! 16: %# The quoting is "[[" and "]]" so we don't interfere with
! 17: %# user code.
! 18: %#
! 19: %# All generate macros for the m4 stage contain the text "m4" or "M4"
! 20: %# in them. This is to distinguish them from CPP macros.
! 21: %# The exception to this rule is YY_G, which is an m4 macro,
! 22: %# but it needs to be remain short because it is used everywhere.
! 23: %#
1.1 deraadt 24: /* A lexical scanner generated by flex */
25:
1.13 ! tedu 26: %# Macros for preproc stage.
! 27: m4preproc_changecom
! 28:
! 29: %# Macros for runtime processing stage.
! 30: m4_changecom
! 31: m4_changequote
! 32: m4_changequote([[, ]])
! 33:
! 34: %#
! 35: %# Lines in this skeleton starting with a "%" character are "control lines"
! 36: %# and affect the generation of the scanner. The possible control codes are
! 37: %# listed and processed in misc.c.
! 38: %#
! 39: %# %# - A comment. The current line is omitted from the generated scanner.
! 40: %# %if-c++-only - The following lines are printed for C++ scanners ONLY.
! 41: %# %if-c-only - The following lines are NOT printed for C++ scanners.
! 42: %# %if-c-or-c++ - The following lines are printed in BOTH C and C++ scanners.
! 43: %# %if-reentrant - Print for reentrant scanners.(push)
! 44: %# %if-not-reentrant - Print for non-reentrant scanners. (push)
! 45: %# %if-bison-bridge - Print for bison-bridge. (push)
! 46: %# %if-not-bison-bridge - Print for non-bison-bridge. (push)
! 47: %# %endif - pop from the previous if code.
! 48: %# %% - A stop-point, where code is inserted by flex.
! 49: %# Each stop-point is numbered here and also in the code generator.
! 50: %# (See gen.c, etc. for details.)
! 51: %# %not-for-header - Begin code that should NOT appear in a ".h" file.
! 52: %# %ok-for-header - %c and %e are used for building a header file.
! 53: %# %if-tables-serialization
! 54: %#
! 55: %# All control-lines EXCEPT comment lines ("%#") will be inserted into
! 56: %# the generated scanner as a C-style comment. This is to aid those who
! 57: %# edit the skeleton.
! 58: %#
! 59:
! 60: %not-for-header
! 61: %if-c-only
! 62: %if-not-reentrant
! 63: m4_ifelse(M4_YY_PREFIX,yy,,
! 64: #define yy_create_buffer M4_YY_PREFIX[[_create_buffer]]
! 65: #define yy_delete_buffer M4_YY_PREFIX[[_delete_buffer]]
! 66: #define yy_flex_debug M4_YY_PREFIX[[_flex_debug]]
! 67: #define yy_init_buffer M4_YY_PREFIX[[_init_buffer]]
! 68: #define yy_flush_buffer M4_YY_PREFIX[[_flush_buffer]]
! 69: #define yy_load_buffer_state M4_YY_PREFIX[[_load_buffer_state]]
! 70: #define yy_switch_to_buffer M4_YY_PREFIX[[_switch_to_buffer]]
! 71: #define yyin M4_YY_PREFIX[[in]]
! 72: #define yyleng M4_YY_PREFIX[[leng]]
! 73: #define yylex M4_YY_PREFIX[[lex]]
! 74: #define yylineno M4_YY_PREFIX[[lineno]]
! 75: #define yyout M4_YY_PREFIX[[out]]
! 76: #define yyrestart M4_YY_PREFIX[[restart]]
! 77: #define yytext M4_YY_PREFIX[[text]]
! 78: #define yywrap M4_YY_PREFIX[[wrap]]
! 79: #define yyalloc M4_YY_PREFIX[[alloc]]
! 80: #define yyrealloc M4_YY_PREFIX[[realloc]]
! 81: #define yyfree M4_YY_PREFIX[[free]]
! 82: )
! 83: %endif
! 84: %endif
! 85: %ok-for-header
1.1 deraadt 86:
87: #define FLEX_SCANNER
1.13 ! tedu 88: #define YY_FLEX_MAJOR_VERSION FLEX_MAJOR_VERSION
! 89: #define YY_FLEX_MINOR_VERSION FLEX_MINOR_VERSION
! 90: #define YY_FLEX_SUBMINOR_VERSION FLEX_SUBMINOR_VERSION
! 91: #if YY_FLEX_SUBMINOR_VERSION > 0
! 92: #define FLEX_BETA
! 93: #endif
! 94:
! 95: %# Some negated symbols
! 96: m4_ifdef( [[M4_YY_IN_HEADER]], , [[m4_define([[M4_YY_NOT_IN_HEADER]], [[]])]])
! 97: m4_ifdef( [[M4_YY_REENTRANT]], , [[m4_define([[M4_YY_NOT_REENTRANT]], [[]])]])
! 98:
! 99: %# This is the m4 way to say "(stack_used || is_reentrant)
! 100: m4_ifdef( [[M4_YY_STACK_USED]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])
! 101: m4_ifdef( [[M4_YY_REENTRANT]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])
! 102:
! 103: %# Prefixes.
! 104: %# The complexity here is necessary so that m4 preserves
! 105: %# the argument lists to each C function.
! 106:
! 107:
! 108: m4_ifdef( [[M4_YY_PREFIX]],, [[m4_define([[M4_YY_PREFIX]], [[yy]])]])
! 109:
! 110: m4preproc_define(`M4_GEN_PREFIX',
! 111: ``m4_define(yy[[$1]], [[M4_YY_PREFIX[[$1]]m4_ifelse($'`#,0,,[[($'`@)]])]])'')
! 112:
! 113: %if-c++-only
! 114: /* The c++ scanner is a mess. The FlexLexer.h header file relies on the
! 115: * following macro. This is required in order to pass the c++-multiple-scanners
! 116: * test in the regression suite. We get reports that it breaks inheritance.
! 117: * We will address this in a future release of flex, or omit the C++ scanner
! 118: * altogether.
! 119: */
! 120: #define yyFlexLexer M4_YY_PREFIX[[FlexLexer]]
! 121: %endif
! 122:
! 123: %if-c-only
! 124: M4_GEN_PREFIX(`_create_buffer')
! 125: M4_GEN_PREFIX(`_delete_buffer')
! 126: M4_GEN_PREFIX(`_scan_buffer')
! 127: M4_GEN_PREFIX(`_scan_string')
! 128: M4_GEN_PREFIX(`_scan_bytes')
! 129: M4_GEN_PREFIX(`_init_buffer')
! 130: M4_GEN_PREFIX(`_flush_buffer')
! 131: M4_GEN_PREFIX(`_load_buffer_state')
! 132: M4_GEN_PREFIX(`_switch_to_buffer')
! 133: M4_GEN_PREFIX(`push_buffer_state')
! 134: M4_GEN_PREFIX(`pop_buffer_state')
! 135: M4_GEN_PREFIX(`ensure_buffer_stack')
! 136: M4_GEN_PREFIX(`lex')
! 137: M4_GEN_PREFIX(`restart')
! 138: M4_GEN_PREFIX(`lex_init')
! 139: M4_GEN_PREFIX(`lex_init_extra')
! 140: M4_GEN_PREFIX(`lex_destroy')
! 141: M4_GEN_PREFIX(`get_debug')
! 142: M4_GEN_PREFIX(`set_debug')
! 143: M4_GEN_PREFIX(`get_extra')
! 144: M4_GEN_PREFIX(`set_extra')
! 145: M4_GEN_PREFIX(`get_in')
! 146: M4_GEN_PREFIX(`set_in')
! 147: M4_GEN_PREFIX(`get_out')
! 148: M4_GEN_PREFIX(`set_out')
! 149: M4_GEN_PREFIX(`get_leng')
! 150: M4_GEN_PREFIX(`get_text')
! 151: M4_GEN_PREFIX(`get_lineno')
! 152: M4_GEN_PREFIX(`set_lineno')
! 153: m4_ifdef( [[M4_YY_REENTRANT]],
! 154: [[
! 155: M4_GEN_PREFIX(`get_column')
! 156: M4_GEN_PREFIX(`set_column')
! 157: ]])
! 158: M4_GEN_PREFIX(`wrap')
! 159: %endif
! 160:
! 161: m4_ifdef( [[M4_YY_BISON_LVAL]],
! 162: [[
! 163: M4_GEN_PREFIX(`get_lval')
! 164: M4_GEN_PREFIX(`set_lval')
! 165: ]])
! 166:
! 167: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 168: [[
! 169: M4_GEN_PREFIX(`get_lloc')
! 170: M4_GEN_PREFIX(`set_lloc')
! 171: ]])
! 172:
! 173:
! 174: M4_GEN_PREFIX(`alloc')
! 175: M4_GEN_PREFIX(`realloc')
! 176: M4_GEN_PREFIX(`free')
! 177:
! 178: %if-c-only
! 179: m4_ifdef( [[M4_YY_NOT_REENTRANT]],
! 180: [[
! 181: M4_GEN_PREFIX(`text')
! 182: M4_GEN_PREFIX(`leng')
! 183: M4_GEN_PREFIX(`in')
! 184: M4_GEN_PREFIX(`out')
! 185: M4_GEN_PREFIX(`_flex_debug')
! 186: M4_GEN_PREFIX(`lineno')
! 187: ]])
! 188: %endif
! 189:
! 190:
! 191: m4_ifdef( [[M4_YY_TABLES_EXTERNAL]],
! 192: [[
! 193: M4_GEN_PREFIX(`tables_fload')
! 194: M4_GEN_PREFIX(`tables_destroy')
! 195: M4_GEN_PREFIX(`TABLES_NAME')
! 196: ]])
! 197:
! 198: /* First, we deal with platform-specific or compiler-specific issues. */
1.1 deraadt 199:
1.13 ! tedu 200: /* begin standard C headers. */
! 201: %if-c-only
1.1 deraadt 202: #include <stdio.h>
1.13 ! tedu 203: #include <string.h>
1.6 millert 204: #include <errno.h>
1.13 ! tedu 205: #include <stdlib.h>
! 206: %endif
1.1 deraadt 207:
1.13 ! tedu 208: %if-tables-serialization
! 209: #include <sys/types.h>
! 210: #include <netinet/in.h>
! 211: %endif
! 212: /* end standard C headers. */
! 213:
! 214: %if-c-or-c++
! 215: m4preproc_include(`flexint.h')
! 216: %endif
! 217:
! 218: %if-c++-only
! 219: /* begin standard C++ headers. */
! 220: #include <iostream>
! 221: #include <errno.h>
! 222: #include <cstdlib>
! 223: #include <cstdio>
! 224: #include <cstring>
! 225: /* end standard C++ headers. */
! 226: %endif
1.1 deraadt 227:
228: #ifdef __cplusplus
229:
230: /* The "const" storage-class-modifier is valid. */
231: #define YY_USE_CONST
232:
233: #else /* ! __cplusplus */
234:
1.13 ! tedu 235: /* C99 requires __STDC__ to be defined as 1. */
! 236: #if defined (__STDC__)
1.1 deraadt 237:
238: #define YY_USE_CONST
239:
1.13 ! tedu 240: #endif /* defined (__STDC__) */
1.1 deraadt 241: #endif /* ! __cplusplus */
242:
243: #ifdef YY_USE_CONST
244: #define yyconst const
245: #else
246: #define yyconst
247: #endif
248:
1.13 ! tedu 249: %# For compilers that can not handle prototypes.
! 250: %# e.g.,
! 251: %# The function prototype
! 252: %# int foo(int x, char* y);
! 253: %#
! 254: %# ...should be written as
! 255: %# int foo M4_YY_PARAMS(int x, char* y);
! 256: %#
! 257: %# ...which could possibly generate
! 258: %# int foo ();
! 259: %#
! 260: m4_ifdef( [[M4_YY_NO_ANSI_FUNC_PROTOS]],
! 261: [[
! 262: m4_define( [[M4_YY_PARAMS]], [[()]])
! 263: ]],
! 264: [[
! 265: m4_define( [[M4_YY_PARAMS]], [[($*)]])
! 266: ]])
1.1 deraadt 267:
1.13 ! tedu 268: %not-for-header
1.1 deraadt 269: /* Returned upon end-of-file. */
270: #define YY_NULL 0
1.13 ! tedu 271: %ok-for-header
1.1 deraadt 272:
1.13 ! tedu 273: %not-for-header
1.1 deraadt 274: /* Promotes a possibly negative, possibly signed char to an unsigned
275: * integer for use as an array index. If the signed char is negative,
276: * we want to instead treat it as an 8-bit unsigned char, hence the
277: * double cast.
278: */
279: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
1.13 ! tedu 280: %ok-for-header
! 281:
! 282:
! 283:
! 284: %if-reentrant
! 285:
! 286: /* An opaque pointer. */
! 287: #ifndef YY_TYPEDEF_YY_SCANNER_T
! 288: #define YY_TYPEDEF_YY_SCANNER_T
! 289: typedef void* yyscan_t;
! 290: #endif
! 291:
! 292: %# Declare yyguts variable
! 293: m4_define( [[M4_YY_DECL_GUTS_VAR]], [[struct yyguts_t * yyg = (struct yyguts_t*)yyscanner]])
! 294: %# Perform a noop access on yyguts to prevent unused variable complains
! 295: m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[(void)yyg]])
! 296: %# For use wherever a Global is accessed or assigned.
! 297: m4_define( [[YY_G]], [[yyg->$1]])
! 298:
! 299: %# For use in function prototypes to append the additional argument.
! 300: m4_define( [[M4_YY_PROTO_LAST_ARG]], [[, yyscan_t yyscanner]])
! 301: m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[yyscan_t yyscanner]])
! 302:
! 303: %# For use in function definitions to append the additional argument.
! 304: m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
! 305: [[
! 306: m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscanner]])
! 307: m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscanner]])
! 308: ]],
! 309: [[
! 310: m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscan_t yyscanner]])
! 311: m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscan_t yyscanner]])
! 312: ]])
! 313: m4_define( [[M4_YY_DECL_LAST_ARG]], [[yyscan_t yyscanner;]])
! 314:
! 315: %# For use in function calls to pass the additional argument.
! 316: m4_define( [[M4_YY_CALL_LAST_ARG]], [[, yyscanner]])
! 317: m4_define( [[M4_YY_CALL_ONLY_ARG]], [[yyscanner]])
! 318:
! 319: %# For use in function documentation to adjust for additional argument.
! 320: m4_define( [[M4_YY_DOC_PARAM]], [[@param yyscanner The scanner object.]])
! 321:
! 322: /* For convenience, these vars (plus the bison vars far below)
! 323: are macros in the reentrant scanner. */
! 324: #define yyin YY_G(yyin_r)
! 325: #define yyout YY_G(yyout_r)
! 326: #define yyextra YY_G(yyextra_r)
! 327: #define yyleng YY_G(yyleng_r)
! 328: #define yytext YY_G(yytext_r)
! 329: #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
! 330: #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
! 331: #define yy_flex_debug YY_G(yy_flex_debug_r)
! 332:
! 333: m4_define( [[M4_YY_INCR_LINENO]],
! 334: [[
! 335: do{ yylineno++;
! 336: yycolumn=0;
! 337: }while(0)
! 338: ]])
! 339:
! 340: %endif
! 341:
! 342:
! 343:
! 344: %if-not-reentrant
! 345:
! 346: m4_define( [[M4_YY_INCR_LINENO]],
! 347: [[
! 348: yylineno++;
! 349: ]])
! 350:
! 351: %# Define these macros to be no-ops.
! 352: m4_define( [[M4_YY_DECL_GUTS_VAR]], [[m4_dnl]])
! 353: m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[m4_dnl]])
! 354: m4_define( [[YY_G]], [[($1)]])
! 355: m4_define( [[M4_YY_PROTO_LAST_ARG]])
! 356: m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[void]])
! 357: m4_define( [[M4_YY_DEF_LAST_ARG]])
! 358:
! 359: m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
! 360: [[
! 361: m4_define( [[M4_YY_DEF_ONLY_ARG]])
! 362: ]],
! 363: [[
! 364: m4_define( [[M4_YY_DEF_ONLY_ARG]], [[void]])
! 365: ]])
! 366: m4_define([[M4_YY_DECL_LAST_ARG]])
! 367: m4_define([[M4_YY_CALL_LAST_ARG]])
! 368: m4_define([[M4_YY_CALL_ONLY_ARG]])
! 369: m4_define( [[M4_YY_DOC_PARAM]], [[]])
! 370:
! 371: %endif
! 372:
! 373:
! 374: m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
! 375: [[
! 376: %# For compilers that need traditional function definitions.
! 377: %# e.g.,
! 378: %# The function prototype taking 2 arguments
! 379: %# int foo (int x, char* y)
! 380: %#
! 381: %# ...should be written as
! 382: %# int foo YYFARGS2(int,x, char*,y)
! 383: %#
! 384: %# ...which could possibly generate
! 385: %# int foo (x,y,yyscanner)
! 386: %# int x;
! 387: %# char * y;
! 388: %# yyscan_t yyscanner;
! 389: %#
! 390: %# Generate traditional function defs
! 391: m4_define( [[YYFARGS0]], [[(M4_YY_DEF_ONLY_ARG) [[\]]
! 392: M4_YY_DECL_LAST_ARG]])
! 393: m4_define( [[YYFARGS1]], [[($2 M4_YY_DEF_LAST_ARG) [[\]]
! 394: $1 $2; [[\]]
! 395: M4_YY_DECL_LAST_ARG]])
! 396: m4_define( [[YYFARGS2]], [[($2,$4 M4_YY_DEF_LAST_ARG) [[\]]
! 397: $1 $2; [[\]]
! 398: $3 $4; [[\]]
! 399: M4_YY_DECL_LAST_ARG]])
! 400: m4_define( [[YYFARGS3]], [[($2,$4,$6 M4_YY_DEF_LAST_ARG) [[\]]
! 401: $1 $2; [[\]]
! 402: $3 $4; [[\]]
! 403: $5 $6; [[\]]
! 404: M4_YY_DECL_LAST_ARG]])
! 405: ]],
! 406: [[
! 407: %# Generate C99 function defs.
! 408: m4_define( [[YYFARGS0]], [[(M4_YY_DEF_ONLY_ARG)]])
! 409: m4_define( [[YYFARGS1]], [[($1 $2 M4_YY_DEF_LAST_ARG)]])
! 410: m4_define( [[YYFARGS2]], [[($1 $2, $3 $4 M4_YY_DEF_LAST_ARG)]])
! 411: m4_define( [[YYFARGS3]], [[($1 $2, $3 $4, $5 $6 M4_YY_DEF_LAST_ARG)]])
! 412: ]])
1.1 deraadt 413:
1.13 ! tedu 414: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 415: [[
1.1 deraadt 416: /* Enter a start condition. This macro really ought to take a parameter,
417: * but we do it the disgusting crufty way forced on us by the ()-less
418: * definition of BEGIN.
419: */
1.13 ! tedu 420: #define BEGIN YY_G(yy_start) = 1 + 2 *
! 421: ]])
1.1 deraadt 422:
1.13 ! tedu 423: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 424: [[
1.1 deraadt 425: /* Translate the current start state into a value that can be later handed
426: * to BEGIN to return to the state. The YYSTATE alias is for lex
427: * compatibility.
428: */
1.13 ! tedu 429: #define YY_START ((YY_G(yy_start) - 1) / 2)
1.1 deraadt 430: #define YYSTATE YY_START
1.13 ! tedu 431: ]])
1.1 deraadt 432:
1.13 ! tedu 433: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 434: [[
1.1 deraadt 435: /* Action number for EOF rule of a given start state. */
436: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
1.13 ! tedu 437: ]])
1.1 deraadt 438:
1.13 ! tedu 439: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 440: [[
1.1 deraadt 441: /* Special action meaning "start processing a new file". */
1.13 ! tedu 442: #define YY_NEW_FILE yyrestart( yyin M4_YY_CALL_LAST_ARG )
! 443: ]])
1.1 deraadt 444:
1.13 ! tedu 445: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 446: [[
1.1 deraadt 447: #define YY_END_OF_BUFFER_CHAR 0
1.13 ! tedu 448: ]])
1.1 deraadt 449:
450: /* Size of default input buffer. */
1.13 ! tedu 451: #ifndef YY_BUF_SIZE
1.1 deraadt 452: #define YY_BUF_SIZE 16384
1.13 ! tedu 453: #endif
! 454:
! 455: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 456: [[
! 457: /* The state buf must be large enough to hold one state per character in the main buffer.
! 458: */
! 459: #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
! 460: ]])
! 461:
1.1 deraadt 462:
1.13 ! tedu 463: #ifndef YY_TYPEDEF_YY_BUFFER_STATE
! 464: #define YY_TYPEDEF_YY_BUFFER_STATE
1.1 deraadt 465: typedef struct yy_buffer_state *YY_BUFFER_STATE;
1.13 ! tedu 466: #endif
! 467:
! 468: #ifndef YY_TYPEDEF_YY_SIZE_T
! 469: #define YY_TYPEDEF_YY_SIZE_T
! 470: typedef size_t yy_size_t;
! 471: #endif
1.1 deraadt 472:
1.13 ! tedu 473: %if-not-reentrant
! 474: extern yy_size_t yyleng;
! 475: %endif
! 476:
! 477: %if-c-only
! 478: %if-not-reentrant
1.1 deraadt 479: extern FILE *yyin, *yyout;
1.13 ! tedu 480: %endif
! 481: %endif
1.1 deraadt 482:
1.13 ! tedu 483: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 484: [[
1.1 deraadt 485: #define EOB_ACT_CONTINUE_SCAN 0
486: #define EOB_ACT_END_OF_FILE 1
487: #define EOB_ACT_LAST_MATCH 2
1.13 ! tedu 488: ]])
1.1 deraadt 489:
1.13 ! tedu 490: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 491: [[
! 492: m4_ifdef( [[M4_YY_USE_LINENO]],
! 493: [[
! 494: /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
! 495: * access to the local variable yy_act. Since yyless() is a macro, it would break
! 496: * existing scanners that call yyless() from OUTSIDE yylex.
! 497: * One obvious solution it to make yy_act a global. I tried that, and saw
! 498: * a 5% performance hit in a non-yylineno scanner, because yy_act is
! 499: * normally declared as a register variable-- so it is not worth it.
! 500: */
! 501: #define YY_LESS_LINENO(n) \
! 502: do { \
! 503: int yyl;\
! 504: for ( yyl = n; yyl < yyleng; ++yyl )\
! 505: if ( yytext[yyl] == '\n' )\
! 506: --yylineno;\
! 507: }while(0)
! 508: #define YY_LINENO_REWIND_TO(dst) \
! 509: do {\
! 510: const char *p;\
! 511: for ( p = yy_cp-1; p >= (dst); --p)\
! 512: if ( *p == '\n' )\
! 513: --yylineno;\
! 514: }while(0)
! 515: ]],
! 516: [[
! 517: #define YY_LESS_LINENO(n)
! 518: #define YY_LINENO_REWIND_TO(ptr)
! 519: ]])
! 520: ]])
! 521:
! 522: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 523: [[
! 524: /* Return all but the first "n" matched characters back to the input stream. */
1.1 deraadt 525: #define yyless(n) \
526: do \
527: { \
528: /* Undo effects of setting up yytext. */ \
1.13 ! tedu 529: int yyless_macro_arg = (n); \
! 530: YY_LESS_LINENO(yyless_macro_arg);\
! 531: *yy_cp = YY_G(yy_hold_char); \
1.3 millert 532: YY_RESTORE_YY_MORE_OFFSET \
1.13 ! tedu 533: YY_G(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
1.1 deraadt 534: YY_DO_BEFORE_ACTION; /* set up yytext again */ \
535: } \
536: while ( 0 )
1.13 ! tedu 537: ]])
1.1 deraadt 538:
1.13 ! tedu 539: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 540: [[
! 541: #define unput(c) yyunput( c, YY_G(yytext_ptr) M4_YY_CALL_LAST_ARG )
! 542: ]])
1.1 deraadt 543:
1.13 ! tedu 544: #ifndef YY_STRUCT_YY_BUFFER_STATE
! 545: #define YY_STRUCT_YY_BUFFER_STATE
1.1 deraadt 546: struct yy_buffer_state
547: {
1.13 ! tedu 548: %if-c-only
1.1 deraadt 549: FILE *yy_input_file;
1.13 ! tedu 550: %endif
! 551:
! 552: %if-c++-only
1.7 espie 553: std::istream* yy_input_file;
1.13 ! tedu 554: %endif
! 555:
1.1 deraadt 556:
557: char *yy_ch_buf; /* input buffer */
558: char *yy_buf_pos; /* current position in input buffer */
559:
560: /* Size of input buffer in bytes, not including room for EOB
561: * characters.
562: */
563: yy_size_t yy_buf_size;
564:
565: /* Number of characters read into yy_ch_buf, not including EOB
566: * characters.
567: */
1.13 ! tedu 568: yy_size_t yy_n_chars;
1.1 deraadt 569:
570: /* Whether we "own" the buffer - i.e., we know we created it,
571: * and can realloc() it to grow it, and should free() it to
572: * delete it.
573: */
574: int yy_is_our_buffer;
575:
576: /* Whether this is an "interactive" input source; if so, and
577: * if we're using stdio for input, then we want to use getc()
578: * instead of fread(), to make sure we stop fetching input after
579: * each newline.
580: */
581: int yy_is_interactive;
582:
583: /* Whether we're considered to be at the beginning of a line.
584: * If so, '^' rules will be active on the next match, otherwise
585: * not.
586: */
587: int yy_at_bol;
588:
1.13 ! tedu 589: int yy_bs_lineno; /**< The line count. */
! 590: int yy_bs_column; /**< The column count. */
! 591:
! 592:
1.1 deraadt 593: /* Whether to try to fill the input buffer when we reach the
594: * end of it.
595: */
596: int yy_fill_buffer;
597:
598: int yy_buffer_status;
1.13 ! tedu 599: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 600: [[
1.1 deraadt 601: #define YY_BUFFER_NEW 0
602: #define YY_BUFFER_NORMAL 1
603: /* When an EOF's been seen but there's still some text to process
604: * then we mark the buffer as YY_EOF_PENDING, to indicate that we
605: * shouldn't try reading from the input source any more. We might
606: * still have a bunch of tokens to match, though, because of
607: * possible backing-up.
608: *
609: * When we actually see the EOF, we change the status to "new"
610: * (via yyrestart()), so that the user can continue scanning by
611: * just pointing yyin at a new input file.
612: */
613: #define YY_BUFFER_EOF_PENDING 2
1.13 ! tedu 614: ]])
1.1 deraadt 615: };
1.13 ! tedu 616: #endif /* !YY_STRUCT_YY_BUFFER_STATE */
1.1 deraadt 617:
1.13 ! tedu 618: %if-c-only Standard (non-C++) definition
! 619: %not-for-header
! 620: %if-not-reentrant
! 621:
! 622: /* Stack of input buffers. */
! 623: static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
! 624: static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
! 625: static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
! 626: %endif
! 627: %ok-for-header
! 628: %endif
1.1 deraadt 629:
1.13 ! tedu 630: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 631: [[
1.1 deraadt 632: /* We provide macros for accessing buffer states in case in the
633: * future we want to put the buffer states in a more general
634: * "scanner state".
1.13 ! tedu 635: *
! 636: * Returns the top of the stack, or NULL.
! 637: */
! 638: #define YY_CURRENT_BUFFER ( YY_G(yy_buffer_stack) \
! 639: ? YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)] \
! 640: : NULL)
! 641: ]])
! 642:
! 643: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 644: [[
! 645: /* Same as previous macro, but useful when we know that the buffer stack is not
! 646: * NULL or when we need an lvalue. For internal use only.
1.1 deraadt 647: */
1.13 ! tedu 648: #define YY_CURRENT_BUFFER_LVALUE YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)]
! 649: ]])
1.1 deraadt 650:
1.13 ! tedu 651: %if-c-only Standard (non-C++) definition
1.1 deraadt 652:
1.13 ! tedu 653: %if-not-reentrant
! 654: %not-for-header
1.1 deraadt 655: /* yy_hold_char holds the character lost when yytext is formed. */
656: static char yy_hold_char;
1.13 ! tedu 657: static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
! 658: yy_size_t yyleng;
1.1 deraadt 659:
660: /* Points to current character in buffer. */
661: static char *yy_c_buf_p = (char *) 0;
1.13 ! tedu 662: static int yy_init = 0; /* whether we need to initialize */
1.1 deraadt 663: static int yy_start = 0; /* start state number */
664:
665: /* Flag which is used to allow yywrap()'s to do buffer switches
666: * instead of setting up a fresh yyin. A bit of a hack ...
667: */
668: static int yy_did_buffer_switch_on_eof;
1.13 ! tedu 669: %ok-for-header
! 670: %endif
1.1 deraadt 671:
1.13 ! tedu 672: void yyrestart M4_YY_PARAMS( FILE *input_file M4_YY_PROTO_LAST_ARG );
! 673: void yy_switch_to_buffer M4_YY_PARAMS( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );
! 674: YY_BUFFER_STATE yy_create_buffer M4_YY_PARAMS( FILE *file, int size M4_YY_PROTO_LAST_ARG );
! 675: void yy_delete_buffer M4_YY_PARAMS( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );
! 676: void yy_flush_buffer M4_YY_PARAMS( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );
! 677: void yypush_buffer_state M4_YY_PARAMS( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );
! 678: void yypop_buffer_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 679:
! 680: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 681: [[
! 682: static void yyensure_buffer_stack M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 683: static void yy_load_buffer_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 684: static void yy_init_buffer M4_YY_PARAMS( YY_BUFFER_STATE b, FILE *file M4_YY_PROTO_LAST_ARG );
! 685: ]])
! 686:
! 687: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 688: [[
! 689: #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG)
! 690: ]])
! 691:
! 692: YY_BUFFER_STATE yy_scan_buffer M4_YY_PARAMS( char *base, yy_size_t size M4_YY_PROTO_LAST_ARG );
! 693: YY_BUFFER_STATE yy_scan_string M4_YY_PARAMS( yyconst char *yy_str M4_YY_PROTO_LAST_ARG );
! 694: YY_BUFFER_STATE yy_scan_bytes M4_YY_PARAMS( yyconst char *bytes, yy_size_t len M4_YY_PROTO_LAST_ARG );
! 695:
! 696: %endif
! 697:
! 698: void *yyalloc M4_YY_PARAMS( yy_size_t M4_YY_PROTO_LAST_ARG );
! 699: void *yyrealloc M4_YY_PARAMS( void *, yy_size_t M4_YY_PROTO_LAST_ARG );
! 700: void yyfree M4_YY_PARAMS( void * M4_YY_PROTO_LAST_ARG );
1.1 deraadt 701:
1.13 ! tedu 702: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 703: [[
1.1 deraadt 704: #define yy_new_buffer yy_create_buffer
1.13 ! tedu 705: ]])
1.1 deraadt 706:
1.13 ! tedu 707: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 708: [[
1.1 deraadt 709: #define yy_set_interactive(is_interactive) \
710: { \
1.13 ! tedu 711: if ( ! YY_CURRENT_BUFFER ){ \
! 712: yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \
! 713: YY_CURRENT_BUFFER_LVALUE = \
! 714: yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \
! 715: } \
! 716: YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
1.1 deraadt 717: }
1.13 ! tedu 718: ]])
1.1 deraadt 719:
1.13 ! tedu 720: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 721: [[
1.1 deraadt 722: #define yy_set_bol(at_bol) \
723: { \
1.13 ! tedu 724: if ( ! YY_CURRENT_BUFFER ){\
! 725: yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \
! 726: YY_CURRENT_BUFFER_LVALUE = \
! 727: yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \
! 728: } \
! 729: YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
! 730: }
! 731: ]])
! 732:
! 733: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 734: [[
! 735: #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
! 736: ]])
! 737:
! 738: %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
! 739:
! 740: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 741: [[
! 742: %% [1.5] DFA
! 743: ]])
! 744:
! 745: %if-c-only Standard (non-C++) definition
! 746:
! 747: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 748: [[
! 749: static yy_state_type yy_get_previous_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 750: static yy_state_type yy_try_NUL_trans M4_YY_PARAMS( yy_state_type current_state M4_YY_PROTO_LAST_ARG);
! 751: static int yy_get_next_buffer M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 752: static void yy_fatal_error M4_YY_PARAMS( yyconst char msg[] M4_YY_PROTO_LAST_ARG );
! 753: ]])
1.1 deraadt 754:
1.13 ! tedu 755: %endif
1.1 deraadt 756:
1.13 ! tedu 757: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 758: [[
1.1 deraadt 759: /* Done after the current pattern has been matched and before the
760: * corresponding action - sets up yytext.
761: */
762: #define YY_DO_BEFORE_ACTION \
1.13 ! tedu 763: YY_G(yytext_ptr) = yy_bp; \
! 764: %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \
! 765: YY_G(yy_hold_char) = *yy_cp; \
1.1 deraadt 766: *yy_cp = '\0'; \
1.13 ! tedu 767: %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \
! 768: YY_G(yy_c_buf_p) = yy_cp;
! 769: ]])
! 770:
! 771: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 772: [[
! 773: %% [4.0] data tables for the DFA and the user's section 1 definitions go here
! 774: ]])
! 775:
! 776: m4_ifdef( [[M4_YY_IN_HEADER]], [[#ifdef YY_HEADER_EXPORT_START_CONDITIONS]])
! 777: M4_YY_SC_DEFS
! 778: m4_ifdef( [[M4_YY_IN_HEADER]], [[#endif]])
! 779:
! 780: m4_ifdef( [[M4_YY_NO_UNISTD_H]],,
! 781: [[
! 782: #ifndef YY_NO_UNISTD_H
! 783: /* Special case for "unistd.h", since it is non-ANSI. We include it way
! 784: * down here because we want the user's section 1 to have been scanned first.
! 785: * The user has a chance to override it with an option.
! 786: */
! 787: %if-c-only
! 788: #include <unistd.h>
! 789: %endif
! 790: %if-c++-only
! 791: #include <unistd.h>
! 792: %endif
! 793: #endif
! 794: ]])
1.1 deraadt 795:
1.13 ! tedu 796: m4_ifdef( [[M4_EXTRA_TYPE_DEFS]],
! 797: [[
! 798: #define YY_EXTRA_TYPE M4_EXTRA_TYPE_DEFS
! 799: ]],
! 800: [[
! 801: #ifndef YY_EXTRA_TYPE
! 802: #define YY_EXTRA_TYPE void *
! 803: #endif
! 804: ]]
! 805: )
! 806:
! 807: %if-c-only Reentrant structure and macros (non-C++).
! 808: %if-reentrant
! 809:
! 810: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 811: [[
! 812: /* Holds the entire state of the reentrant scanner. */
! 813: struct yyguts_t
! 814: {
! 815:
! 816: /* User-defined. Not touched by flex. */
! 817: YY_EXTRA_TYPE yyextra_r;
! 818:
! 819: /* The rest are the same as the globals declared in the non-reentrant scanner. */
! 820: FILE *yyin_r, *yyout_r;
! 821: size_t yy_buffer_stack_top; /**< index of top of stack. */
! 822: size_t yy_buffer_stack_max; /**< capacity of stack. */
! 823: YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
! 824: char yy_hold_char;
! 825: yy_size_t yy_n_chars;
! 826: yy_size_t yyleng_r;
! 827: char *yy_c_buf_p;
! 828: int yy_init;
! 829: int yy_start;
! 830: int yy_did_buffer_switch_on_eof;
! 831: int yy_start_stack_ptr;
! 832: int yy_start_stack_depth;
! 833: int *yy_start_stack;
! 834: yy_state_type yy_last_accepting_state;
! 835: char* yy_last_accepting_cpos;
! 836:
! 837: int yylineno_r;
! 838: int yy_flex_debug_r;
! 839:
! 840: m4_ifdef( [[M4_YY_USES_REJECT]],
! 841: [[
! 842: yy_state_type *yy_state_buf;
! 843: yy_state_type *yy_state_ptr;
! 844: char *yy_full_match;
! 845: int yy_lp;
! 846:
! 847: /* These are only needed for trailing context rules,
! 848: * but there's no conditional variable for that yet. */
! 849: int yy_looking_for_trail_begin;
! 850: int yy_full_lp;
! 851: int *yy_full_state;
! 852: ]])
! 853:
! 854: m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],
! 855: [[
! 856: char yytext_r[YYLMAX];
! 857: char *yytext_ptr;
! 858: int yy_more_offset;
! 859: int yy_prev_more_offset;
! 860: ]],
! 861: [[
! 862: char *yytext_r;
! 863: int yy_more_flag;
! 864: int yy_more_len;
! 865: ]])
! 866:
! 867: m4_ifdef( [[M4_YY_BISON_LVAL]],
! 868: [[
! 869: YYSTYPE * yylval_r;
! 870: ]])
! 871:
! 872: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 873: [[
! 874: YYLTYPE * yylloc_r;
! 875: ]])
! 876:
! 877: }; /* end struct yyguts_t */
! 878: ]])
! 879:
! 880:
! 881: %if-c-only
! 882: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 883: [[
! 884: static int yy_init_globals M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 885: ]])
! 886: %endif
! 887:
! 888: %if-reentrant
! 889:
! 890: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 891: [[
! 892: m4_ifdef( [[M4_YY_BISON_LVAL]],
! 893: [[
! 894: /* This must go here because YYSTYPE and YYLTYPE are included
! 895: * from bison output in section 1.*/
! 896: # define yylval YY_G(yylval_r)
! 897: ]])
! 898:
! 899: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 900: [[
! 901: # define yylloc YY_G(yylloc_r)
! 902: ]])
! 903: ]])
! 904:
! 905: int yylex_init M4_YY_PARAMS(yyscan_t* scanner);
! 906:
! 907: int yylex_init_extra M4_YY_PARAMS( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
! 908:
! 909: %endif
! 910:
! 911: %endif End reentrant structures and macros.
! 912:
! 913: /* Accessor methods to globals.
! 914: These are made visible to non-reentrant scanners for convenience. */
! 915:
! 916: m4_ifdef( [[M4_YY_NO_DESTROY]],,
! 917: [[
! 918: int yylex_destroy M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 919: ]])
! 920:
! 921: m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,
! 922: [[
! 923: int yyget_debug M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 924: ]])
! 925:
! 926: m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,
! 927: [[
! 928: void yyset_debug M4_YY_PARAMS( int debug_flag M4_YY_PROTO_LAST_ARG );
! 929: ]])
! 930:
! 931: m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,
! 932: [[
! 933: YY_EXTRA_TYPE yyget_extra M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 934: ]])
! 935:
! 936: m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,
! 937: [[
! 938: void yyset_extra M4_YY_PARAMS( YY_EXTRA_TYPE user_defined M4_YY_PROTO_LAST_ARG );
! 939: ]])
! 940:
! 941: m4_ifdef( [[M4_YY_NO_GET_IN]],,
! 942: [[
! 943: FILE *yyget_in M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 944: ]])
! 945:
! 946: m4_ifdef( [[M4_YY_NO_SET_IN]],,
! 947: [[
! 948: void yyset_in M4_YY_PARAMS( FILE * in_str M4_YY_PROTO_LAST_ARG );
! 949: ]])
! 950:
! 951: m4_ifdef( [[M4_YY_NO_GET_OUT]],,
! 952: [[
! 953: FILE *yyget_out M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 954: ]])
! 955:
! 956: m4_ifdef( [[M4_YY_NO_SET_OUT]],,
! 957: [[
! 958: void yyset_out M4_YY_PARAMS( FILE * out_str M4_YY_PROTO_LAST_ARG );
! 959: ]])
! 960:
! 961: m4_ifdef( [[M4_YY_NO_GET_LENG]],,
! 962: [[
! 963: yy_size_t yyget_leng M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 964: ]])
! 965:
! 966: m4_ifdef( [[M4_YY_NO_GET_TEXT]],,
! 967: [[
! 968: char *yyget_text M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 969: ]])
! 970:
! 971: m4_ifdef( [[M4_YY_NO_GET_LINENO]],,
! 972: [[
! 973: int yyget_lineno M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 974: ]])
! 975:
! 976: m4_ifdef( [[M4_YY_NO_SET_LINENO]],,
! 977: [[
! 978: void yyset_lineno M4_YY_PARAMS( int line_number M4_YY_PROTO_LAST_ARG );
! 979: ]])
! 980:
! 981: m4_ifdef( [[M4_YY_REENTRANT]],
! 982: [[
! 983: m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
! 984: [[
! 985: int yyget_column M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 986: ]])
! 987: ]])
! 988:
! 989: m4_ifdef( [[M4_YY_REENTRANT]],
! 990: [[
! 991: m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
! 992: [[
! 993: void yyset_column M4_YY_PARAMS( int column_no M4_YY_PROTO_LAST_ARG );
! 994: ]])
! 995: ]])
! 996:
! 997: %if-bison-bridge
! 998: m4_ifdef( [[M4_YY_NO_GET_LVAL]],,
! 999: [[
! 1000: YYSTYPE * yyget_lval M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 1001: ]])
! 1002:
! 1003: void yyset_lval M4_YY_PARAMS( YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG );
! 1004:
! 1005: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 1006: [[
! 1007: m4_ifdef( [[M4_YY_NO_GET_LLOC]],,
! 1008: [[
! 1009: YYLTYPE *yyget_lloc M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 1010: ]])
! 1011:
! 1012: m4_ifdef( [[M4_YY_NO_SET_LLOC]],,
! 1013: [[
! 1014: void yyset_lloc M4_YY_PARAMS( YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG );
! 1015: ]])
! 1016: ]])
! 1017: %endif
1.1 deraadt 1018:
1019: /* Macros after this point can all be overridden by user definitions in
1020: * section 1.
1021: */
1022:
1023: #ifndef YY_SKIP_YYWRAP
1024: #ifdef __cplusplus
1.13 ! tedu 1025: extern "C" int yywrap M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
1.1 deraadt 1026: #else
1.13 ! tedu 1027: extern int yywrap M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
1.1 deraadt 1028: #endif
1029: #endif
1030:
1.13 ! tedu 1031: %not-for-header
! 1032: m4_ifdef( [[M4_YY_NO_UNPUT]],,
! 1033: [[
! 1034: static void yyunput M4_YY_PARAMS( int c, char *buf_ptr M4_YY_PROTO_LAST_ARG);
! 1035: ]])
! 1036: %ok-for-header
! 1037: %endif
1.1 deraadt 1038:
1039: #ifndef yytext_ptr
1.13 ! tedu 1040: static void yy_flex_strncpy M4_YY_PARAMS( char *, yyconst char *, int M4_YY_PROTO_LAST_ARG);
1.1 deraadt 1041: #endif
1042:
1.3 millert 1043: #ifdef YY_NEED_STRLEN
1.13 ! tedu 1044: static int yy_flex_strlen M4_YY_PARAMS( yyconst char * M4_YY_PROTO_LAST_ARG);
1.3 millert 1045: #endif
1046:
1.1 deraadt 1047: #ifndef YY_NO_INPUT
1.13 ! tedu 1048: %if-c-only Standard (non-C++) definition
! 1049: %not-for-header
1.1 deraadt 1050: #ifdef __cplusplus
1.13 ! tedu 1051: static int yyinput M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
1.1 deraadt 1052: #else
1.13 ! tedu 1053: static int input M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
1.1 deraadt 1054: #endif
1.13 ! tedu 1055: %ok-for-header
! 1056: %endif
1.1 deraadt 1057: #endif
1058:
1059:
1.13 ! tedu 1060: %if-c-only
! 1061: %# TODO: This is messy.
! 1062: m4_ifdef( [[M4_YY_STACK_USED]],
! 1063: [[
! 1064:
! 1065: m4_ifdef( [[M4_YY_NOT_REENTRANT]],
! 1066: [[
! 1067: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1068: [[
! 1069: static int yy_start_stack_ptr = 0;
! 1070: static int yy_start_stack_depth = 0;
! 1071: static int *yy_start_stack = NULL;
! 1072: ]])
! 1073: ]])
! 1074:
! 1075: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1076: [[
! 1077: m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,
! 1078: [[
! 1079: static void yy_push_state M4_YY_PARAMS( int new_state M4_YY_PROTO_LAST_ARG);
! 1080: ]])
! 1081: m4_ifdef( [[M4_YY_NO_POP_STATE]],,
! 1082: [[
! 1083: static void yy_pop_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 1084: ]])
! 1085: m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
! 1086: [[
! 1087: static int yy_top_state M4_YY_PARAMS( M4_YY_PROTO_ONLY_ARG );
! 1088: ]])
! 1089: ]])
! 1090:
! 1091: ]],
! 1092: [[
! 1093: m4_define( [[M4_YY_NO_PUSH_STATE]])
! 1094: m4_define( [[M4_YY_NO_POP_STATE]])
! 1095: m4_define( [[M4_YY_NO_TOP_STATE]])
! 1096: ]])
! 1097: %endif
1.1 deraadt 1098:
1099: /* Amount of stuff to slurp up with each read. */
1100: #ifndef YY_READ_BUF_SIZE
1101: #define YY_READ_BUF_SIZE 8192
1102: #endif
1103:
1.13 ! tedu 1104: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1105: [[
1.1 deraadt 1106: /* Copy whatever the last rule matched to the standard output. */
1107: #ifndef ECHO
1.13 ! tedu 1108: %if-c-only Standard (non-C++) definition
1.1 deraadt 1109: /* This used to be an fputs(), but since the string might contain NUL's,
1110: * we now use fwrite().
1111: */
1.13 ! tedu 1112: #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
! 1113: %endif
! 1114: %if-c++-only C++ definition
1.1 deraadt 1115: #define ECHO LexerOutput( yytext, yyleng )
1.13 ! tedu 1116: %endif
1.1 deraadt 1117: #endif
1.13 ! tedu 1118: ]])
1.1 deraadt 1119:
1.13 ! tedu 1120: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1121: [[
1.1 deraadt 1122: /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1123: * is returned in "result".
1124: */
1125: #ifndef YY_INPUT
1126: #define YY_INPUT(buf,result,max_size) \
1.13 ! tedu 1127: %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \
! 1128: \
! 1129: %if-c++-only C++ definition \
1.1 deraadt 1130: if ( (result = LexerInput( (char *) buf, max_size )) < 0 ) \
1131: YY_FATAL_ERROR( "input in flex scanner failed" );
1.13 ! tedu 1132: %endif
! 1133:
1.1 deraadt 1134: #endif
1.13 ! tedu 1135: ]])
1.1 deraadt 1136:
1.13 ! tedu 1137: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1138: [[
1.1 deraadt 1139: /* No semi-colon after return; correct usage is to write "yyterminate();" -
1140: * we don't want an extra ';' after the "return" because that will cause
1141: * some compilers to complain about unreachable statements.
1142: */
1143: #ifndef yyterminate
1144: #define yyterminate() return YY_NULL
1145: #endif
1.13 ! tedu 1146: ]])
1.1 deraadt 1147:
1148: /* Number of entries by which start-condition stack grows. */
1149: #ifndef YY_START_STACK_INCR
1150: #define YY_START_STACK_INCR 25
1151: #endif
1152:
1.13 ! tedu 1153: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1154: [[
1.1 deraadt 1155: /* Report a fatal error. */
1156: #ifndef YY_FATAL_ERROR
1.13 ! tedu 1157: %if-c-only
! 1158: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg M4_YY_CALL_LAST_ARG)
! 1159: %endif
! 1160: %if-c++-only
1.1 deraadt 1161: #define YY_FATAL_ERROR(msg) LexerError( msg )
1.13 ! tedu 1162: %endif
1.1 deraadt 1163: #endif
1.13 ! tedu 1164: ]])
! 1165:
! 1166: %if-tables-serialization structures and prototypes
! 1167: m4preproc_include(`tables_shared.h')
! 1168:
! 1169: /* Load the DFA tables from the given stream. */
! 1170: int yytables_fload M4_YY_PARAMS(FILE * fp M4_YY_PROTO_LAST_ARG);
! 1171:
! 1172: /* Unload the tables from memory. */
! 1173: int yytables_destroy M4_YY_PARAMS(M4_YY_PROTO_ONLY_ARG);
! 1174: %not-for-header
! 1175:
! 1176: /** Describes a mapping from a serialized table id to its deserialized state in
! 1177: * this scanner. This is the bridge between our "generic" deserialization code
! 1178: * and the specifics of this scanner.
! 1179: */
! 1180: struct yytbl_dmap {
! 1181: enum yytbl_id dm_id;/**< table identifier */
! 1182: void **dm_arr; /**< address of pointer to store the deserialized table. */
! 1183: size_t dm_sz; /**< local sizeof() each element in table. */
! 1184: };
! 1185:
! 1186: /** A {0,0,0}-terminated list of structs, forming the map */
! 1187: static struct yytbl_dmap yydmap[] =
! 1188: {
! 1189: %tables-yydmap generated elements
! 1190: {0,0,0}
! 1191: };
! 1192:
! 1193: /** A tables-reader object to maintain some state in the read. */
! 1194: struct yytbl_reader {
! 1195: FILE * fp; /**< input stream */
! 1196: flex_uint32_t bread; /**< bytes read since beginning of current tableset */
! 1197: };
! 1198:
! 1199: %endif
! 1200: /* end tables serialization structures and prototypes */
! 1201:
! 1202: %ok-for-header
1.1 deraadt 1203:
1204: /* Default declaration of generated scanner - a define so the user can
1205: * easily add parameters.
1206: */
1207: #ifndef YY_DECL
1.13 ! tedu 1208: #define YY_DECL_IS_OURS 1
! 1209: %if-c-only Standard (non-C++) definition
! 1210:
! 1211:
! 1212: m4_define( [[M4_YY_LEX_PROTO]], [[M4_YY_PARAMS(M4_YY_PROTO_ONLY_ARG)]])
! 1213: m4_define( [[M4_YY_LEX_DECLARATION]], [[YYFARGS0(void)]])
! 1214:
! 1215: m4_ifdef( [[M4_YY_BISON_LVAL]],
! 1216: [[
! 1217: m4_dnl The bison pure parser is used. Redefine yylex to
! 1218: m4_dnl accept the lval parameter.
! 1219:
! 1220: m4_define( [[M4_YY_LEX_PROTO]], [[\]]
! 1221: [[M4_YY_PARAMS(YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG)]])
! 1222: m4_define( [[M4_YY_LEX_DECLARATION]], [[\]]
! 1223: [[YYFARGS1(YYSTYPE *,yylval_param)]])
! 1224: ]])
! 1225:
! 1226: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 1227: [[
! 1228: m4_dnl Locations are used. yylex should also accept the ylloc parameter.
! 1229:
! 1230: m4_define( [[M4_YY_LEX_PROTO]], [[\]]
! 1231: [[M4_YY_PARAMS(YYSTYPE * yylval_param, YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG)]])
! 1232: m4_define( [[M4_YY_LEX_DECLARATION]], [[\]]
! 1233: [[YYFARGS2(YYSTYPE *,yylval_param, YYLTYPE *,yylloc_param)]])
! 1234: ]])
! 1235:
! 1236: extern int yylex M4_YY_LEX_PROTO;
! 1237:
! 1238: #define YY_DECL int yylex M4_YY_LEX_DECLARATION
! 1239: %endif
! 1240: %if-c++-only C++ definition
1.1 deraadt 1241: #define YY_DECL int yyFlexLexer::yylex()
1.13 ! tedu 1242: %endif
! 1243: #endif /* !YY_DECL */
1.1 deraadt 1244:
1.13 ! tedu 1245: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1246: [[
1.1 deraadt 1247: /* Code executed at the beginning of each rule, after yytext and yyleng
1248: * have been set up.
1249: */
1250: #ifndef YY_USER_ACTION
1251: #define YY_USER_ACTION
1252: #endif
1.13 ! tedu 1253: ]])
1.1 deraadt 1254:
1.13 ! tedu 1255: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1256: [[
1.1 deraadt 1257: /* Code executed at the end of each rule. */
1258: #ifndef YY_BREAK
1259: #define YY_BREAK break;
1260: #endif
1.13 ! tedu 1261: ]])
1.1 deraadt 1262:
1.13 ! tedu 1263: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1264: [[
! 1265: %% [6.0] YY_RULE_SETUP definition goes here
! 1266: ]])
1.1 deraadt 1267:
1.13 ! tedu 1268: %not-for-header
! 1269: /** The main scanner function which does all the work.
! 1270: */
1.1 deraadt 1271: YY_DECL
1.13 ! tedu 1272: {
! 1273: yy_state_type yy_current_state;
! 1274: char *yy_cp, *yy_bp;
! 1275: int yy_act;
! 1276: M4_YY_DECL_GUTS_VAR();
! 1277:
! 1278: m4_ifdef( [[M4_YY_NOT_REENTRANT]],
! 1279: [[
! 1280: m4_ifdef( [[M4_YY_BISON_LVAL]],
! 1281: [[
! 1282: YYSTYPE * yylval;
! 1283: ]])
! 1284: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 1285: [[
! 1286: YYLTYPE * yylloc;
! 1287: ]])
! 1288: ]])
! 1289:
! 1290: m4_ifdef( [[M4_YY_BISON_LVAL]],
! 1291: [[
! 1292: yylval = yylval_param;
! 1293: ]])
! 1294:
! 1295: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 1296: [[
! 1297: yylloc = yylloc_param;
! 1298: ]])
1.1 deraadt 1299:
1.13 ! tedu 1300: if ( !YY_G(yy_init) )
1.1 deraadt 1301: {
1.13 ! tedu 1302: YY_G(yy_init) = 1;
1.1 deraadt 1303:
1304: #ifdef YY_USER_INIT
1305: YY_USER_INIT;
1306: #endif
1307:
1.13 ! tedu 1308: m4_ifdef( [[M4_YY_USES_REJECT]],
! 1309: [[
! 1310: /* Create the reject buffer large enough to save one state per allowed character. */
! 1311: if ( ! YY_G(yy_state_buf) )
! 1312: YY_G(yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE M4_YY_CALL_LAST_ARG);
! 1313: if ( ! YY_G(yy_state_buf) )
! 1314: YY_FATAL_ERROR( "out of dynamic memory in yylex()" );
! 1315: ]])
! 1316:
! 1317: if ( ! YY_G(yy_start) )
! 1318: YY_G(yy_start) = 1; /* first start state */
1.1 deraadt 1319:
1320: if ( ! yyin )
1.13 ! tedu 1321: %if-c-only
1.1 deraadt 1322: yyin = stdin;
1.13 ! tedu 1323: %endif
! 1324: %if-c++-only
! 1325: yyin = & std::cin;
! 1326: %endif
1.1 deraadt 1327:
1328: if ( ! yyout )
1.13 ! tedu 1329: %if-c-only
1.1 deraadt 1330: yyout = stdout;
1.13 ! tedu 1331: %endif
! 1332: %if-c++-only
! 1333: yyout = & std::cout;
! 1334: %endif
! 1335:
! 1336: if ( ! YY_CURRENT_BUFFER ) {
! 1337: yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
! 1338: YY_CURRENT_BUFFER_LVALUE =
! 1339: yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);
! 1340: }
1.1 deraadt 1341:
1.13 ! tedu 1342: yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
1.1 deraadt 1343: }
1344:
1.13 ! tedu 1345: {
! 1346: %% [7.0] user's declarations go here
! 1347:
1.1 deraadt 1348: while ( 1 ) /* loops until end-of-file is reached */
1349: {
1.13 ! tedu 1350: %% [8.0] yymore()-related code goes here
! 1351: yy_cp = YY_G(yy_c_buf_p);
1.1 deraadt 1352:
1353: /* Support of yytext. */
1.13 ! tedu 1354: *yy_cp = YY_G(yy_hold_char);
1.1 deraadt 1355:
1356: /* yy_bp points to the position in yy_ch_buf of the start of
1357: * the current run.
1358: */
1359: yy_bp = yy_cp;
1360:
1.13 ! tedu 1361: %% [9.0] code to set up and find next match goes here
1.1 deraadt 1362:
1363: yy_find_action:
1.13 ! tedu 1364: %% [10.0] code to find the action number goes here
1.1 deraadt 1365:
1366: YY_DO_BEFORE_ACTION;
1367:
1.13 ! tedu 1368: %% [11.0] code for yylineno update goes here
1.1 deraadt 1369:
1370: do_action: /* This label is used only to access EOF actions. */
1371:
1.13 ! tedu 1372: %% [12.0] debug code goes here
1.1 deraadt 1373:
1374: switch ( yy_act )
1375: { /* beginning of action switch */
1.13 ! tedu 1376: %% [13.0] actions go here
1.1 deraadt 1377:
1378: case YY_END_OF_BUFFER:
1379: {
1380: /* Amount of text matched not including the EOB char. */
1.13 ! tedu 1381: int yy_amount_of_matched_text = (int) (yy_cp - YY_G(yytext_ptr)) - 1;
1.1 deraadt 1382:
1383: /* Undo the effects of YY_DO_BEFORE_ACTION. */
1.13 ! tedu 1384: *yy_cp = YY_G(yy_hold_char);
1.3 millert 1385: YY_RESTORE_YY_MORE_OFFSET
1.1 deraadt 1386:
1.13 ! tedu 1387: if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1.1 deraadt 1388: {
1389: /* We're scanning a new file or input source. It's
1390: * possible that this happened because the user
1391: * just pointed yyin at a new source and called
1392: * yylex(). If so, then we have to assure
1.13 ! tedu 1393: * consistency between YY_CURRENT_BUFFER and our
1.1 deraadt 1394: * globals. Here is the right place to do so, because
1395: * this is the first action (other than possibly a
1396: * back-up) that will match for the new input source.
1397: */
1.13 ! tedu 1398: YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
! 1399: YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
! 1400: YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1.1 deraadt 1401: }
1402:
1403: /* Note that here we test for yy_c_buf_p "<=" to the position
1404: * of the first EOB in the buffer, since yy_c_buf_p will
1405: * already have been incremented past the NUL character
1406: * (since all states make transitions on EOB to the
1407: * end-of-buffer state). Contrast this with the test
1408: * in input().
1409: */
1.13 ! tedu 1410: if ( YY_G(yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )
1.1 deraadt 1411: { /* This was really a NUL. */
1412: yy_state_type yy_next_state;
1413:
1.13 ! tedu 1414: YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + yy_amount_of_matched_text;
1.1 deraadt 1415:
1.13 ! tedu 1416: yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
1.1 deraadt 1417:
1418: /* Okay, we're now positioned to make the NUL
1419: * transition. We couldn't have
1420: * yy_get_previous_state() go ahead and do it
1421: * for us because it doesn't know how to deal
1422: * with the possibility of jamming (and we don't
1423: * want to build jamming into it because then it
1424: * will run more slowly).
1425: */
1426:
1.13 ! tedu 1427: yy_next_state = yy_try_NUL_trans( yy_current_state M4_YY_CALL_LAST_ARG);
1.1 deraadt 1428:
1.13 ! tedu 1429: yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
1.1 deraadt 1430:
1431: if ( yy_next_state )
1432: {
1433: /* Consume the NUL. */
1.13 ! tedu 1434: yy_cp = ++YY_G(yy_c_buf_p);
1.1 deraadt 1435: yy_current_state = yy_next_state;
1436: goto yy_match;
1437: }
1438:
1439: else
1440: {
1.13 ! tedu 1441: %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here
1.1 deraadt 1442: goto yy_find_action;
1443: }
1444: }
1445:
1.13 ! tedu 1446: else switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )
1.1 deraadt 1447: {
1448: case EOB_ACT_END_OF_FILE:
1449: {
1.13 ! tedu 1450: YY_G(yy_did_buffer_switch_on_eof) = 0;
1.1 deraadt 1451:
1.13 ! tedu 1452: if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
1.1 deraadt 1453: {
1454: /* Note: because we've taken care in
1455: * yy_get_next_buffer() to have set up
1456: * yytext, we can now set up
1457: * yy_c_buf_p so that if some total
1458: * hoser (like flex itself) wants to
1459: * call the scanner after we return the
1460: * YY_NULL, it'll still work - another
1461: * YY_NULL will get returned.
1462: */
1.13 ! tedu 1463: YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + YY_MORE_ADJ;
1.1 deraadt 1464:
1465: yy_act = YY_STATE_EOF(YY_START);
1466: goto do_action;
1467: }
1468:
1469: else
1470: {
1.13 ! tedu 1471: if ( ! YY_G(yy_did_buffer_switch_on_eof) )
1.1 deraadt 1472: YY_NEW_FILE;
1473: }
1474: break;
1475: }
1476:
1477: case EOB_ACT_CONTINUE_SCAN:
1.13 ! tedu 1478: YY_G(yy_c_buf_p) =
! 1479: YY_G(yytext_ptr) + yy_amount_of_matched_text;
1.1 deraadt 1480:
1.13 ! tedu 1481: yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
1.1 deraadt 1482:
1.13 ! tedu 1483: yy_cp = YY_G(yy_c_buf_p);
! 1484: yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
1.1 deraadt 1485: goto yy_match;
1486:
1487: case EOB_ACT_LAST_MATCH:
1.13 ! tedu 1488: YY_G(yy_c_buf_p) =
! 1489: &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)];
1.1 deraadt 1490:
1.13 ! tedu 1491: yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );
1.1 deraadt 1492:
1.13 ! tedu 1493: yy_cp = YY_G(yy_c_buf_p);
! 1494: yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;
1.1 deraadt 1495: goto yy_find_action;
1496: }
1497: break;
1498: }
1499:
1500: default:
1501: YY_FATAL_ERROR(
1502: "fatal flex scanner internal error--no action found" );
1503: } /* end of action switch */
1504: } /* end of scanning one token */
1.13 ! tedu 1505: } /* end of user's declarations */
! 1506: } /* end of yylex */
! 1507: %ok-for-header
! 1508:
! 1509: %if-c++-only
! 1510: %not-for-header
! 1511: /* The contents of this function are C++ specific, so the YY_G macro is not used.
! 1512: */
1.7 espie 1513: yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout )
1.13 ! tedu 1514: {
1.1 deraadt 1515: yyin = arg_yyin;
1516: yyout = arg_yyout;
1517: yy_c_buf_p = 0;
1.13 ! tedu 1518: yy_init = 0;
1.1 deraadt 1519: yy_start = 0;
1520: yy_flex_debug = 0;
1521: yylineno = 1; // this will only get updated if %option yylineno
1522:
1523: yy_did_buffer_switch_on_eof = 0;
1524:
1525: yy_looking_for_trail_begin = 0;
1526: yy_more_flag = 0;
1527: yy_more_len = 0;
1.3 millert 1528: yy_more_offset = yy_prev_more_offset = 0;
1.1 deraadt 1529:
1530: yy_start_stack_ptr = yy_start_stack_depth = 0;
1.13 ! tedu 1531: yy_start_stack = NULL;
1.1 deraadt 1532:
1.13 ! tedu 1533: yy_buffer_stack = 0;
! 1534: yy_buffer_stack_top = 0;
! 1535: yy_buffer_stack_max = 0;
1.1 deraadt 1536:
1.13 ! tedu 1537:
! 1538: m4_ifdef( [[M4_YY_USES_REJECT]],
! 1539: [[
! 1540: yy_state_buf = new yy_state_type[YY_STATE_BUF_SIZE];
! 1541: ]],
! 1542: [[
1.1 deraadt 1543: yy_state_buf = 0;
1.13 ! tedu 1544: ]])
! 1545: }
1.1 deraadt 1546:
1.13 ! tedu 1547: /* The contents of this function are C++ specific, so the YY_G macro is not used.
! 1548: */
1.1 deraadt 1549: yyFlexLexer::~yyFlexLexer()
1.13 ! tedu 1550: {
! 1551: delete [] yy_state_buf;
! 1552: yyfree( yy_start_stack M4_YY_CALL_LAST_ARG );
! 1553: yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
! 1554: yyfree( yy_buffer_stack M4_YY_CALL_LAST_ARG );
! 1555: }
1.1 deraadt 1556:
1.13 ! tedu 1557: /* The contents of this function are C++ specific, so the YY_G macro is not used.
! 1558: */
1.7 espie 1559: void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )
1.13 ! tedu 1560: {
1.1 deraadt 1561: if ( new_in )
1562: {
1.13 ! tedu 1563: yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
! 1564: yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE M4_YY_CALL_LAST_ARG) M4_YY_CALL_LAST_ARG);
1.1 deraadt 1565: }
1566:
1567: if ( new_out )
1568: yyout = new_out;
1.13 ! tedu 1569: }
1.1 deraadt 1570:
1571: #ifdef YY_INTERACTIVE
1572: int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
1573: #else
1574: int yyFlexLexer::LexerInput( char* buf, int max_size )
1575: #endif
1.13 ! tedu 1576: {
1.1 deraadt 1577: if ( yyin->eof() || yyin->fail() )
1578: return 0;
1579:
1580: #ifdef YY_INTERACTIVE
1581: yyin->get( buf[0] );
1582:
1583: if ( yyin->eof() )
1584: return 0;
1585:
1586: if ( yyin->bad() )
1587: return -1;
1588:
1589: return 1;
1590:
1591: #else
1592: (void) yyin->read( buf, max_size );
1593:
1594: if ( yyin->bad() )
1595: return -1;
1596: else
1597: return yyin->gcount();
1598: #endif
1.13 ! tedu 1599: }
1.1 deraadt 1600:
1601: void yyFlexLexer::LexerOutput( const char* buf, int size )
1.13 ! tedu 1602: {
1.1 deraadt 1603: (void) yyout->write( buf, size );
1.13 ! tedu 1604: }
! 1605: %ok-for-header
! 1606: %endif
1.1 deraadt 1607:
1.13 ! tedu 1608: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 1609: [[
1.1 deraadt 1610: /* yy_get_next_buffer - try to read in a new buffer
1611: *
1612: * Returns a code representing an action:
1613: * EOB_ACT_LAST_MATCH -
1614: * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1615: * EOB_ACT_END_OF_FILE - end of file
1616: */
1.13 ! tedu 1617: %if-c-only
! 1618: static int yy_get_next_buffer YYFARGS0(void)
! 1619: %endif
! 1620: %if-c++-only
! 1621: int yyFlexLexer::yy_get_next_buffer()
! 1622: %endif
! 1623: {
! 1624: M4_YY_DECL_GUTS_VAR();
! 1625: char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
! 1626: char *source = YY_G(yytext_ptr);
! 1627: int number_to_move, i;
1.1 deraadt 1628: int ret_val;
1629:
1.13 ! tedu 1630: if ( YY_G(yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] )
1.1 deraadt 1631: YY_FATAL_ERROR(
1632: "fatal flex scanner internal error--end of buffer missed" );
1633:
1.13 ! tedu 1634: if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1.1 deraadt 1635: { /* Don't try to fill the buffer, so this is an EOF. */
1.13 ! tedu 1636: if ( YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - YY_MORE_ADJ == 1 )
1.1 deraadt 1637: {
1.3 millert 1638: /* We matched a single character, the EOB, so
1.1 deraadt 1639: * treat this as a final EOF.
1640: */
1641: return EOB_ACT_END_OF_FILE;
1642: }
1643:
1644: else
1645: {
1646: /* We matched some text prior to the EOB, first
1647: * process it.
1648: */
1649: return EOB_ACT_LAST_MATCH;
1650: }
1651: }
1652:
1653: /* Try to read more data. */
1654:
1655: /* First move last chars to start of buffer. */
1.13 ! tedu 1656: number_to_move = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr)) - 1;
1.1 deraadt 1657:
1658: for ( i = 0; i < number_to_move; ++i )
1659: *(dest++) = *(source++);
1660:
1.13 ! tedu 1661: if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1.1 deraadt 1662: /* don't do the read, it's not guaranteed to return an EOF,
1663: * just force an EOF
1664: */
1.13 ! tedu 1665: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars) = 0;
1.1 deraadt 1666:
1667: else
1668: {
1.13 ! tedu 1669: yy_size_t num_to_read =
! 1670: YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1.1 deraadt 1671:
1672: while ( num_to_read <= 0 )
1673: { /* Not enough room in the buffer - grow it. */
1.13 ! tedu 1674: m4_ifdef( [[M4_YY_USES_REJECT]],
! 1675: [[
1.1 deraadt 1676: YY_FATAL_ERROR(
1677: "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
1.13 ! tedu 1678: ]],
! 1679: [[
1.1 deraadt 1680: /* just a shorter name for the current buffer */
1.13 ! tedu 1681: YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
1.1 deraadt 1682:
1683: int yy_c_buf_p_offset =
1.13 ! tedu 1684: (int) (YY_G(yy_c_buf_p) - b->yy_ch_buf);
1.1 deraadt 1685:
1686: if ( b->yy_is_our_buffer )
1687: {
1.13 ! tedu 1688: yy_size_t new_size = b->yy_buf_size * 2;
1.1 deraadt 1689:
1690: if ( new_size <= 0 )
1691: b->yy_buf_size += b->yy_buf_size / 8;
1692: else
1693: b->yy_buf_size *= 2;
1694:
1695: b->yy_ch_buf = (char *)
1696: /* Include room in for 2 EOB chars. */
1.13 ! tedu 1697: yyrealloc( (void *) b->yy_ch_buf,
! 1698: b->yy_buf_size + 2 M4_YY_CALL_LAST_ARG );
1.1 deraadt 1699: }
1700: else
1701: /* Can't grow it, we don't own it. */
1702: b->yy_ch_buf = 0;
1703:
1704: if ( ! b->yy_ch_buf )
1705: YY_FATAL_ERROR(
1706: "fatal error - scanner input buffer overflow" );
1707:
1.13 ! tedu 1708: YY_G(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
1.1 deraadt 1709:
1.13 ! tedu 1710: num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1.1 deraadt 1711: number_to_move - 1;
1.13 ! tedu 1712: ]])
1.1 deraadt 1713: }
1714:
1715: if ( num_to_read > YY_READ_BUF_SIZE )
1716: num_to_read = YY_READ_BUF_SIZE;
1717:
1718: /* Read in more data. */
1.13 ! tedu 1719: YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
! 1720: YY_G(yy_n_chars), num_to_read );
1.4 millert 1721:
1.13 ! tedu 1722: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
1.1 deraadt 1723: }
1724:
1.13 ! tedu 1725: if ( YY_G(yy_n_chars) == 0 )
1.1 deraadt 1726: {
1727: if ( number_to_move == YY_MORE_ADJ )
1728: {
1729: ret_val = EOB_ACT_END_OF_FILE;
1.13 ! tedu 1730: yyrestart( yyin M4_YY_CALL_LAST_ARG);
1.1 deraadt 1731: }
1732:
1733: else
1734: {
1735: ret_val = EOB_ACT_LAST_MATCH;
1.13 ! tedu 1736: YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1.1 deraadt 1737: YY_BUFFER_EOF_PENDING;
1738: }
1739: }
1740:
1741: else
1742: ret_val = EOB_ACT_CONTINUE_SCAN;
1743:
1.13 ! tedu 1744: if ((yy_size_t) (YY_G(yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
! 1745: /* Extend the array by 50%, plus the number we really need. */
! 1746: yy_size_t new_size = YY_G(yy_n_chars) + number_to_move + (YY_G(yy_n_chars) >> 1);
! 1747: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
! 1748: (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, new_size M4_YY_CALL_LAST_ARG );
! 1749: if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
! 1750: YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
! 1751: }
! 1752:
! 1753: YY_G(yy_n_chars) += number_to_move;
! 1754: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
! 1755: YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
1.1 deraadt 1756:
1.13 ! tedu 1757: YY_G(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1.1 deraadt 1758:
1759: return ret_val;
1.13 ! tedu 1760: }
! 1761: ]])
1.1 deraadt 1762:
1763: /* yy_get_previous_state - get the state just before the EOB char was reached */
1764:
1.13 ! tedu 1765: %if-c-only
! 1766: %not-for-header
! 1767: static yy_state_type yy_get_previous_state YYFARGS0(void)
! 1768: %endif
! 1769: %if-c++-only
! 1770: yy_state_type yyFlexLexer::yy_get_previous_state()
! 1771: %endif
! 1772: {
! 1773: yy_state_type yy_current_state;
! 1774: char *yy_cp;
! 1775: M4_YY_DECL_GUTS_VAR();
1.1 deraadt 1776:
1.13 ! tedu 1777: %% [15.0] code to get the start state into yy_current_state goes here
1.1 deraadt 1778:
1.13 ! tedu 1779: for ( yy_cp = YY_G(yytext_ptr) + YY_MORE_ADJ; yy_cp < YY_G(yy_c_buf_p); ++yy_cp )
1.1 deraadt 1780: {
1.13 ! tedu 1781: %% [16.0] code to find the next state goes here
1.1 deraadt 1782: }
1783:
1784: return yy_current_state;
1.13 ! tedu 1785: }
1.1 deraadt 1786:
1787:
1788: /* yy_try_NUL_trans - try to make a transition on the NUL character
1789: *
1790: * synopsis
1791: * next_state = yy_try_NUL_trans( current_state );
1792: */
1.13 ! tedu 1793: %if-c-only
! 1794: static yy_state_type yy_try_NUL_trans YYFARGS1( yy_state_type, yy_current_state)
! 1795: %endif
! 1796: %if-c++-only
! 1797: yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
! 1798: %endif
! 1799: {
! 1800: int yy_is_jam;
! 1801: M4_YY_DECL_GUTS_VAR(); /* This var may be unused depending upon options. */
! 1802: %% [17.0] code to find the next state, and perhaps do backing up, goes here
1.1 deraadt 1803:
1.13 ! tedu 1804: M4_YY_NOOP_GUTS_VAR();
! 1805: return yy_is_jam ? 0 : yy_current_state;
! 1806: }
1.1 deraadt 1807:
1808:
1.13 ! tedu 1809: %if-c-only
! 1810: m4_ifdef( [[M4_YY_NO_UNPUT]],,
! 1811: [[
! 1812: static void yyunput YYFARGS2( int,c, char *,yy_bp)
! 1813: %endif
! 1814: %if-c++-only
! 1815: void yyFlexLexer::yyunput( int c, char* yy_bp)
! 1816: %endif
! 1817: {
! 1818: char *yy_cp;
! 1819: M4_YY_DECL_GUTS_VAR();
1.1 deraadt 1820:
1.13 ! tedu 1821: yy_cp = YY_G(yy_c_buf_p);
1.1 deraadt 1822:
1823: /* undo effects of setting up yytext */
1.13 ! tedu 1824: *yy_cp = YY_G(yy_hold_char);
1.1 deraadt 1825:
1.13 ! tedu 1826: if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1.1 deraadt 1827: { /* need to shift things up to make room */
1828: /* +2 for EOB chars. */
1.13 ! tedu 1829: yy_size_t number_to_move = YY_G(yy_n_chars) + 2;
! 1830: char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
! 1831: YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
! 1832: char *source =
! 1833: &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
1.1 deraadt 1834:
1.13 ! tedu 1835: while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1.1 deraadt 1836: *--dest = *--source;
1837:
1838: yy_cp += (int) (dest - source);
1839: yy_bp += (int) (dest - source);
1.13 ! tedu 1840: YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
! 1841: YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
1.1 deraadt 1842:
1.13 ! tedu 1843: if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
1.1 deraadt 1844: YY_FATAL_ERROR( "flex scanner push-back overflow" );
1845: }
1846:
1847: *--yy_cp = (char) c;
1848:
1.13 ! tedu 1849: %% [18.0] update yylineno here
! 1850: m4_ifdef( [[M4_YY_USE_LINENO]],
! 1851: [[
! 1852: if ( c == '\n' ){
! 1853: --yylineno;
! 1854: }
! 1855: ]])
! 1856:
! 1857: YY_G(yytext_ptr) = yy_bp;
! 1858: YY_G(yy_hold_char) = *yy_cp;
! 1859: YY_G(yy_c_buf_p) = yy_cp;
! 1860: }
! 1861: %if-c-only
! 1862: ]])
! 1863: %endif
1.1 deraadt 1864:
1.13 ! tedu 1865: %if-c-only
1.11 millert 1866: #ifndef YY_NO_INPUT
1.1 deraadt 1867: #ifdef __cplusplus
1.13 ! tedu 1868: static int yyinput YYFARGS0(void)
1.1 deraadt 1869: #else
1.13 ! tedu 1870: static int input YYFARGS0(void)
1.1 deraadt 1871: #endif
1.13 ! tedu 1872:
! 1873: %endif
! 1874: %if-c++-only
! 1875: int yyFlexLexer::yyinput()
! 1876: %endif
! 1877: {
1.1 deraadt 1878: int c;
1.13 ! tedu 1879: M4_YY_DECL_GUTS_VAR();
1.1 deraadt 1880:
1.13 ! tedu 1881: *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
1.1 deraadt 1882:
1.13 ! tedu 1883: if ( *YY_G(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
1.1 deraadt 1884: {
1885: /* yy_c_buf_p now points to the character we want to return.
1886: * If this occurs *before* the EOB characters, then it's a
1887: * valid NUL; if not, then we've hit the end of the buffer.
1888: */
1.13 ! tedu 1889: if ( YY_G(yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )
1.1 deraadt 1890: /* This was really a NUL. */
1.13 ! tedu 1891: *YY_G(yy_c_buf_p) = '\0';
1.1 deraadt 1892:
1893: else
1894: { /* need more input */
1.13 ! tedu 1895: yy_size_t offset = YY_G(yy_c_buf_p) - YY_G(yytext_ptr);
! 1896: ++YY_G(yy_c_buf_p);
1.1 deraadt 1897:
1.13 ! tedu 1898: switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )
1.1 deraadt 1899: {
1.4 millert 1900: case EOB_ACT_LAST_MATCH:
1901: /* This happens because yy_g_n_b()
1902: * sees that we've accumulated a
1903: * token and flags that we need to
1904: * try matching the token before
1905: * proceeding. But for input(),
1906: * there's no matching to consider.
1907: * So convert the EOB_ACT_LAST_MATCH
1908: * to EOB_ACT_END_OF_FILE.
1909: */
1910:
1911: /* Reset buffer status. */
1.13 ! tedu 1912: yyrestart( yyin M4_YY_CALL_LAST_ARG);
1.4 millert 1913:
1.13 ! tedu 1914: /*FALLTHROUGH*/
1.4 millert 1915:
1.1 deraadt 1916: case EOB_ACT_END_OF_FILE:
1917: {
1.13 ! tedu 1918: if ( yywrap( M4_YY_CALL_ONLY_ARG ) )
1.1 deraadt 1919: return EOF;
1920:
1.13 ! tedu 1921: if ( ! YY_G(yy_did_buffer_switch_on_eof) )
1.1 deraadt 1922: YY_NEW_FILE;
1923: #ifdef __cplusplus
1.13 ! tedu 1924: return yyinput(M4_YY_CALL_ONLY_ARG);
1.1 deraadt 1925: #else
1.13 ! tedu 1926: return input(M4_YY_CALL_ONLY_ARG);
1.1 deraadt 1927: #endif
1928: }
1929:
1930: case EOB_ACT_CONTINUE_SCAN:
1.13 ! tedu 1931: YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + offset;
1.1 deraadt 1932: break;
1933: }
1934: }
1935: }
1936:
1.13 ! tedu 1937: c = *(unsigned char *) YY_G(yy_c_buf_p); /* cast for 8-bit char's */
! 1938: *YY_G(yy_c_buf_p) = '\0'; /* preserve yytext */
! 1939: YY_G(yy_hold_char) = *++YY_G(yy_c_buf_p);
1.1 deraadt 1940:
1.13 ! tedu 1941: %% [19.0] update BOL and yylineno
1.1 deraadt 1942:
1943: return c;
1.13 ! tedu 1944: }
! 1945: %if-c-only
1.11 millert 1946: #endif /* ifndef YY_NO_INPUT */
1.13 ! tedu 1947: %endif
1.1 deraadt 1948:
1.13 ! tedu 1949: /** Immediately switch to a different input stream.
! 1950: * @param input_file A readable stream.
! 1951: * M4_YY_DOC_PARAM
! 1952: * @note This function does not reset the start condition to @c INITIAL .
! 1953: */
! 1954: %if-c-only
! 1955: void yyrestart YYFARGS1( FILE *,input_file)
! 1956: %endif
! 1957: %if-c++-only
! 1958: void yyFlexLexer::yyrestart( std::istream* input_file )
! 1959: %endif
! 1960: {
! 1961: M4_YY_DECL_GUTS_VAR();
! 1962:
! 1963: if ( ! YY_CURRENT_BUFFER ){
! 1964: yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
! 1965: YY_CURRENT_BUFFER_LVALUE =
! 1966: yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);
! 1967: }
! 1968:
! 1969: yy_init_buffer( YY_CURRENT_BUFFER, input_file M4_YY_CALL_LAST_ARG);
! 1970: yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
! 1971: }
! 1972:
! 1973: /** Switch to a different input buffer.
! 1974: * @param new_buffer The new input buffer.
! 1975: * M4_YY_DOC_PARAM
! 1976: */
! 1977: %if-c-only
! 1978: void yy_switch_to_buffer YYFARGS1( YY_BUFFER_STATE ,new_buffer)
! 1979: %endif
! 1980: %if-c++-only
! 1981: void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
! 1982: %endif
! 1983: {
! 1984: M4_YY_DECL_GUTS_VAR();
! 1985:
! 1986: /* TODO. We should be able to replace this entire function body
! 1987: * with
! 1988: * yypop_buffer_state();
! 1989: * yypush_buffer_state(new_buffer);
! 1990: */
! 1991: yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);
! 1992: if ( YY_CURRENT_BUFFER == new_buffer )
1.1 deraadt 1993: return;
1994:
1.13 ! tedu 1995: if ( YY_CURRENT_BUFFER )
1.1 deraadt 1996: {
1997: /* Flush out information for old buffer. */
1.13 ! tedu 1998: *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
! 1999: YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);
! 2000: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
1.1 deraadt 2001: }
2002:
1.13 ! tedu 2003: YY_CURRENT_BUFFER_LVALUE = new_buffer;
! 2004: yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
1.1 deraadt 2005:
2006: /* We don't actually know whether we did this switch during
2007: * EOF (yywrap()) processing, but the only time this flag
2008: * is looked at is after yywrap() is called, so it's safe
2009: * to go ahead and always set it.
2010: */
1.13 ! tedu 2011: YY_G(yy_did_buffer_switch_on_eof) = 1;
! 2012: }
1.1 deraadt 2013:
2014:
1.13 ! tedu 2015: %if-c-only
! 2016: static void yy_load_buffer_state YYFARGS0(void)
! 2017: %endif
! 2018: %if-c++-only
! 2019: void yyFlexLexer::yy_load_buffer_state()
! 2020: %endif
! 2021: {
! 2022: M4_YY_DECL_GUTS_VAR();
! 2023: YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
! 2024: YY_G(yytext_ptr) = YY_G(yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
! 2025: yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
! 2026: YY_G(yy_hold_char) = *YY_G(yy_c_buf_p);
! 2027: }
! 2028:
! 2029: /** Allocate and initialize an input buffer state.
! 2030: * @param file A readable stream.
! 2031: * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
! 2032: * M4_YY_DOC_PARAM
! 2033: * @return the allocated buffer state.
! 2034: */
! 2035: %if-c-only
! 2036: YY_BUFFER_STATE yy_create_buffer YYFARGS2( FILE *,file, int ,size)
! 2037: %endif
! 2038: %if-c++-only
! 2039: YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )
! 2040: %endif
! 2041: {
1.1 deraadt 2042: YY_BUFFER_STATE b;
1.13 ! tedu 2043: m4_dnl M4_YY_DECL_GUTS_VAR();
1.1 deraadt 2044:
1.13 ! tedu 2045: b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );
1.1 deraadt 2046: if ( ! b )
2047: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2048:
2049: b->yy_buf_size = size;
2050:
2051: /* yy_ch_buf has to be 2 characters longer than the size given because
2052: * we need to put in 2 end-of-buffer characters.
2053: */
1.13 ! tedu 2054: b->yy_ch_buf = (char *) yyalloc( b->yy_buf_size + 2 M4_YY_CALL_LAST_ARG );
1.1 deraadt 2055: if ( ! b->yy_ch_buf )
2056: YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
2057:
2058: b->yy_is_our_buffer = 1;
2059:
1.13 ! tedu 2060: yy_init_buffer( b, file M4_YY_CALL_LAST_ARG);
1.1 deraadt 2061:
2062: return b;
1.13 ! tedu 2063: }
1.1 deraadt 2064:
1.13 ! tedu 2065: /** Destroy the buffer.
! 2066: * @param b a buffer created with yy_create_buffer()
! 2067: * M4_YY_DOC_PARAM
! 2068: */
! 2069: %if-c-only
! 2070: void yy_delete_buffer YYFARGS1( YY_BUFFER_STATE ,b)
! 2071: %endif
! 2072: %if-c++-only
! 2073: void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
! 2074: %endif
! 2075: {
! 2076: M4_YY_DECL_GUTS_VAR();
1.1 deraadt 2077:
2078: if ( ! b )
2079: return;
2080:
1.13 ! tedu 2081: if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
! 2082: YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
1.1 deraadt 2083:
2084: if ( b->yy_is_our_buffer )
1.13 ! tedu 2085: yyfree( (void *) b->yy_ch_buf M4_YY_CALL_LAST_ARG );
1.1 deraadt 2086:
1.13 ! tedu 2087: yyfree( (void *) b M4_YY_CALL_LAST_ARG );
! 2088: }
1.1 deraadt 2089:
2090:
1.13 ! tedu 2091: /* Initializes or reinitializes a buffer.
! 2092: * This function is sometimes called more than once on the same buffer,
! 2093: * such as during a yyrestart() or at EOF.
! 2094: */
! 2095: %if-c-only
! 2096: static void yy_init_buffer YYFARGS2( YY_BUFFER_STATE ,b, FILE *,file)
! 2097: %endif
! 2098: %if-c++-only
! 2099: void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream* file )
! 2100: %endif
1.1 deraadt 2101:
1.13 ! tedu 2102: {
1.6 millert 2103: int oerrno = errno;
1.13 ! tedu 2104: M4_YY_DECL_GUTS_VAR();
1.6 millert 2105:
1.13 ! tedu 2106: yy_flush_buffer( b M4_YY_CALL_LAST_ARG);
1.1 deraadt 2107:
2108: b->yy_input_file = file;
2109: b->yy_fill_buffer = 1;
2110:
1.13 ! tedu 2111: /* If b is the current buffer, then yy_init_buffer was _probably_
! 2112: * called from yyrestart() or through yy_get_next_buffer.
! 2113: * In that case, we don't want to reset the lineno or column.
! 2114: */
! 2115: if (b != YY_CURRENT_BUFFER){
! 2116: b->yy_bs_lineno = 1;
! 2117: b->yy_bs_column = 0;
! 2118: }
! 2119:
! 2120: %if-c-only
! 2121: m4_ifdef( [[M4_YY_ALWAYS_INTERACTIVE]],
! 2122: [[
1.1 deraadt 2123: b->yy_is_interactive = 1;
1.13 ! tedu 2124: ]],
! 2125: [[
! 2126: m4_ifdef( [[M4_YY_NEVER_INTERACTIVE]],
! 2127: [[
! 2128: b->yy_is_interactive = 0;
! 2129: ]],
! 2130: [[
! 2131: b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
! 2132: ]])
! 2133: ]])
! 2134: %endif
! 2135: %if-c++-only
1.1 deraadt 2136: b->yy_is_interactive = 0;
1.13 ! tedu 2137: %endif
1.6 millert 2138: errno = oerrno;
1.13 ! tedu 2139: }
1.1 deraadt 2140:
1.13 ! tedu 2141: /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
! 2142: * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
! 2143: * M4_YY_DOC_PARAM
! 2144: */
! 2145: %if-c-only
! 2146: void yy_flush_buffer YYFARGS1( YY_BUFFER_STATE ,b)
! 2147: %endif
! 2148: %if-c++-only
! 2149: void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
! 2150: %endif
! 2151: {
! 2152: M4_YY_DECL_GUTS_VAR();
1.4 millert 2153: if ( ! b )
2154: return;
2155:
1.1 deraadt 2156: b->yy_n_chars = 0;
2157:
2158: /* We always need two end-of-buffer characters. The first causes
2159: * a transition to the end-of-buffer state. The second causes
2160: * a jam in that state.
2161: */
2162: b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2163: b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2164:
2165: b->yy_buf_pos = &b->yy_ch_buf[0];
2166:
2167: b->yy_at_bol = 1;
2168: b->yy_buffer_status = YY_BUFFER_NEW;
2169:
1.13 ! tedu 2170: if ( b == YY_CURRENT_BUFFER )
! 2171: yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
! 2172: }
! 2173:
! 2174: %if-c-or-c++
! 2175: /** Pushes the new state onto the stack. The new state becomes
! 2176: * the current state. This function will allocate the stack
! 2177: * if necessary.
! 2178: * @param new_buffer The new state.
! 2179: * M4_YY_DOC_PARAM
! 2180: */
! 2181: %if-c-only
! 2182: void yypush_buffer_state YYFARGS1(YY_BUFFER_STATE,new_buffer)
! 2183: %endif
! 2184: %if-c++-only
! 2185: void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)
! 2186: %endif
! 2187: {
! 2188: M4_YY_DECL_GUTS_VAR();
! 2189: if (new_buffer == NULL)
! 2190: return;
! 2191:
! 2192: yyensure_buffer_stack(M4_YY_CALL_ONLY_ARG);
! 2193:
! 2194: /* This block is copied from yy_switch_to_buffer. */
! 2195: if ( YY_CURRENT_BUFFER )
! 2196: {
! 2197: /* Flush out information for old buffer. */
! 2198: *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);
! 2199: YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);
! 2200: YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);
! 2201: }
! 2202:
! 2203: /* Only push if top exists. Otherwise, replace top. */
! 2204: if (YY_CURRENT_BUFFER)
! 2205: YY_G(yy_buffer_stack_top)++;
! 2206: YY_CURRENT_BUFFER_LVALUE = new_buffer;
! 2207:
! 2208: /* copied from yy_switch_to_buffer. */
! 2209: yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
! 2210: YY_G(yy_did_buffer_switch_on_eof) = 1;
! 2211: }
! 2212: %endif
! 2213:
! 2214:
! 2215: %if-c-or-c++
! 2216: /** Removes and deletes the top of the stack, if present.
! 2217: * The next element becomes the new top.
! 2218: * M4_YY_DOC_PARAM
! 2219: */
! 2220: %if-c-only
! 2221: void yypop_buffer_state YYFARGS0(void)
! 2222: %endif
! 2223: %if-c++-only
! 2224: void yyFlexLexer::yypop_buffer_state (void)
! 2225: %endif
! 2226: {
! 2227: M4_YY_DECL_GUTS_VAR();
! 2228: if (!YY_CURRENT_BUFFER)
! 2229: return;
! 2230:
! 2231: yy_delete_buffer(YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);
! 2232: YY_CURRENT_BUFFER_LVALUE = NULL;
! 2233: if (YY_G(yy_buffer_stack_top) > 0)
! 2234: --YY_G(yy_buffer_stack_top);
! 2235:
! 2236: if (YY_CURRENT_BUFFER) {
! 2237: yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );
! 2238: YY_G(yy_did_buffer_switch_on_eof) = 1;
! 2239: }
! 2240: }
! 2241: %endif
! 2242:
! 2243:
! 2244: %if-c-or-c++
! 2245: /* Allocates the stack if it does not exist.
! 2246: * Guarantees space for at least one push.
! 2247: */
! 2248: %if-c-only
! 2249: static void yyensure_buffer_stack YYFARGS0(void)
! 2250: %endif
! 2251: %if-c++-only
! 2252: void yyFlexLexer::yyensure_buffer_stack(void)
! 2253: %endif
! 2254: {
! 2255: yy_size_t num_to_alloc;
! 2256: M4_YY_DECL_GUTS_VAR();
! 2257:
! 2258: if (!YY_G(yy_buffer_stack)) {
! 2259:
! 2260: /* First allocation is just for 2 elements, since we don't know if this
! 2261: * scanner will even need a stack. We use 2 instead of 1 to avoid an
! 2262: * immediate realloc on the next call.
! 2263: */
! 2264: num_to_alloc = 1;
! 2265: YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
! 2266: (num_to_alloc * sizeof(struct yy_buffer_state*)
! 2267: M4_YY_CALL_LAST_ARG);
! 2268: if ( ! YY_G(yy_buffer_stack) )
! 2269: YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
! 2270:
! 2271:
! 2272: memset(YY_G(yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
! 2273:
! 2274: YY_G(yy_buffer_stack_max) = num_to_alloc;
! 2275: YY_G(yy_buffer_stack_top) = 0;
! 2276: return;
1.1 deraadt 2277: }
2278:
1.13 ! tedu 2279: if (YY_G(yy_buffer_stack_top) >= (YY_G(yy_buffer_stack_max)) - 1){
1.1 deraadt 2280:
1.13 ! tedu 2281: /* Increase the buffer to prepare for a possible push. */
! 2282: int grow_size = 8 /* arbitrary grow size */;
! 2283:
! 2284: num_to_alloc = YY_G(yy_buffer_stack_max) + grow_size;
! 2285: YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
! 2286: (YY_G(yy_buffer_stack),
! 2287: num_to_alloc * sizeof(struct yy_buffer_state*)
! 2288: M4_YY_CALL_LAST_ARG);
! 2289: if ( ! YY_G(yy_buffer_stack) )
! 2290: YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
! 2291:
! 2292: /* zero only the new slots.*/
! 2293: memset(YY_G(yy_buffer_stack) + YY_G(yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
! 2294: YY_G(yy_buffer_stack_max) = num_to_alloc;
! 2295: }
! 2296: }
! 2297: %endif
! 2298:
! 2299:
! 2300:
! 2301:
! 2302: m4_ifdef( [[M4_YY_NO_SCAN_BUFFER]],,
! 2303: [[
! 2304: %if-c-only
! 2305: /** Setup the input buffer state to scan directly from a user-specified character buffer.
! 2306: * @param base the character buffer
! 2307: * @param size the size in bytes of the character buffer
! 2308: * M4_YY_DOC_PARAM
! 2309: * @return the newly allocated buffer state object.
! 2310: */
! 2311: YY_BUFFER_STATE yy_scan_buffer YYFARGS2( char *,base, yy_size_t ,size)
! 2312: {
1.1 deraadt 2313: YY_BUFFER_STATE b;
1.13 ! tedu 2314: m4_dnl M4_YY_DECL_GUTS_VAR();
1.1 deraadt 2315:
2316: if ( size < 2 ||
2317: base[size-2] != YY_END_OF_BUFFER_CHAR ||
2318: base[size-1] != YY_END_OF_BUFFER_CHAR )
2319: /* They forgot to leave room for the EOB's. */
2320: return 0;
2321:
1.13 ! tedu 2322: b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );
1.1 deraadt 2323: if ( ! b )
2324: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
2325:
2326: b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
2327: b->yy_buf_pos = b->yy_ch_buf = base;
2328: b->yy_is_our_buffer = 0;
2329: b->yy_input_file = 0;
2330: b->yy_n_chars = b->yy_buf_size;
2331: b->yy_is_interactive = 0;
2332: b->yy_at_bol = 1;
2333: b->yy_fill_buffer = 0;
2334: b->yy_buffer_status = YY_BUFFER_NEW;
2335:
1.13 ! tedu 2336: yy_switch_to_buffer( b M4_YY_CALL_LAST_ARG );
1.1 deraadt 2337:
2338: return b;
1.13 ! tedu 2339: }
! 2340: %endif
! 2341: ]])
1.1 deraadt 2342:
2343:
1.13 ! tedu 2344: m4_ifdef( [[M4_YY_NO_SCAN_STRING]],,
! 2345: [[
! 2346: %if-c-only
! 2347: /** Setup the input buffer state to scan a string. The next call to yylex() will
! 2348: * scan from a @e copy of @a str.
! 2349: * @param yystr a NUL-terminated string to scan
! 2350: * M4_YY_DOC_PARAM
! 2351: * @return the newly allocated buffer state object.
! 2352: * @note If you want to scan bytes that may contain NUL values, then use
! 2353: * yy_scan_bytes() instead.
! 2354: */
! 2355: YY_BUFFER_STATE yy_scan_string YYFARGS1( yyconst char *, yystr)
! 2356: {
! 2357: m4_dnl M4_YY_DECL_GUTS_VAR();
! 2358:
! 2359: return yy_scan_bytes( yystr, strlen(yystr) M4_YY_CALL_LAST_ARG);
! 2360: }
! 2361: %endif
! 2362: ]])
! 2363:
! 2364:
! 2365: m4_ifdef( [[M4_YY_NO_SCAN_BYTES]],,
! 2366: [[
! 2367: %if-c-only
! 2368: /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
! 2369: * scan from a @e copy of @a bytes.
! 2370: * @param yybytes the byte buffer to scan
! 2371: * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
! 2372: * M4_YY_DOC_PARAM
! 2373: * @return the newly allocated buffer state object.
! 2374: */
! 2375: YY_BUFFER_STATE yy_scan_bytes YYFARGS2( yyconst char *,yybytes, yy_size_t ,_yybytes_len)
! 2376: {
1.1 deraadt 2377: YY_BUFFER_STATE b;
2378: char *buf;
2379: yy_size_t n;
1.13 ! tedu 2380: yy_size_t i;
! 2381: m4_dnl M4_YY_DECL_GUTS_VAR();
1.1 deraadt 2382:
2383: /* Get memory for full buffer, including space for trailing EOB's. */
1.13 ! tedu 2384: n = _yybytes_len + 2;
! 2385: buf = (char *) yyalloc( n M4_YY_CALL_LAST_ARG );
1.1 deraadt 2386: if ( ! buf )
2387: YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
2388:
1.13 ! tedu 2389: for ( i = 0; i < _yybytes_len; ++i )
! 2390: buf[i] = yybytes[i];
1.1 deraadt 2391:
1.13 ! tedu 2392: buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
1.1 deraadt 2393:
1.13 ! tedu 2394: b = yy_scan_buffer( buf, n M4_YY_CALL_LAST_ARG);
1.1 deraadt 2395: if ( ! b )
2396: YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
2397:
2398: /* It's okay to grow etc. this buffer, and we should throw it
2399: * away when we're done.
2400: */
2401: b->yy_is_our_buffer = 1;
2402:
2403: return b;
1.13 ! tedu 2404: }
! 2405: %endif
! 2406: ]])
! 2407:
! 2408:
! 2409: m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,
! 2410: [[
! 2411: %if-c-only
! 2412: static void yy_push_state YYFARGS1( int ,new_state)
! 2413: %endif
! 2414: %if-c++-only
! 2415: void yyFlexLexer::yy_push_state( int new_state )
! 2416: %endif
! 2417: {
! 2418: M4_YY_DECL_GUTS_VAR();
! 2419: if ( YY_G(yy_start_stack_ptr) >= YY_G(yy_start_stack_depth) )
1.1 deraadt 2420: {
2421: yy_size_t new_size;
2422:
1.13 ! tedu 2423: YY_G(yy_start_stack_depth) += YY_START_STACK_INCR;
! 2424: new_size = YY_G(yy_start_stack_depth) * sizeof( int );
1.1 deraadt 2425:
1.13 ! tedu 2426: if ( ! YY_G(yy_start_stack) )
! 2427: YY_G(yy_start_stack) = (int *) yyalloc( new_size M4_YY_CALL_LAST_ARG );
1.1 deraadt 2428:
2429: else
1.13 ! tedu 2430: YY_G(yy_start_stack) = (int *) yyrealloc(
! 2431: (void *) YY_G(yy_start_stack), new_size M4_YY_CALL_LAST_ARG );
1.1 deraadt 2432:
1.13 ! tedu 2433: if ( ! YY_G(yy_start_stack) )
! 2434: YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
1.1 deraadt 2435: }
2436:
1.13 ! tedu 2437: YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)++] = YY_START;
1.1 deraadt 2438:
2439: BEGIN(new_state);
1.13 ! tedu 2440: }
! 2441: ]])
1.1 deraadt 2442:
2443:
1.13 ! tedu 2444: m4_ifdef( [[M4_YY_NO_POP_STATE]],,
! 2445: [[
! 2446: %if-c-only
! 2447: static void yy_pop_state YYFARGS0(void)
! 2448: %endif
! 2449: %if-c++-only
! 2450: void yyFlexLexer::yy_pop_state()
! 2451: %endif
! 2452: {
! 2453: M4_YY_DECL_GUTS_VAR();
! 2454: if ( --YY_G(yy_start_stack_ptr) < 0 )
1.1 deraadt 2455: YY_FATAL_ERROR( "start-condition stack underflow" );
2456:
1.13 ! tedu 2457: BEGIN(YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)]);
! 2458: }
! 2459: ]])
! 2460:
! 2461:
! 2462: m4_ifdef( [[M4_YY_NO_TOP_STATE]],,
! 2463: [[
! 2464: %if-c-only
! 2465: static int yy_top_state YYFARGS0(void)
! 2466: %endif
! 2467: %if-c++-only
! 2468: int yyFlexLexer::yy_top_state()
! 2469: %endif
! 2470: {
! 2471: M4_YY_DECL_GUTS_VAR();
! 2472: return YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1];
! 2473: }
! 2474: ]])
1.1 deraadt 2475:
2476: #ifndef YY_EXIT_FAILURE
2477: #define YY_EXIT_FAILURE 2
2478: #endif
2479:
1.13 ! tedu 2480: %if-c-only
! 2481: static void yy_fatal_error YYFARGS1(yyconst char*, msg)
! 2482: {
! 2483: m4_dnl M4_YY_DECL_GUTS_VAR();
1.1 deraadt 2484: (void) fprintf( stderr, "%s\n", msg );
2485: exit( YY_EXIT_FAILURE );
1.13 ! tedu 2486: }
! 2487: %endif
! 2488: %if-c++-only
1.1 deraadt 2489: void yyFlexLexer::LexerError( yyconst char msg[] )
1.13 ! tedu 2490: {
! 2491: M4_YY_DECL_GUTS_VAR();
! 2492: std::cerr << msg << std::endl;
1.1 deraadt 2493: exit( YY_EXIT_FAILURE );
1.13 ! tedu 2494: }
! 2495: %endif
1.1 deraadt 2496:
2497: /* Redefine yyless() so it works in section 3 code. */
2498:
2499: #undef yyless
2500: #define yyless(n) \
2501: do \
2502: { \
2503: /* Undo effects of setting up yytext. */ \
1.13 ! tedu 2504: int yyless_macro_arg = (n); \
! 2505: YY_LESS_LINENO(yyless_macro_arg);\
! 2506: yytext[yyleng] = YY_G(yy_hold_char); \
! 2507: YY_G(yy_c_buf_p) = yytext + yyless_macro_arg; \
! 2508: YY_G(yy_hold_char) = *YY_G(yy_c_buf_p); \
! 2509: *YY_G(yy_c_buf_p) = '\0'; \
! 2510: yyleng = yyless_macro_arg; \
1.1 deraadt 2511: } \
2512: while ( 0 )
2513:
2514:
2515:
1.13 ! tedu 2516: /* Accessor methods (get/set functions) to struct members. */
! 2517:
! 2518: %if-c-only
! 2519: %if-reentrant
! 2520: m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,
! 2521: [[
! 2522: /** Get the user-defined data for this scanner.
! 2523: * M4_YY_DOC_PARAM
! 2524: */
! 2525: YY_EXTRA_TYPE yyget_extra YYFARGS0(void)
! 2526: {
! 2527: M4_YY_DECL_GUTS_VAR();
! 2528: return yyextra;
! 2529: }
! 2530: ]])
! 2531: %endif
! 2532:
! 2533: m4_ifdef( [[M4_YY_NO_GET_LINENO]],,
! 2534: [[
! 2535: /** Get the current line number.
! 2536: * M4_YY_DOC_PARAM
! 2537: */
! 2538: int yyget_lineno YYFARGS0(void)
! 2539: {
! 2540: M4_YY_DECL_GUTS_VAR();
! 2541:
! 2542: m4_ifdef( [[M4_YY_REENTRANT]],
! 2543: [[
! 2544: if (! YY_CURRENT_BUFFER)
! 2545: return 0;
! 2546: ]])
! 2547: return yylineno;
! 2548: }
! 2549: ]])
! 2550:
! 2551: m4_ifdef( [[M4_YY_REENTRANT]],
! 2552: [[
! 2553: m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,
! 2554: [[
! 2555: /** Get the current column number.
! 2556: * M4_YY_DOC_PARAM
! 2557: */
! 2558: int yyget_column YYFARGS0(void)
! 2559: {
! 2560: M4_YY_DECL_GUTS_VAR();
! 2561:
! 2562: m4_ifdef( [[M4_YY_REENTRANT]],
! 2563: [[
! 2564: if (! YY_CURRENT_BUFFER)
! 2565: return 0;
! 2566: ]])
! 2567: return yycolumn;
! 2568: }
! 2569: ]])
! 2570: ]])
! 2571:
! 2572: m4_ifdef( [[M4_YY_NO_GET_IN]],,
! 2573: [[
! 2574: /** Get the input stream.
! 2575: * M4_YY_DOC_PARAM
! 2576: */
! 2577: FILE *yyget_in YYFARGS0(void)
! 2578: {
! 2579: M4_YY_DECL_GUTS_VAR();
! 2580: return yyin;
! 2581: }
! 2582: ]])
! 2583:
! 2584: m4_ifdef( [[M4_YY_NO_GET_OUT]],,
! 2585: [[
! 2586: /** Get the output stream.
! 2587: * M4_YY_DOC_PARAM
! 2588: */
! 2589: FILE *yyget_out YYFARGS0(void)
! 2590: {
! 2591: M4_YY_DECL_GUTS_VAR();
! 2592: return yyout;
! 2593: }
! 2594: ]])
! 2595:
! 2596: m4_ifdef( [[M4_YY_NO_GET_LENG]],,
! 2597: [[
! 2598: /** Get the length of the current token.
! 2599: * M4_YY_DOC_PARAM
! 2600: */
! 2601: yy_size_t yyget_leng YYFARGS0(void)
! 2602: {
! 2603: M4_YY_DECL_GUTS_VAR();
! 2604: return yyleng;
! 2605: }
! 2606: ]])
! 2607:
! 2608: /** Get the current token.
! 2609: * M4_YY_DOC_PARAM
! 2610: */
! 2611: m4_ifdef( [[M4_YY_NO_GET_TEXT]],,
! 2612: [[
! 2613: char *yyget_text YYFARGS0(void)
! 2614: {
! 2615: M4_YY_DECL_GUTS_VAR();
! 2616: return yytext;
! 2617: }
! 2618: ]])
! 2619:
! 2620: %if-reentrant
! 2621: m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,
! 2622: [[
! 2623: /** Set the user-defined data. This data is never touched by the scanner.
! 2624: * @param user_defined The data to be associated with this scanner.
! 2625: * M4_YY_DOC_PARAM
! 2626: */
! 2627: void yyset_extra YYFARGS1( YY_EXTRA_TYPE ,user_defined)
! 2628: {
! 2629: M4_YY_DECL_GUTS_VAR();
! 2630: yyextra = user_defined ;
! 2631: }
! 2632: ]])
! 2633: %endif
! 2634:
! 2635: m4_ifdef( [[M4_YY_NO_SET_LINENO]],,
! 2636: [[
! 2637: /** Set the current line number.
! 2638: * @param line_number
! 2639: * M4_YY_DOC_PARAM
! 2640: */
! 2641: void yyset_lineno YYFARGS1( int ,line_number)
! 2642: {
! 2643: M4_YY_DECL_GUTS_VAR();
! 2644:
! 2645: m4_ifdef( [[M4_YY_REENTRANT]],
! 2646: [[
! 2647: /* lineno is only valid if an input buffer exists. */
! 2648: if (! YY_CURRENT_BUFFER )
! 2649: YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
! 2650: ]])
! 2651: yylineno = line_number;
! 2652: }
! 2653: ]])
! 2654:
! 2655: m4_ifdef( [[M4_YY_REENTRANT]],
! 2656: [[
! 2657: m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,
! 2658: [[
! 2659: /** Set the current column.
! 2660: * @param line_number
! 2661: * M4_YY_DOC_PARAM
! 2662: */
! 2663: void yyset_column YYFARGS1( int , column_no)
! 2664: {
! 2665: M4_YY_DECL_GUTS_VAR();
! 2666:
! 2667: m4_ifdef( [[M4_YY_REENTRANT]],
! 2668: [[
! 2669: /* column is only valid if an input buffer exists. */
! 2670: if (! YY_CURRENT_BUFFER )
! 2671: YY_FATAL_ERROR( "yyset_column called with no buffer" );
! 2672: ]])
! 2673: yycolumn = column_no;
! 2674: }
! 2675: ]])
! 2676: ]])
! 2677:
! 2678:
! 2679: m4_ifdef( [[M4_YY_NO_SET_IN]],,
! 2680: [[
! 2681: /** Set the input stream. This does not discard the current
! 2682: * input buffer.
! 2683: * @param in_str A readable stream.
! 2684: * M4_YY_DOC_PARAM
! 2685: * @see yy_switch_to_buffer
! 2686: */
! 2687: void yyset_in YYFARGS1( FILE * ,in_str)
! 2688: {
! 2689: M4_YY_DECL_GUTS_VAR();
! 2690: yyin = in_str ;
! 2691: }
! 2692: ]])
! 2693:
! 2694: m4_ifdef( [[M4_YY_NO_SET_OUT]],,
! 2695: [[
! 2696: void yyset_out YYFARGS1( FILE * ,out_str)
! 2697: {
! 2698: M4_YY_DECL_GUTS_VAR();
! 2699: yyout = out_str ;
! 2700: }
! 2701: ]])
! 2702:
! 2703:
! 2704: m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,
! 2705: [[
! 2706: int yyget_debug YYFARGS0(void)
! 2707: {
! 2708: M4_YY_DECL_GUTS_VAR();
! 2709: return yy_flex_debug;
! 2710: }
! 2711: ]])
! 2712:
! 2713: m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,
! 2714: [[
! 2715: void yyset_debug YYFARGS1( int ,bdebug)
! 2716: {
! 2717: M4_YY_DECL_GUTS_VAR();
! 2718: yy_flex_debug = bdebug ;
! 2719: }
! 2720: ]])
! 2721: %endif
! 2722:
! 2723: %if-reentrant
! 2724: /* Accessor methods for yylval and yylloc */
! 2725:
! 2726: %if-bison-bridge
! 2727: m4_ifdef( [[M4_YY_NO_GET_LVAL]],,
! 2728: [[
! 2729: YYSTYPE * yyget_lval YYFARGS0(void)
! 2730: {
! 2731: M4_YY_DECL_GUTS_VAR();
! 2732: return yylval;
! 2733: }
! 2734: ]])
! 2735:
! 2736: m4_ifdef( [[M4_YY_NO_SET_LVAL]],,
! 2737: [[
! 2738: void yyset_lval YYFARGS1( YYSTYPE * ,yylval_param)
! 2739: {
! 2740: M4_YY_DECL_GUTS_VAR();
! 2741: yylval = yylval_param;
! 2742: }
! 2743: ]])
! 2744:
! 2745: m4_ifdef( [[<M4_YY_BISON_LLOC>]],
! 2746: [[
! 2747: m4_ifdef( [[M4_YY_NO_GET_LLOC]],,
! 2748: [[
! 2749: YYLTYPE *yyget_lloc YYFARGS0(void)
! 2750: {
! 2751: M4_YY_DECL_GUTS_VAR();
! 2752: return yylloc;
! 2753: }
! 2754: ]])
! 2755:
! 2756: m4_ifdef( [[M4_YY_NO_SET_LLOC]],,
! 2757: [[
! 2758: void yyset_lloc YYFARGS1( YYLTYPE * ,yylloc_param)
! 2759: {
! 2760: M4_YY_DECL_GUTS_VAR();
! 2761: yylloc = yylloc_param;
! 2762: }
! 2763: ]])
! 2764: ]])
! 2765:
! 2766: %endif
! 2767:
! 2768:
! 2769: /* User-visible API */
! 2770:
! 2771: /* yylex_init is special because it creates the scanner itself, so it is
! 2772: * the ONLY reentrant function that doesn't take the scanner as the last argument.
! 2773: * That's why we explicitly handle the declaration, instead of using our macros.
! 2774: */
! 2775: m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
! 2776: [[
! 2777: int yylex_init( ptr_yy_globals )
! 2778: yyscan_t* ptr_yy_globals;
! 2779: ]],
! 2780: [[
! 2781: int yylex_init(yyscan_t* ptr_yy_globals)
! 2782: ]])
! 2783: {
! 2784: if (ptr_yy_globals == NULL){
! 2785: errno = EINVAL;
! 2786: return 1;
! 2787: }
! 2788:
! 2789: *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
! 2790:
! 2791: if (*ptr_yy_globals == NULL){
! 2792: errno = ENOMEM;
! 2793: return 1;
! 2794: }
! 2795:
! 2796: /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
! 2797: memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
! 2798:
! 2799: return yy_init_globals ( *ptr_yy_globals );
! 2800: }
! 2801:
! 2802:
! 2803: /* yylex_init_extra has the same functionality as yylex_init, but follows the
! 2804: * convention of taking the scanner as the last argument. Note however, that
! 2805: * this is a *pointer* to a scanner, as it will be allocated by this call (and
! 2806: * is the reason, too, why this function also must handle its own declaration).
! 2807: * The user defined value in the first argument will be available to yyalloc in
! 2808: * the yyextra field.
! 2809: */
! 2810: m4_ifdef( [[M4_YY_NO_ANSI_FUNC_DEFS]],
! 2811: [[
! 2812: int yylex_init_extra( yy_user_defined, ptr_yy_globals )
! 2813: YY_EXTRA_TYPE yy_user_defined;
! 2814: yyscan_t* ptr_yy_globals;
! 2815: ]],
! 2816: [[
! 2817: int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
! 2818: ]])
! 2819: {
! 2820: struct yyguts_t dummy_yyguts;
! 2821:
! 2822: yyset_extra (yy_user_defined, &dummy_yyguts);
! 2823:
! 2824: if (ptr_yy_globals == NULL){
! 2825: errno = EINVAL;
! 2826: return 1;
! 2827: }
! 2828:
! 2829: *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
! 2830:
! 2831: if (*ptr_yy_globals == NULL){
! 2832: errno = ENOMEM;
! 2833: return 1;
! 2834: }
! 2835:
! 2836: /* By setting to 0xAA, we expose bugs in
! 2837: yy_init_globals. Leave at 0x00 for releases. */
! 2838: memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
! 2839:
! 2840: yyset_extra (yy_user_defined, *ptr_yy_globals);
! 2841:
! 2842: return yy_init_globals ( *ptr_yy_globals );
! 2843: }
! 2844:
! 2845: %endif if-c-only
! 2846:
! 2847:
! 2848: %if-c-only
! 2849: static int yy_init_globals YYFARGS0(void)
! 2850: {
! 2851: M4_YY_DECL_GUTS_VAR();
! 2852: /* Initialization is the same as for the non-reentrant scanner.
! 2853: * This function is called from yylex_destroy(), so don't allocate here.
! 2854: */
! 2855:
! 2856: m4_ifdef( [[M4_YY_USE_LINENO]],
! 2857: [[
! 2858: m4_ifdef( [[M4_YY_NOT_REENTRANT]],
! 2859: [[
! 2860: /* We do not touch yylineno unless the option is enabled. */
! 2861: yylineno = 1;
! 2862: ]])
! 2863: ]])
! 2864: YY_G(yy_buffer_stack) = 0;
! 2865: YY_G(yy_buffer_stack_top) = 0;
! 2866: YY_G(yy_buffer_stack_max) = 0;
! 2867: YY_G(yy_c_buf_p) = (char *) 0;
! 2868: YY_G(yy_init) = 0;
! 2869: YY_G(yy_start) = 0;
! 2870:
! 2871: m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],
! 2872: [[
! 2873: YY_G(yy_start_stack_ptr) = 0;
! 2874: YY_G(yy_start_stack_depth) = 0;
! 2875: YY_G(yy_start_stack) = NULL;
! 2876: ]])
! 2877:
! 2878: m4_ifdef( [[M4_YY_USES_REJECT]],
! 2879: [[
! 2880: YY_G(yy_state_buf) = 0;
! 2881: YY_G(yy_state_ptr) = 0;
! 2882: YY_G(yy_full_match) = 0;
! 2883: YY_G(yy_lp) = 0;
! 2884: ]])
! 2885:
! 2886: m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],
! 2887: [[
! 2888: YY_G(yytext_ptr) = 0;
! 2889: YY_G(yy_more_offset) = 0;
! 2890: YY_G(yy_prev_more_offset) = 0;
! 2891: ]])
! 2892:
! 2893: /* Defined in main.c */
! 2894: #ifdef YY_STDINIT
! 2895: yyin = stdin;
! 2896: yyout = stdout;
! 2897: #else
! 2898: yyin = (FILE *) 0;
! 2899: yyout = (FILE *) 0;
! 2900: #endif
! 2901:
! 2902: /* For future reference: Set errno on error, since we are called by
! 2903: * yylex_init()
! 2904: */
! 2905: return 0;
! 2906: }
! 2907: %endif
! 2908:
! 2909:
! 2910: %if-c-only SNIP! this currently causes conflicts with the c++ scanner
! 2911: /* yylex_destroy is for both reentrant and non-reentrant scanners. */
! 2912: int yylex_destroy YYFARGS0(void)
! 2913: {
! 2914: M4_YY_DECL_GUTS_VAR();
! 2915:
! 2916: /* Pop the buffer stack, destroying each element. */
! 2917: while(YY_CURRENT_BUFFER){
! 2918: yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG );
! 2919: YY_CURRENT_BUFFER_LVALUE = NULL;
! 2920: yypop_buffer_state(M4_YY_CALL_ONLY_ARG);
! 2921: }
! 2922:
! 2923: /* Destroy the stack itself. */
! 2924: yyfree(YY_G(yy_buffer_stack) M4_YY_CALL_LAST_ARG);
! 2925: YY_G(yy_buffer_stack) = NULL;
! 2926:
! 2927: m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],
! 2928: [[
! 2929: /* Destroy the start condition stack. */
! 2930: yyfree( YY_G(yy_start_stack) M4_YY_CALL_LAST_ARG );
! 2931: YY_G(yy_start_stack) = NULL;
! 2932: ]])
! 2933:
! 2934: m4_ifdef( [[M4_YY_USES_REJECT]],
! 2935: [[
! 2936: yyfree ( YY_G(yy_state_buf) M4_YY_CALL_LAST_ARG);
! 2937: YY_G(yy_state_buf) = NULL;
! 2938: ]])
! 2939:
! 2940: /* Reset the globals. This is important in a non-reentrant scanner so the next time
! 2941: * yylex() is called, initialization will occur. */
! 2942: yy_init_globals( M4_YY_CALL_ONLY_ARG);
! 2943:
! 2944: %if-reentrant
! 2945: /* Destroy the main struct (reentrant only). */
! 2946: yyfree ( yyscanner M4_YY_CALL_LAST_ARG );
! 2947: yyscanner = NULL;
! 2948: %endif
! 2949: return 0;
! 2950: }
! 2951: %endif
! 2952:
! 2953:
! 2954: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 2955: [[
! 2956: /*
! 2957: * Internal utility routines.
! 2958: */
! 2959: ]])
! 2960:
! 2961: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 2962: [[
1.1 deraadt 2963: #ifndef yytext_ptr
1.13 ! tedu 2964: static void yy_flex_strncpy YYFARGS3( char*,s1, yyconst char *,s2, int,n)
! 2965: {
! 2966: int i;
1.1 deraadt 2967: for ( i = 0; i < n; ++i )
2968: s1[i] = s2[i];
1.13 ! tedu 2969: }
1.3 millert 2970: #endif
1.13 ! tedu 2971: ]])
1.3 millert 2972:
1.13 ! tedu 2973: m4_ifdef( [[M4_YY_NOT_IN_HEADER]],
! 2974: [[
1.3 millert 2975: #ifdef YY_NEED_STRLEN
1.13 ! tedu 2976: static int yy_flex_strlen YYFARGS1( yyconst char *,s)
! 2977: {
! 2978: int n;
1.3 millert 2979: for ( n = 0; s[n]; ++n )
2980: ;
2981:
2982: return n;
1.13 ! tedu 2983: }
1.1 deraadt 2984: #endif
1.13 ! tedu 2985: ]])
1.1 deraadt 2986:
1.13 ! tedu 2987: m4_ifdef( [[M4_YY_NO_FLEX_ALLOC]],,
! 2988: [[
! 2989: void *yyalloc YYFARGS1( yy_size_t ,size)
! 2990: {
1.1 deraadt 2991: return (void *) malloc( size );
1.13 ! tedu 2992: }
! 2993: ]])
1.1 deraadt 2994:
1.13 ! tedu 2995: m4_ifdef( [[M4_YY_NO_FLEX_REALLOC]],,
! 2996: [[
! 2997: void *yyrealloc YYFARGS2( void *,ptr, yy_size_t ,size)
! 2998: {
1.1 deraadt 2999: /* The cast to (char *) in the following accommodates both
3000: * implementations that use char* generic pointers, and those
3001: * that use void* generic pointers. It works with the latter
3002: * because both ANSI C and C++ allow castless assignment from
3003: * any pointer type to void*, and deal with argument conversions
3004: * as though doing an assignment.
3005: */
3006: return (void *) realloc( (char *) ptr, size );
1.13 ! tedu 3007: }
! 3008: ]])
1.1 deraadt 3009:
1.13 ! tedu 3010: m4_ifdef( [[M4_YY_NO_FLEX_FREE]],,
! 3011: [[
! 3012: void yyfree YYFARGS1( void *,ptr)
! 3013: {
! 3014: free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
! 3015: }
! 3016: ]])
! 3017:
! 3018: %if-tables-serialization definitions
! 3019: m4preproc_include(`tables_shared.c')
! 3020:
! 3021: static int yytbl_read8 (void *v, struct yytbl_reader * rd)
! 3022: {
! 3023: errno = 0;
! 3024: if (fread (v, sizeof (flex_uint8_t), 1, rd->fp) != 1){
! 3025: errno = EIO;
! 3026: return -1;
! 3027: }
! 3028: rd->bread += sizeof(flex_uint8_t);
! 3029: return 0;
! 3030: }
! 3031:
! 3032: static int yytbl_read16 (void *v, struct yytbl_reader * rd)
! 3033: {
! 3034: errno = 0;
! 3035: if (fread (v, sizeof (flex_uint16_t), 1, rd->fp) != 1){
! 3036: errno = EIO;
! 3037: return -1;
! 3038: }
! 3039: *((flex_uint16_t *) v) = ntohs (*((flex_uint16_t *) v));
! 3040: rd->bread += sizeof(flex_uint16_t);
! 3041: return 0;
! 3042: }
! 3043:
! 3044: static int yytbl_read32 (void *v, struct yytbl_reader * rd)
! 3045: {
! 3046: errno = 0;
! 3047: if (fread (v, sizeof (flex_uint32_t), 1, rd->fp) != 1){
! 3048: errno = EIO;
! 3049: return -1;
! 3050: }
! 3051: *((flex_uint32_t *) v) = ntohl (*((flex_uint32_t *) v));
! 3052: rd->bread += sizeof(flex_uint32_t);
! 3053: return 0;
! 3054: }
! 3055:
! 3056: /** Read the header */
! 3057: static int yytbl_hdr_read YYFARGS2(struct yytbl_hdr *, th, struct yytbl_reader *, rd)
! 3058: {
! 3059: int bytes;
! 3060: memset (th, 0, sizeof (struct yytbl_hdr));
! 3061:
! 3062: if (yytbl_read32 (&(th->th_magic), rd) != 0)
! 3063: return -1;
! 3064:
! 3065: if (th->th_magic != YYTBL_MAGIC){
! 3066: YY_FATAL_ERROR( "bad magic number" ); /* TODO: not fatal. */
! 3067: return -1;
! 3068: }
! 3069:
! 3070: if (yytbl_read32 (&(th->th_hsize), rd) != 0
! 3071: || yytbl_read32 (&(th->th_ssize), rd) != 0
! 3072: || yytbl_read16 (&(th->th_flags), rd) != 0)
! 3073: return -1;
! 3074:
! 3075: /* Sanity check on header size. Greater than 1k suggests some funny business. */
! 3076: if (th->th_hsize < 16 || th->th_hsize > 1024){
! 3077: YY_FATAL_ERROR( "insane header size detected" ); /* TODO: not fatal. */
! 3078: return -1;
! 3079: }
! 3080:
! 3081: /* Allocate enough space for the version and name fields */
! 3082: bytes = th->th_hsize - 14;
! 3083: th->th_version = (char *) yyalloc (bytes M4_YY_CALL_LAST_ARG);
! 3084: if ( ! th->th_version )
! 3085: YY_FATAL_ERROR( "out of dynamic memory in yytbl_hdr_read()" );
! 3086:
! 3087: /* we read it all into th_version, and point th_name into that data */
! 3088: if (fread (th->th_version, 1, bytes, rd->fp) != bytes){
! 3089: errno = EIO;
! 3090: yyfree(th->th_version M4_YY_CALL_LAST_ARG);
! 3091: th->th_version = NULL;
! 3092: return -1;
! 3093: }
! 3094: else
! 3095: rd->bread += bytes;
! 3096:
! 3097: th->th_name = th->th_version + strlen (th->th_version) + 1;
! 3098: return 0;
! 3099: }
! 3100:
! 3101: /** lookup id in the dmap list.
! 3102: * @param dmap pointer to first element in list
! 3103: * @return NULL if not found.
! 3104: */
! 3105: static struct yytbl_dmap *yytbl_dmap_lookup YYFARGS2(struct yytbl_dmap *, dmap,
! 3106: int, id)
! 3107: {
! 3108: while (dmap->dm_id)
! 3109: if (dmap->dm_id == id)
! 3110: return dmap;
! 3111: else
! 3112: dmap++;
! 3113: return NULL;
! 3114: }
! 3115:
! 3116: /** Read a table while mapping its contents to the local array.
! 3117: * @param dmap used to performing mapping
! 3118: * @return 0 on success
! 3119: */
! 3120: static int yytbl_data_load YYFARGS2(struct yytbl_dmap *, dmap, struct yytbl_reader*, rd)
! 3121: {
! 3122: struct yytbl_data td;
! 3123: struct yytbl_dmap *transdmap=0;
! 3124: int len, i, rv, inner_loop_count;
! 3125: void *p=0;
! 3126:
! 3127: memset (&td, 0, sizeof (struct yytbl_data));
! 3128:
! 3129: if (yytbl_read16 (&td.td_id, rd) != 0
! 3130: || yytbl_read16 (&td.td_flags, rd) != 0
! 3131: || yytbl_read32 (&td.td_hilen, rd) != 0
! 3132: || yytbl_read32 (&td.td_lolen, rd) != 0)
! 3133: return -1;
! 3134:
! 3135: /* Lookup the map for the transition table so we have it in case we need it
! 3136: * inside the loop below. This scanner might not even have a transition
! 3137: * table, which is ok.
! 3138: */
! 3139: transdmap = yytbl_dmap_lookup (dmap, YYTD_ID_TRANSITION M4_YY_CALL_LAST_ARG);
! 3140:
! 3141: if ((dmap = yytbl_dmap_lookup (dmap, td.td_id M4_YY_CALL_LAST_ARG)) == NULL){
! 3142: YY_FATAL_ERROR( "table id not found in map." ); /* TODO: not fatal. */
! 3143: return -1;
! 3144: }
! 3145:
! 3146: /* Allocate space for table.
! 3147: * The --full yy_transition table is a special case, since we
! 3148: * need the dmap.dm_sz entry to tell us the sizeof the individual
! 3149: * struct members.
! 3150: */
! 3151: {
! 3152: size_t bytes;
! 3153:
! 3154: if ((td.td_flags & YYTD_STRUCT))
! 3155: bytes = sizeof(struct yy_trans_info) * td.td_lolen * (td.td_hilen ? td.td_hilen : 1);
! 3156: else
! 3157: bytes = td.td_lolen * (td.td_hilen ? td.td_hilen : 1) * dmap->dm_sz;
! 3158:
! 3159: if(M4_YY_TABLES_VERIFY)
! 3160: /* We point to the array itself */
! 3161: p = dmap->dm_arr;
! 3162: else
! 3163: /* We point to the address of a pointer. */
! 3164: *dmap->dm_arr = p = (void *) yyalloc (bytes M4_YY_CALL_LAST_ARG);
! 3165: if ( ! p )
! 3166: YY_FATAL_ERROR( "out of dynamic memory in yytbl_data_load()" );
! 3167: }
! 3168:
! 3169: /* If it's a struct, we read 2 integers to get one element */
! 3170: if ((td.td_flags & YYTD_STRUCT) != 0)
! 3171: inner_loop_count = 2;
! 3172: else
! 3173: inner_loop_count = 1;
! 3174:
! 3175: /* read and map each element.
! 3176: * This loop iterates once for each element of the td_data array.
! 3177: * Notice that we increment 'i' in the inner loop.
! 3178: */
! 3179: len = yytbl_calc_total_len (&td);
! 3180: for (i = 0; i < len; ){
! 3181: int j;
! 3182:
! 3183:
! 3184: /* This loop really executes exactly 1 or 2 times.
! 3185: * The second time is to handle the second member of the
! 3186: * YYTD_STRUCT for the yy_transition array.
! 3187: */
! 3188: for (j = 0; j < inner_loop_count; j++, i++) {
! 3189: flex_int32_t t32;
! 3190:
! 3191: /* read into t32 no matter what the real size is. */
! 3192: {
! 3193: flex_int16_t t16;
! 3194: flex_int8_t t8;
! 3195:
! 3196: switch (YYTDFLAGS2BYTES (td.td_flags)) {
! 3197: case sizeof (flex_int32_t):
! 3198: rv = yytbl_read32 (&t32, rd);
! 3199: break;
! 3200: case sizeof (flex_int16_t):
! 3201: rv = yytbl_read16 (&t16, rd);
! 3202: t32 = t16;
! 3203: break;
! 3204: case sizeof (flex_int8_t):
! 3205: rv = yytbl_read8 (&t8, rd);
! 3206: t32 = t8;
! 3207: break;
! 3208: default:
! 3209: YY_FATAL_ERROR( "invalid td_flags" ); /* TODO: not fatal. */
! 3210: return -1;
! 3211: }
! 3212: }
! 3213: if (rv != 0)
! 3214: return -1;
! 3215:
! 3216: /* copy into the deserialized array... */
! 3217:
! 3218: if ((td.td_flags & YYTD_STRUCT)) {
! 3219: /* t32 is the j'th member of a two-element struct. */
! 3220: void *v;
! 3221:
! 3222: v = j == 0 ? &(((struct yy_trans_info *) p)->yy_verify)
! 3223: : &(((struct yy_trans_info *) p)->yy_nxt);
! 3224:
! 3225: switch (dmap->dm_sz) {
! 3226: case sizeof (flex_int32_t):
! 3227: if (M4_YY_TABLES_VERIFY){
! 3228: if( ((flex_int32_t *) v)[0] != (flex_int32_t) t32)
! 3229: YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int32_t" );
! 3230: }else
! 3231: ((flex_int32_t *) v)[0] = (flex_int32_t) t32;
! 3232: break;
! 3233: case sizeof (flex_int16_t):
! 3234: if (M4_YY_TABLES_VERIFY ){
! 3235: if(((flex_int16_t *) v)[0] != (flex_int16_t) t32)
! 3236: YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int16_t" );
! 3237: }else
! 3238: ((flex_int16_t *) v)[0] = (flex_int16_t) t32;
! 3239: break;
! 3240: case sizeof(flex_int8_t):
! 3241: if (M4_YY_TABLES_VERIFY ){
! 3242: if( ((flex_int8_t *) v)[0] != (flex_int8_t) t32)
! 3243: YY_FATAL_ERROR( "tables verification failed at YYTD_STRUCT flex_int8_t" );
! 3244: }else
! 3245: ((flex_int8_t *) v)[0] = (flex_int8_t) t32;
! 3246: break;
! 3247: default:
! 3248: YY_FATAL_ERROR( "invalid dmap->dm_sz for struct" ); /* TODO: not fatal. */
! 3249: return -1;
! 3250: }
! 3251:
! 3252: /* if we're done with j, increment p */
! 3253: if (j == 1)
! 3254: p = (struct yy_trans_info *) p + 1;
! 3255: }
! 3256: else if ((td.td_flags & YYTD_PTRANS)) {
! 3257: /* t32 is an index into the transition array. */
! 3258: struct yy_trans_info *v;
! 3259:
! 3260:
! 3261: if (!transdmap){
! 3262: YY_FATAL_ERROR( "transition table not found" ); /* TODO: not fatal. */
! 3263: return -1;
! 3264: }
! 3265:
! 3266: if( M4_YY_TABLES_VERIFY)
! 3267: v = &(((struct yy_trans_info *) (transdmap->dm_arr))[t32]);
! 3268: else
! 3269: v = &((*((struct yy_trans_info **) (transdmap->dm_arr)))[t32]);
! 3270:
! 3271: if(M4_YY_TABLES_VERIFY ){
! 3272: if( ((struct yy_trans_info **) p)[0] != v)
! 3273: YY_FATAL_ERROR( "tables verification failed at YYTD_PTRANS" );
! 3274: }else
! 3275: ((struct yy_trans_info **) p)[0] = v;
! 3276:
! 3277: /* increment p */
! 3278: p = (struct yy_trans_info **) p + 1;
! 3279: }
! 3280: else {
! 3281: /* t32 is a plain int. copy data, then incrememnt p. */
! 3282: switch (dmap->dm_sz) {
! 3283: case sizeof (flex_int32_t):
! 3284: if(M4_YY_TABLES_VERIFY ){
! 3285: if( ((flex_int32_t *) p)[0] != (flex_int32_t) t32)
! 3286: YY_FATAL_ERROR( "tables verification failed at flex_int32_t" );
! 3287: }else
! 3288: ((flex_int32_t *) p)[0] = (flex_int32_t) t32;
! 3289: p = ((flex_int32_t *) p) + 1;
! 3290: break;
! 3291: case sizeof (flex_int16_t):
! 3292: if(M4_YY_TABLES_VERIFY ){
! 3293: if( ((flex_int16_t *) p)[0] != (flex_int16_t) t32)
! 3294: YY_FATAL_ERROR( "tables verification failed at flex_int16_t" );
! 3295: }else
! 3296: ((flex_int16_t *) p)[0] = (flex_int16_t) t32;
! 3297: p = ((flex_int16_t *) p) + 1;
! 3298: break;
! 3299: case sizeof (flex_int8_t):
! 3300: if(M4_YY_TABLES_VERIFY ){
! 3301: if( ((flex_int8_t *) p)[0] != (flex_int8_t) t32)
! 3302: YY_FATAL_ERROR( "tables verification failed at flex_int8_t" );
! 3303: }else
! 3304: ((flex_int8_t *) p)[0] = (flex_int8_t) t32;
! 3305: p = ((flex_int8_t *) p) + 1;
! 3306: break;
! 3307: default:
! 3308: YY_FATAL_ERROR( "invalid dmap->dm_sz for plain int" ); /* TODO: not fatal. */
! 3309: return -1;
! 3310: }
! 3311: }
! 3312: }
! 3313:
! 3314: }
! 3315:
! 3316: /* Now eat padding. */
! 3317: {
! 3318: int pad;
! 3319: pad = yypad64(rd->bread);
! 3320: while(--pad >= 0){
! 3321: flex_int8_t t8;
! 3322: if(yytbl_read8(&t8,rd) != 0)
! 3323: return -1;
! 3324: }
! 3325: }
! 3326:
! 3327: return 0;
! 3328: }
! 3329:
! 3330: %define-yytables The name for this specific scanner's tables.
! 3331:
! 3332: /* Find the key and load the DFA tables from the given stream. */
! 3333: static int yytbl_fload YYFARGS2(FILE *, fp, const char *, key)
! 3334: {
! 3335: int rv=0;
! 3336: struct yytbl_hdr th;
! 3337: struct yytbl_reader rd;
! 3338:
! 3339: rd.fp = fp;
! 3340: th.th_version = NULL;
! 3341:
! 3342: /* Keep trying until we find the right set of tables or end of file. */
! 3343: while (!feof(rd.fp)) {
! 3344: rd.bread = 0;
! 3345: if (yytbl_hdr_read (&th, &rd M4_YY_CALL_LAST_ARG) != 0){
! 3346: rv = -1;
! 3347: goto return_rv;
! 3348: }
! 3349:
! 3350: /* A NULL key means choose the first set of tables. */
! 3351: if (key == NULL)
! 3352: break;
! 3353:
! 3354: if (strcmp(th.th_name,key) != 0){
! 3355: /* Skip ahead to next set */
! 3356: fseek(rd.fp, th.th_ssize - th.th_hsize, SEEK_CUR);
! 3357: yyfree(th.th_version M4_YY_CALL_LAST_ARG);
! 3358: th.th_version = NULL;
! 3359: }
! 3360: else
! 3361: break;
! 3362: }
! 3363:
! 3364: while (rd.bread < th.th_ssize){
! 3365: /* Load the data tables */
! 3366: if(yytbl_data_load (yydmap,&rd M4_YY_CALL_LAST_ARG) != 0){
! 3367: rv = -1;
! 3368: goto return_rv;
! 3369: }
! 3370: }
! 3371:
! 3372: return_rv:
! 3373: if(th.th_version){
! 3374: yyfree(th.th_version M4_YY_CALL_LAST_ARG);
! 3375: th.th_version = NULL;
! 3376: }
! 3377:
! 3378: return rv;
! 3379: }
! 3380:
! 3381: /** Load the DFA tables for this scanner from the given stream. */
! 3382: int yytables_fload YYFARGS1(FILE *, fp)
! 3383: {
! 3384:
! 3385: if( yytbl_fload(fp, YYTABLES_NAME M4_YY_CALL_LAST_ARG) != 0)
! 3386: return -1;
! 3387: return 0;
! 3388: }
! 3389:
! 3390: /** Destroy the loaded tables, freeing memory, etc.. */
! 3391: int yytables_destroy YYFARGS0(void)
! 3392: {
! 3393: struct yytbl_dmap *dmap=0;
! 3394:
! 3395: if(!M4_YY_TABLES_VERIFY){
! 3396: /* Walk the dmap, freeing the pointers */
! 3397: for(dmap=yydmap; dmap->dm_id; dmap++) {
! 3398: void * v;
! 3399: v = dmap->dm_arr;
! 3400: if(v && *(char**)v){
! 3401: yyfree(*(char**)v M4_YY_CALL_LAST_ARG);
! 3402: *(char**)v = NULL;
! 3403: }
! 3404: }
! 3405: }
! 3406:
! 3407: return 0;
! 3408: }
! 3409:
! 3410: /* end table serialization code definitions */
! 3411: %endif
! 3412:
! 3413:
! 3414: m4_ifdef([[M4_YY_MAIN]], [[
! 3415: int main M4_YY_PARAMS(void);
! 3416:
! 3417: int main ()
! 3418: {
! 3419:
! 3420: %if-reentrant
! 3421: yyscan_t lexer;
! 3422: yylex_init(&lexer);
! 3423: yylex( lexer );
! 3424: yylex_destroy( lexer);
1.1 deraadt 3425:
1.13 ! tedu 3426: %endif
! 3427: %if-not-reentrant
1.1 deraadt 3428: yylex();
1.13 ! tedu 3429: %endif
! 3430:
1.1 deraadt 3431: return 0;
1.13 ! tedu 3432: }
! 3433: ]])
! 3434:
! 3435: %ok-for-header
! 3436: m4_ifdef( [[M4_YY_IN_HEADER]],
! 3437: [[
! 3438: #undef YY_NEW_FILE
! 3439: #undef YY_FLUSH_BUFFER
! 3440: #undef yy_set_bol
! 3441: #undef yy_new_buffer
! 3442: #undef yy_set_interactive
! 3443: #undef YY_DO_BEFORE_ACTION
! 3444:
! 3445: #ifdef YY_DECL_IS_OURS
! 3446: #undef YY_DECL_IS_OURS
! 3447: #undef YY_DECL
1.1 deraadt 3448: #endif
1.13 ! tedu 3449: ]])