blob: 429026e98e24488f9cdece66a1085f83fa5778be [file] [log] [blame]
shannonwoods@chromium.orgb0757162013-05-30 00:21:27 +00001#line 16 "./Tokenizer.l"
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002//
Jamie Madill88f6e942014-02-19 10:27:53 -05003// Copyright (c) 2011-2014 The ANGLE Project Authors. All rights reserved.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00004// Use of this source code is governed by a BSD-style license that can be
5// found in the LICENSE file.
6//
7
8// This file is auto-generated by generate_parser.sh. DO NOT EDIT!
9
Jamie Madillb980c562018-11-27 11:34:27 -050010#define YY_INT_ALIGNED short int
alokp@chromium.org04d7d222012-05-16 19:24:07 +000011
12/* A lexical scanner generated by flex */
13
14#define FLEX_SCANNER
15#define YY_FLEX_MAJOR_VERSION 2
Geoff Lang93561c32016-09-20 10:22:55 -040016#define YY_FLEX_MINOR_VERSION 6
Corentin Wallez168d5e82017-02-01 12:18:56 -080017#define YY_FLEX_SUBMINOR_VERSION 4
alokp@chromium.org04d7d222012-05-16 19:24:07 +000018#if YY_FLEX_SUBMINOR_VERSION > 0
Jamie Madillb980c562018-11-27 11:34:27 -050019# define FLEX_BETA
alokp@chromium.org04d7d222012-05-16 19:24:07 +000020#endif
21
Corentin Wallez168d5e82017-02-01 12:18:56 -080022#ifdef yy_create_buffer
Jamie Madillb980c562018-11-27 11:34:27 -050023# define pp_create_buffer_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080024#else
Jamie Madillb980c562018-11-27 11:34:27 -050025# define yy_create_buffer pp_create_buffer
Corentin Wallez168d5e82017-02-01 12:18:56 -080026#endif
27
Corentin Wallez168d5e82017-02-01 12:18:56 -080028#ifdef yy_delete_buffer
Jamie Madillb980c562018-11-27 11:34:27 -050029# define pp_delete_buffer_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080030#else
Jamie Madillb980c562018-11-27 11:34:27 -050031# define yy_delete_buffer pp_delete_buffer
Corentin Wallez168d5e82017-02-01 12:18:56 -080032#endif
33
Corentin Wallez168d5e82017-02-01 12:18:56 -080034#ifdef yy_scan_buffer
Jamie Madillb980c562018-11-27 11:34:27 -050035# define pp_scan_buffer_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080036#else
Jamie Madillb980c562018-11-27 11:34:27 -050037# define yy_scan_buffer pp_scan_buffer
Corentin Wallez168d5e82017-02-01 12:18:56 -080038#endif
39
Corentin Wallez168d5e82017-02-01 12:18:56 -080040#ifdef yy_scan_string
Jamie Madillb980c562018-11-27 11:34:27 -050041# define pp_scan_string_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080042#else
Jamie Madillb980c562018-11-27 11:34:27 -050043# define yy_scan_string pp_scan_string
Corentin Wallez168d5e82017-02-01 12:18:56 -080044#endif
45
Corentin Wallez168d5e82017-02-01 12:18:56 -080046#ifdef yy_scan_bytes
Jamie Madillb980c562018-11-27 11:34:27 -050047# define pp_scan_bytes_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080048#else
Jamie Madillb980c562018-11-27 11:34:27 -050049# define yy_scan_bytes pp_scan_bytes
Corentin Wallez168d5e82017-02-01 12:18:56 -080050#endif
51
Corentin Wallez168d5e82017-02-01 12:18:56 -080052#ifdef yy_init_buffer
Jamie Madillb980c562018-11-27 11:34:27 -050053# define pp_init_buffer_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080054#else
Jamie Madillb980c562018-11-27 11:34:27 -050055# define yy_init_buffer pp_init_buffer
Corentin Wallez168d5e82017-02-01 12:18:56 -080056#endif
57
Corentin Wallez168d5e82017-02-01 12:18:56 -080058#ifdef yy_flush_buffer
Jamie Madillb980c562018-11-27 11:34:27 -050059# define pp_flush_buffer_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080060#else
Jamie Madillb980c562018-11-27 11:34:27 -050061# define yy_flush_buffer pp_flush_buffer
Corentin Wallez168d5e82017-02-01 12:18:56 -080062#endif
63
Corentin Wallez168d5e82017-02-01 12:18:56 -080064#ifdef yy_load_buffer_state
Jamie Madillb980c562018-11-27 11:34:27 -050065# define pp_load_buffer_state_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080066#else
Jamie Madillb980c562018-11-27 11:34:27 -050067# define yy_load_buffer_state pp_load_buffer_state
Corentin Wallez168d5e82017-02-01 12:18:56 -080068#endif
69
Corentin Wallez168d5e82017-02-01 12:18:56 -080070#ifdef yy_switch_to_buffer
Jamie Madillb980c562018-11-27 11:34:27 -050071# define pp_switch_to_buffer_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080072#else
Jamie Madillb980c562018-11-27 11:34:27 -050073# define yy_switch_to_buffer pp_switch_to_buffer
Corentin Wallez168d5e82017-02-01 12:18:56 -080074#endif
75
Corentin Wallez168d5e82017-02-01 12:18:56 -080076#ifdef yypush_buffer_state
Jamie Madillb980c562018-11-27 11:34:27 -050077# define pppush_buffer_state_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080078#else
Jamie Madillb980c562018-11-27 11:34:27 -050079# define yypush_buffer_state pppush_buffer_state
Corentin Wallez168d5e82017-02-01 12:18:56 -080080#endif
81
Corentin Wallez168d5e82017-02-01 12:18:56 -080082#ifdef yypop_buffer_state
Jamie Madillb980c562018-11-27 11:34:27 -050083# define pppop_buffer_state_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080084#else
Jamie Madillb980c562018-11-27 11:34:27 -050085# define yypop_buffer_state pppop_buffer_state
Corentin Wallez168d5e82017-02-01 12:18:56 -080086#endif
87
Corentin Wallez168d5e82017-02-01 12:18:56 -080088#ifdef yyensure_buffer_stack
Jamie Madillb980c562018-11-27 11:34:27 -050089# define ppensure_buffer_stack_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080090#else
Jamie Madillb980c562018-11-27 11:34:27 -050091# define yyensure_buffer_stack ppensure_buffer_stack
Corentin Wallez168d5e82017-02-01 12:18:56 -080092#endif
93
Corentin Wallez168d5e82017-02-01 12:18:56 -080094#ifdef yylex
Jamie Madillb980c562018-11-27 11:34:27 -050095# define pplex_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -080096#else
Jamie Madillb980c562018-11-27 11:34:27 -050097# define yylex pplex
Corentin Wallez168d5e82017-02-01 12:18:56 -080098#endif
99
Corentin Wallez168d5e82017-02-01 12:18:56 -0800100#ifdef yyrestart
Jamie Madillb980c562018-11-27 11:34:27 -0500101# define pprestart_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800102#else
Jamie Madillb980c562018-11-27 11:34:27 -0500103# define yyrestart pprestart
Corentin Wallez168d5e82017-02-01 12:18:56 -0800104#endif
105
Corentin Wallez168d5e82017-02-01 12:18:56 -0800106#ifdef yylex_init
Jamie Madillb980c562018-11-27 11:34:27 -0500107# define pplex_init_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800108#else
Jamie Madillb980c562018-11-27 11:34:27 -0500109# define yylex_init pplex_init
Corentin Wallez168d5e82017-02-01 12:18:56 -0800110#endif
111
Corentin Wallez168d5e82017-02-01 12:18:56 -0800112#ifdef yylex_init_extra
Jamie Madillb980c562018-11-27 11:34:27 -0500113# define pplex_init_extra_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800114#else
Jamie Madillb980c562018-11-27 11:34:27 -0500115# define yylex_init_extra pplex_init_extra
Corentin Wallez168d5e82017-02-01 12:18:56 -0800116#endif
117
Corentin Wallez168d5e82017-02-01 12:18:56 -0800118#ifdef yylex_destroy
Jamie Madillb980c562018-11-27 11:34:27 -0500119# define pplex_destroy_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800120#else
Jamie Madillb980c562018-11-27 11:34:27 -0500121# define yylex_destroy pplex_destroy
Corentin Wallez168d5e82017-02-01 12:18:56 -0800122#endif
123
Corentin Wallez168d5e82017-02-01 12:18:56 -0800124#ifdef yyget_debug
Jamie Madillb980c562018-11-27 11:34:27 -0500125# define ppget_debug_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800126#else
Jamie Madillb980c562018-11-27 11:34:27 -0500127# define yyget_debug ppget_debug
Corentin Wallez168d5e82017-02-01 12:18:56 -0800128#endif
129
Corentin Wallez168d5e82017-02-01 12:18:56 -0800130#ifdef yyset_debug
Jamie Madillb980c562018-11-27 11:34:27 -0500131# define ppset_debug_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800132#else
Jamie Madillb980c562018-11-27 11:34:27 -0500133# define yyset_debug ppset_debug
Corentin Wallez168d5e82017-02-01 12:18:56 -0800134#endif
135
Corentin Wallez168d5e82017-02-01 12:18:56 -0800136#ifdef yyget_extra
Jamie Madillb980c562018-11-27 11:34:27 -0500137# define ppget_extra_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800138#else
Jamie Madillb980c562018-11-27 11:34:27 -0500139# define yyget_extra ppget_extra
Corentin Wallez168d5e82017-02-01 12:18:56 -0800140#endif
141
Corentin Wallez168d5e82017-02-01 12:18:56 -0800142#ifdef yyset_extra
Jamie Madillb980c562018-11-27 11:34:27 -0500143# define ppset_extra_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800144#else
Jamie Madillb980c562018-11-27 11:34:27 -0500145# define yyset_extra ppset_extra
Corentin Wallez168d5e82017-02-01 12:18:56 -0800146#endif
147
Corentin Wallez168d5e82017-02-01 12:18:56 -0800148#ifdef yyget_in
Jamie Madillb980c562018-11-27 11:34:27 -0500149# define ppget_in_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800150#else
Jamie Madillb980c562018-11-27 11:34:27 -0500151# define yyget_in ppget_in
Corentin Wallez168d5e82017-02-01 12:18:56 -0800152#endif
153
Corentin Wallez168d5e82017-02-01 12:18:56 -0800154#ifdef yyset_in
Jamie Madillb980c562018-11-27 11:34:27 -0500155# define ppset_in_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800156#else
Jamie Madillb980c562018-11-27 11:34:27 -0500157# define yyset_in ppset_in
Corentin Wallez168d5e82017-02-01 12:18:56 -0800158#endif
159
Corentin Wallez168d5e82017-02-01 12:18:56 -0800160#ifdef yyget_out
Jamie Madillb980c562018-11-27 11:34:27 -0500161# define ppget_out_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800162#else
Jamie Madillb980c562018-11-27 11:34:27 -0500163# define yyget_out ppget_out
Corentin Wallez168d5e82017-02-01 12:18:56 -0800164#endif
165
Corentin Wallez168d5e82017-02-01 12:18:56 -0800166#ifdef yyset_out
Jamie Madillb980c562018-11-27 11:34:27 -0500167# define ppset_out_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800168#else
Jamie Madillb980c562018-11-27 11:34:27 -0500169# define yyset_out ppset_out
Corentin Wallez168d5e82017-02-01 12:18:56 -0800170#endif
171
Corentin Wallez168d5e82017-02-01 12:18:56 -0800172#ifdef yyget_leng
Jamie Madillb980c562018-11-27 11:34:27 -0500173# define ppget_leng_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800174#else
Jamie Madillb980c562018-11-27 11:34:27 -0500175# define yyget_leng ppget_leng
Corentin Wallez168d5e82017-02-01 12:18:56 -0800176#endif
177
Corentin Wallez168d5e82017-02-01 12:18:56 -0800178#ifdef yyget_text
Jamie Madillb980c562018-11-27 11:34:27 -0500179# define ppget_text_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800180#else
Jamie Madillb980c562018-11-27 11:34:27 -0500181# define yyget_text ppget_text
Corentin Wallez168d5e82017-02-01 12:18:56 -0800182#endif
183
Corentin Wallez168d5e82017-02-01 12:18:56 -0800184#ifdef yyget_lineno
Jamie Madillb980c562018-11-27 11:34:27 -0500185# define ppget_lineno_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800186#else
Jamie Madillb980c562018-11-27 11:34:27 -0500187# define yyget_lineno ppget_lineno
Corentin Wallez168d5e82017-02-01 12:18:56 -0800188#endif
189
Corentin Wallez168d5e82017-02-01 12:18:56 -0800190#ifdef yyset_lineno
Jamie Madillb980c562018-11-27 11:34:27 -0500191# define ppset_lineno_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800192#else
Jamie Madillb980c562018-11-27 11:34:27 -0500193# define yyset_lineno ppset_lineno
Corentin Wallez168d5e82017-02-01 12:18:56 -0800194#endif
195
Corentin Wallez168d5e82017-02-01 12:18:56 -0800196#ifdef yyget_column
Jamie Madillb980c562018-11-27 11:34:27 -0500197# define ppget_column_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800198#else
Jamie Madillb980c562018-11-27 11:34:27 -0500199# define yyget_column ppget_column
Corentin Wallez168d5e82017-02-01 12:18:56 -0800200#endif
201
Corentin Wallez168d5e82017-02-01 12:18:56 -0800202#ifdef yyset_column
Jamie Madillb980c562018-11-27 11:34:27 -0500203# define ppset_column_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800204#else
Jamie Madillb980c562018-11-27 11:34:27 -0500205# define yyset_column ppset_column
Corentin Wallez168d5e82017-02-01 12:18:56 -0800206#endif
Geoff Lang93561c32016-09-20 10:22:55 -0400207
Corentin Wallez168d5e82017-02-01 12:18:56 -0800208#ifdef yywrap
Jamie Madillb980c562018-11-27 11:34:27 -0500209# define ppwrap_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800210#else
Jamie Madillb980c562018-11-27 11:34:27 -0500211# define yywrap ppwrap
Corentin Wallez168d5e82017-02-01 12:18:56 -0800212#endif
213
Corentin Wallez168d5e82017-02-01 12:18:56 -0800214#ifdef yyget_lval
Jamie Madillb980c562018-11-27 11:34:27 -0500215# define ppget_lval_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800216#else
Jamie Madillb980c562018-11-27 11:34:27 -0500217# define yyget_lval ppget_lval
Corentin Wallez168d5e82017-02-01 12:18:56 -0800218#endif
219
Corentin Wallez168d5e82017-02-01 12:18:56 -0800220#ifdef yyset_lval
Jamie Madillb980c562018-11-27 11:34:27 -0500221# define ppset_lval_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800222#else
Jamie Madillb980c562018-11-27 11:34:27 -0500223# define yyset_lval ppset_lval
Corentin Wallez168d5e82017-02-01 12:18:56 -0800224#endif
225
Corentin Wallez168d5e82017-02-01 12:18:56 -0800226#ifdef yyget_lloc
Jamie Madillb980c562018-11-27 11:34:27 -0500227# define ppget_lloc_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800228#else
Jamie Madillb980c562018-11-27 11:34:27 -0500229# define yyget_lloc ppget_lloc
Corentin Wallez168d5e82017-02-01 12:18:56 -0800230#endif
231
Corentin Wallez168d5e82017-02-01 12:18:56 -0800232#ifdef yyset_lloc
Jamie Madillb980c562018-11-27 11:34:27 -0500233# define ppset_lloc_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800234#else
Jamie Madillb980c562018-11-27 11:34:27 -0500235# define yyset_lloc ppset_lloc
Corentin Wallez168d5e82017-02-01 12:18:56 -0800236#endif
237
Corentin Wallez168d5e82017-02-01 12:18:56 -0800238#ifdef yyalloc
Jamie Madillb980c562018-11-27 11:34:27 -0500239# define ppalloc_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800240#else
Jamie Madillb980c562018-11-27 11:34:27 -0500241# define yyalloc ppalloc
Corentin Wallez168d5e82017-02-01 12:18:56 -0800242#endif
243
Corentin Wallez168d5e82017-02-01 12:18:56 -0800244#ifdef yyrealloc
Jamie Madillb980c562018-11-27 11:34:27 -0500245# define pprealloc_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800246#else
Jamie Madillb980c562018-11-27 11:34:27 -0500247# define yyrealloc pprealloc
Corentin Wallez168d5e82017-02-01 12:18:56 -0800248#endif
249
Corentin Wallez168d5e82017-02-01 12:18:56 -0800250#ifdef yyfree
Jamie Madillb980c562018-11-27 11:34:27 -0500251# define ppfree_ALREADY_DEFINED
Corentin Wallez168d5e82017-02-01 12:18:56 -0800252#else
Jamie Madillb980c562018-11-27 11:34:27 -0500253# define yyfree ppfree
Corentin Wallez168d5e82017-02-01 12:18:56 -0800254#endif
255
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000256/* First, we deal with platform-specific or compiler-specific issues. */
257
258/* begin standard C headers. */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000259#include <errno.h>
Jamie Madillb980c562018-11-27 11:34:27 -0500260#include <stdio.h>
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000261#include <stdlib.h>
Jamie Madillb980c562018-11-27 11:34:27 -0500262#include <string.h>
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000263
264/* end standard C headers. */
265
266/* flex integer type definitions */
267
268#ifndef FLEXINT_H
Jamie Madillb980c562018-11-27 11:34:27 -0500269# define FLEXINT_H
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000270
271/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
272
Jamie Madillb980c562018-11-27 11:34:27 -0500273# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000274
275/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
Jamie Madillb980c562018-11-27 11:34:27 -0500276 * if you want the limit (max/min) macros for int types.
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000277 */
Jamie Madillb980c562018-11-27 11:34:27 -0500278# ifndef __STDC_LIMIT_MACROS
279# define __STDC_LIMIT_MACROS 1
280# endif
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000281
Jamie Madillb980c562018-11-27 11:34:27 -0500282# include <inttypes.h>
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000283typedef int8_t flex_int8_t;
284typedef uint8_t flex_uint8_t;
285typedef int16_t flex_int16_t;
286typedef uint16_t flex_uint16_t;
287typedef int32_t flex_int32_t;
288typedef uint32_t flex_uint32_t;
Jamie Madillb980c562018-11-27 11:34:27 -0500289# else
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000290typedef signed char flex_int8_t;
291typedef short int flex_int16_t;
292typedef int flex_int32_t;
Jamie Madillb980c562018-11-27 11:34:27 -0500293typedef unsigned char flex_uint8_t;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000294typedef unsigned short int flex_uint16_t;
295typedef unsigned int flex_uint32_t;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000296
297/* Limits of integral types. */
Jamie Madillb980c562018-11-27 11:34:27 -0500298# ifndef INT8_MIN
299# define INT8_MIN (-128)
300# endif
301# ifndef INT16_MIN
302# define INT16_MIN (-32767 - 1)
303# endif
304# ifndef INT32_MIN
305# define INT32_MIN (-2147483647 - 1)
306# endif
307# ifndef INT8_MAX
308# define INT8_MAX (127)
309# endif
310# ifndef INT16_MAX
311# define INT16_MAX (32767)
312# endif
313# ifndef INT32_MAX
314# define INT32_MAX (2147483647)
315# endif
316# ifndef UINT8_MAX
317# define UINT8_MAX (255U)
318# endif
319# ifndef UINT16_MAX
320# define UINT16_MAX (65535U)
321# endif
322# ifndef UINT32_MAX
323# define UINT32_MAX (4294967295U)
324# endif
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000325
Jamie Madillb980c562018-11-27 11:34:27 -0500326# ifndef SIZE_MAX
327# define SIZE_MAX (~(size_t)0)
328# endif
Corentin Wallez168d5e82017-02-01 12:18:56 -0800329
Jamie Madillb980c562018-11-27 11:34:27 -0500330# endif /* ! C99 */
Zhenyao Mof1d723c2013-09-23 14:57:07 -0400331
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000332#endif /* ! FLEXINT_H */
333
Corentin Wallez168d5e82017-02-01 12:18:56 -0800334/* begin standard C++ headers. */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000335
Geoff Lang93561c32016-09-20 10:22:55 -0400336/* TODO: this is always defined, so inline it */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000337#define yyconst const
Geoff Lang93561c32016-09-20 10:22:55 -0400338
339#if defined(__GNUC__) && __GNUC__ >= 3
Jamie Madillb980c562018-11-27 11:34:27 -0500340# define yynoreturn __attribute__((__noreturn__))
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000341#else
Jamie Madillb980c562018-11-27 11:34:27 -0500342# define yynoreturn
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000343#endif
344
345/* Returned upon end-of-file. */
346#define YY_NULL 0
347
Corentin Wallez168d5e82017-02-01 12:18:56 -0800348/* Promotes a possibly negative, possibly signed char to an
349 * integer in range [0..255] for use as an array index.
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000350 */
Jamie Madillb980c562018-11-27 11:34:27 -0500351#define YY_SC_TO_UI(c) ((YY_CHAR)(c))
Geoff Lang93561c32016-09-20 10:22:55 -0400352
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000353/* An opaque pointer. */
354#ifndef YY_TYPEDEF_YY_SCANNER_T
Jamie Madillb980c562018-11-27 11:34:27 -0500355# define YY_TYPEDEF_YY_SCANNER_T
356typedef void *yyscan_t;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000357#endif
358
359/* For convenience, these vars (plus the bison vars far below)
360 are macros in the reentrant scanner. */
361#define yyin yyg->yyin_r
362#define yyout yyg->yyout_r
363#define yyextra yyg->yyextra_r
364#define yyleng yyg->yyleng_r
365#define yytext yyg->yytext_r
366#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
367#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
368#define yy_flex_debug yyg->yy_flex_debug_r
369
370/* Enter a start condition. This macro really ought to take a parameter,
371 * but we do it the disgusting crufty way forced on us by the ()-less
372 * definition of BEGIN.
373 */
374#define BEGIN yyg->yy_start = 1 + 2 *
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000375/* Translate the current start state into a value that can be later handed
376 * to BEGIN to return to the state. The YYSTATE alias is for lex
377 * compatibility.
378 */
379#define YY_START ((yyg->yy_start - 1) / 2)
380#define YYSTATE YY_START
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000381/* Action number for EOF rule of a given start state. */
382#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000383/* Special action meaning "start processing a new file". */
Jamie Madillb980c562018-11-27 11:34:27 -0500384#define YY_NEW_FILE yyrestart(yyin, yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000385#define YY_END_OF_BUFFER_CHAR 0
386
387/* Size of default input buffer. */
388#ifndef YY_BUF_SIZE
Jamie Madillb980c562018-11-27 11:34:27 -0500389# ifdef __ia64__
Geoff Lang93561c32016-09-20 10:22:55 -0400390/* On IA-64, the buffer size is 16k, not 8k.
391 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
392 * Ditto for the __ia64__ case accordingly.
393 */
Jamie Madillb980c562018-11-27 11:34:27 -0500394# define YY_BUF_SIZE 32768
395# else
396# define YY_BUF_SIZE 16384
397# endif /* __ia64__ */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000398#endif
399
400/* The state buf must be large enough to hold one state per character in the main buffer.
401 */
Jamie Madillb980c562018-11-27 11:34:27 -0500402#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
Geoff Lang93561c32016-09-20 10:22:55 -0400403
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000404#ifndef YY_TYPEDEF_YY_BUFFER_STATE
Jamie Madillb980c562018-11-27 11:34:27 -0500405# define YY_TYPEDEF_YY_BUFFER_STATE
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000406typedef struct yy_buffer_state *YY_BUFFER_STATE;
407#endif
408
shannonwoods@chromium.orgb0757162013-05-30 00:21:27 +0000409#ifndef YY_TYPEDEF_YY_SIZE_T
Jamie Madillb980c562018-11-27 11:34:27 -0500410# define YY_TYPEDEF_YY_SIZE_T
shannonwoods@chromium.orgb0757162013-05-30 00:21:27 +0000411typedef size_t yy_size_t;
412#endif
413
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000414#define EOB_ACT_CONTINUE_SCAN 0
415#define EOB_ACT_END_OF_FILE 1
416#define EOB_ACT_LAST_MATCH 2
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000417
Jamie Madillb980c562018-11-27 11:34:27 -0500418#define YY_LESS_LINENO(n)
419#define YY_LINENO_REWIND_TO(ptr)
420
421/* Return all but the first "n" matched characters back to the input stream. */
422#define yyless(n) \
423 do \
424 { \
425 /* Undo effects of setting up yytext. */ \
426 int yyless_macro_arg = (n); \
427 YY_LESS_LINENO(yyless_macro_arg); \
428 *yy_cp = yyg->yy_hold_char; \
429 YY_RESTORE_YY_MORE_OFFSET \
430 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
431 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
432 } while (0)
433#define unput(c) yyunput(c, yyg->yytext_ptr, yyscanner)
Geoff Lang93561c32016-09-20 10:22:55 -0400434
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000435#ifndef YY_STRUCT_YY_BUFFER_STATE
Jamie Madillb980c562018-11-27 11:34:27 -0500436# define YY_STRUCT_YY_BUFFER_STATE
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000437struct yy_buffer_state
Jamie Madillb980c562018-11-27 11:34:27 -0500438{
439 FILE *yy_input_file;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000440
Jamie Madillb980c562018-11-27 11:34:27 -0500441 char *yy_ch_buf; /* input buffer */
442 char *yy_buf_pos; /* current position in input buffer */
Geoff Lang93561c32016-09-20 10:22:55 -0400443
Jamie Madillb980c562018-11-27 11:34:27 -0500444 /* Size of input buffer in bytes, not including room for EOB
445 * characters.
446 */
447 int yy_buf_size;
Geoff Lang93561c32016-09-20 10:22:55 -0400448
Jamie Madillb980c562018-11-27 11:34:27 -0500449 /* Number of characters read into yy_ch_buf, not including EOB
450 * characters.
451 */
452 int yy_n_chars;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000453
Jamie Madillb980c562018-11-27 11:34:27 -0500454 /* Whether we "own" the buffer - i.e., we know we created it,
455 * and can realloc() it to grow it, and should free() it to
456 * delete it.
457 */
458 int yy_is_our_buffer;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000459
Jamie Madillb980c562018-11-27 11:34:27 -0500460 /* Whether this is an "interactive" input source; if so, and
461 * if we're using stdio for input, then we want to use getc()
462 * instead of fread(), to make sure we stop fetching input after
463 * each newline.
464 */
465 int yy_is_interactive;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000466
Jamie Madillb980c562018-11-27 11:34:27 -0500467 /* Whether we're considered to be at the beginning of a line.
468 * If so, '^' rules will be active on the next match, otherwise
469 * not.
470 */
471 int yy_at_bol;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000472
473 int yy_bs_lineno; /**< The line count. */
474 int yy_bs_column; /**< The column count. */
Corentin Wallez168d5e82017-02-01 12:18:56 -0800475
Jamie Madillb980c562018-11-27 11:34:27 -0500476 /* Whether to try to fill the input buffer when we reach the
477 * end of it.
478 */
479 int yy_fill_buffer;
Geoff Lang93561c32016-09-20 10:22:55 -0400480
Jamie Madillb980c562018-11-27 11:34:27 -0500481 int yy_buffer_status;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000482
Jamie Madillb980c562018-11-27 11:34:27 -0500483# define YY_BUFFER_NEW 0
484# define YY_BUFFER_NORMAL 1
485 /* When an EOF's been seen but there's still some text to process
486 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
487 * shouldn't try reading from the input source any more. We might
488 * still have a bunch of tokens to match, though, because of
489 * possible backing-up.
490 *
491 * When we actually see the EOF, we change the status to "new"
492 * (via yyrestart()), so that the user can continue scanning by
493 * just pointing yyin at a new input file.
494 */
495# define YY_BUFFER_EOF_PENDING 2
496};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000497#endif /* !YY_STRUCT_YY_BUFFER_STATE */
498
499/* We provide macros for accessing buffer states in case in the
500 * future we want to put the buffer states in a more general
501 * "scanner state".
502 *
503 * Returns the top of the stack, or NULL.
504 */
Jamie Madillb980c562018-11-27 11:34:27 -0500505#define YY_CURRENT_BUFFER \
506 (yyg->yy_buffer_stack ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] : NULL)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000507/* Same as previous macro, but useful when we know that the buffer stack is not
508 * NULL or when we need an lvalue. For internal use only.
509 */
510#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
511
Jamie Madillb980c562018-11-27 11:34:27 -0500512void yyrestart(FILE *input_file, yyscan_t yyscanner);
513void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner);
514YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner);
515void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner);
516void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner);
517void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner);
518void yypop_buffer_state(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400519
Jamie Madillb980c562018-11-27 11:34:27 -0500520static void yyensure_buffer_stack(yyscan_t yyscanner);
521static void yy_load_buffer_state(yyscan_t yyscanner);
522static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner);
523#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER, yyscanner)
Geoff Lang93561c32016-09-20 10:22:55 -0400524
Jamie Madillb980c562018-11-27 11:34:27 -0500525YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner);
526YY_BUFFER_STATE yy_scan_string(const char *yy_str, yyscan_t yyscanner);
527YY_BUFFER_STATE yy_scan_bytes(const char *bytes, int len, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400528
Jamie Madillb980c562018-11-27 11:34:27 -0500529void *yyalloc(yy_size_t, yyscan_t yyscanner);
530void *yyrealloc(void *, yy_size_t, yyscan_t yyscanner);
531void yyfree(void *, yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000532
Corentin Wallez168d5e82017-02-01 12:18:56 -0800533#define yy_new_buffer yy_create_buffer
Jamie Madillb980c562018-11-27 11:34:27 -0500534#define yy_set_interactive(is_interactive) \
535 { \
536 if (!YY_CURRENT_BUFFER) \
537 { \
538 yyensure_buffer_stack(yyscanner); \
539 YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \
540 } \
541 YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
542 }
543#define yy_set_bol(at_bol) \
544 { \
545 if (!YY_CURRENT_BUFFER) \
546 { \
547 yyensure_buffer_stack(yyscanner); \
548 YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner); \
549 } \
550 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
551 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000552#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
553
554/* Begin user sect3 */
555
Jamie Madillb980c562018-11-27 11:34:27 -0500556#define ppwrap(yyscanner) (/*CONSTCOND*/ 1)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000557#define YY_SKIP_YYWRAP
Corentin Wallez168d5e82017-02-01 12:18:56 -0800558typedef flex_uint8_t YY_CHAR;
Geoff Lang93561c32016-09-20 10:22:55 -0400559
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000560typedef int yy_state_type;
561
562#define yytext_ptr yytext_r
563
Jamie Madillb980c562018-11-27 11:34:27 -0500564static yy_state_type yy_get_previous_state(yyscan_t yyscanner);
565static yy_state_type yy_try_NUL_trans(yy_state_type current_state, yyscan_t yyscanner);
566static int yy_get_next_buffer(yyscan_t yyscanner);
567static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000568
569/* Done after the current pattern has been matched and before the
570 * corresponding action - sets up yytext.
571 */
Jamie Madillb980c562018-11-27 11:34:27 -0500572#define YY_DO_BEFORE_ACTION \
573 yyg->yytext_ptr = yy_bp; \
574 yyleng = (int)(yy_cp - yy_bp); \
575 yyg->yy_hold_char = *yy_cp; \
576 *yy_cp = '\0'; \
577 yyg->yy_c_buf_p = yy_cp;
Corentin Wallezdc0fa462017-02-01 14:44:43 -0500578#define YY_NUM_RULES 37
579#define YY_END_OF_BUFFER 38
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000580/* This struct is not used in this scanner,
581 but its presence is necessary. */
582struct yy_trans_info
Jamie Madillb980c562018-11-27 11:34:27 -0500583{
584 flex_int32_t yy_verify;
585 flex_int32_t yy_nxt;
586};
587static const flex_int16_t yy_accept[95] = {
588 0, 0, 0, 0, 0, 38, 36, 34, 35, 35, 33, 7, 33, 33, 33, 33, 33, 33, 33, 33, 9, 9, 33, 33,
589 33, 8, 33, 33, 3, 5, 5, 4, 34, 35, 19, 27, 20, 30, 25, 12, 23, 13, 24, 10, 2, 1, 26, 10,
590 9, 11, 11, 11, 9, 11, 9, 9, 14, 16, 18, 17, 15, 8, 31, 21, 32, 22, 3, 5, 6, 11, 10, 11,
591 10, 1, 10, 11, 10, 0, 10, 9, 9, 9, 28, 29, 0, 10, 10, 10, 10, 9, 10, 10, 9, 10, 0
shannonwoods@chromium.org3f83e292013-05-30 00:21:34 +0000592
Jamie Madillb980c562018-11-27 11:34:27 -0500593};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000594
Jamie Madillb980c562018-11-27 11:34:27 -0500595static const YY_CHAR yy_ec[256] = {
596 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1,
597 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 1, 6, 1, 7, 8, 1, 9, 9,
598 10, 11, 9, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 17, 17, 9, 9, 18, 19, 20,
599 9, 1, 21, 21, 21, 21, 22, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
600 24, 25, 24, 24, 26, 24, 24, 9, 1, 9, 27, 24, 1, 21, 21, 21, 21,
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000601
Jamie Madillb980c562018-11-27 11:34:27 -0500602 22, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 24, 24, 26, 24,
603 24, 9, 28, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
604 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
605 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
606 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000607
Jamie Madillb980c562018-11-27 11:34:27 -0500608 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
610 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000611
Jamie Madillb980c562018-11-27 11:34:27 -0500612static const YY_CHAR yy_meta[29] = {0, 1, 1, 2, 2, 1, 1, 1, 1, 1, 3, 1, 1, 4, 1,
613 5, 5, 5, 1, 1, 1, 5, 5, 5, 5, 5, 5, 1, 1};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000614
Jamie Madillb980c562018-11-27 11:34:27 -0500615static const flex_int16_t yy_base[100] = {
616 0, 0, 0, 26, 28, 133, 195, 130, 195, 128, 105, 195, 104, 25, 195, 100, 23,
617 27, 32, 31, 38, 50, 38, 93, 49, 0, 16, 51, 0, 195, 105, 87, 93, 195,
618 195, 195, 195, 195, 195, 195, 195, 195, 195, 67, 195, 0, 195, 81, 55, 84, 98,
619 110, 53, 61, 0, 52, 39, 195, 195, 195, 33, 0, 195, 195, 195, 195, 0, 195,
620 195, 113, 0, 126, 0, 0, 0, 133, 0, 56, 128, 0, 133, 0, 195, 195, 101,
621 141, 143, 145, 0, 15, 154, 195, 0, 195, 195, 177, 32, 182, 187, 189
shannon.woods%transgaming.com@gtempaccount.combcde56f2013-04-13 03:32:12 +0000622
Jamie Madillb980c562018-11-27 11:34:27 -0500623};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000624
Jamie Madillb980c562018-11-27 11:34:27 -0500625static const flex_int16_t yy_def[100] = {
626 0, 94, 1, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
627 20, 94, 94, 94, 96, 94, 94, 97, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,
628 94, 94, 94, 98, 94, 94, 20, 20, 49, 50, 50, 99, 21, 50, 94, 94, 94, 94, 94, 96, 94,
629 94, 94, 94, 97, 94, 94, 43, 43, 69, 69, 98, 47, 50, 50, 94, 51, 50, 99, 50, 94, 94,
630 94, 71, 75, 94, 50, 50, 94, 94, 50, 94, 0, 94, 94, 94, 94, 94
shannon.woods%transgaming.com@gtempaccount.combcde56f2013-04-13 03:32:12 +0000631
Jamie Madillb980c562018-11-27 11:34:27 -0500632};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000633
Jamie Madillb980c562018-11-27 11:34:27 -0500634static const flex_int16_t yy_nxt[224] = {
635 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24, 25, 25,
636 25, 25, 25, 25, 26, 27, 29, 30, 29, 30, 36, 39, 62, 31, 61, 31, 41, 92, 44, 40, 63, 37, 45,
637 42, 43, 43, 43, 46, 47, 83, 48, 48, 49, 56, 57, 82, 50, 51, 50, 50, 52, 53, 54, 54, 54, 59,
638 60, 64, 87, 87, 87, 50, 55, 50, 81, 79, 65, 69, 50, 70, 70, 70, 50, 50, 50, 69, 71, 72, 69,
639 69, 69, 50, 32, 74, 74, 74, 49, 49,
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000640
Jamie Madillb980c562018-11-27 11:34:27 -0500641 68, 50, 75, 76, 50, 50, 50, 67, 50, 50, 50, 58, 50, 50, 50, 90, 90, 90, 38, 50, 77, 77, 35,
642 34, 78, 78, 78, 69, 69, 69, 33, 32, 94, 94, 69, 69, 84, 84, 94, 94, 85, 85, 85, 84, 84, 50,
643 94, 86, 86, 86, 88, 94, 94, 94, 94, 94, 50, 89, 50, 87, 87, 87, 94, 72, 94, 76, 94, 91, 90,
644 90, 90, 94, 94, 94, 94, 94, 93, 28, 28, 28, 28, 28, 66, 94, 94, 66, 66, 73, 94, 73, 73, 73,
645 80, 80, 5, 94, 94, 94, 94, 94,
shannonwoods@chromium.orgc8100b82013-05-30 00:20:34 +0000646
Jamie Madillb980c562018-11-27 11:34:27 -0500647 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000648
Jamie Madillb980c562018-11-27 11:34:27 -0500649static const flex_int16_t yy_chk[224] = {
650 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
651 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 13, 16, 26, 3, 96, 4, 17, 89, 19, 16, 26, 13, 19,
652 17, 18, 18, 18, 19, 20, 60, 20, 20, 20, 22, 22, 56, 20, 20, 20, 20, 20, 20, 21, 21, 21, 24,
653 24, 27, 77, 77, 77, 53, 21, 21, 55, 52, 27, 43, 48, 43, 43, 43, 53, 53, 53, 43, 43, 43, 43,
654 43, 43, 47, 32, 47, 47, 47, 49, 49,
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000655
Jamie Madillb980c562018-11-27 11:34:27 -0500656 31, 47, 47, 47, 47, 47, 47, 30, 49, 49, 50, 23, 50, 50, 50, 84, 84, 84, 15, 50, 51, 51, 12,
657 10, 51, 51, 51, 69, 69, 69, 9, 7, 5, 0, 69, 69, 71, 71, 78, 78, 71, 71, 71, 75, 75, 80,
658 0, 75, 75, 75, 78, 85, 85, 86, 86, 0, 80, 80, 80, 87, 87, 87, 0, 85, 0, 86, 0, 87, 90,
659 90, 90, 0, 0, 0, 0, 0, 90, 95, 95, 95, 95, 95, 97, 0, 0, 97, 97, 98, 0, 98, 98, 98,
660 99, 99, 94, 94, 94, 94, 94, 94,
shannonwoods@chromium.orgc8100b82013-05-30 00:20:34 +0000661
Jamie Madillb980c562018-11-27 11:34:27 -0500662 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94};
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000663
664/* The intent behind this definition is that it'll catch
665 * any uses of REJECT which flex missed.
666 */
667#define REJECT reject_used_but_not_detected
668#define yymore() yymore_used_but_not_detected
669#define YY_MORE_ADJ 0
670#define YY_RESTORE_YY_MORE_OFFSET
671/*
672//
Jamie Madill88f6e942014-02-19 10:27:53 -0500673// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved.
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000674// Use of this source code is governed by a BSD-style license that can be
675// found in the LICENSE file.
676//
677
678This file contains the Lex specification for GLSL ES preprocessor.
679Based on Microsoft Visual Studio 2010 Preprocessor Grammar:
680http://msdn.microsoft.com/en-us/library/2scxys89.aspx
681
682IF YOU MODIFY THIS FILE YOU ALSO NEED TO RUN generate_parser.sh.
683*/
684
Scott Grahama8975422015-05-01 11:09:12 -0700685#if defined(_MSC_VER)
Jamie Madillb980c562018-11-27 11:34:27 -0500686# pragma warning(disable : 4005)
Scott Grahama8975422015-05-01 11:09:12 -0700687#endif
688
Corentin Wallez054f7ed2016-09-20 17:15:59 -0400689#include "compiler/preprocessor/Tokenizer.h"
alokp@chromium.org2c958ee2012-05-17 20:35:42 +0000690
Corentin Wallez054f7ed2016-09-20 17:15:59 -0400691#include "compiler/preprocessor/DiagnosticsBase.h"
692#include "compiler/preprocessor/Token.h"
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000693
maxvujovic@gmail.comc6b3b3c2012-06-27 22:49:39 +0000694#if defined(__GNUC__)
695// Triggered by the auto-generated yy_fatal_error function.
Jamie Madillb980c562018-11-27 11:34:27 -0500696# pragma GCC diagnostic ignored "-Wmissing-noreturn"
Minmin Gong794e0002015-04-07 18:31:54 -0700697#elif defined(_MSC_VER)
Jamie Madillb980c562018-11-27 11:34:27 -0500698# pragma warning(disable : 4244)
maxvujovic@gmail.comc6b3b3c2012-06-27 22:49:39 +0000699#endif
Nico Weber41b072b2018-02-09 10:01:32 -0500700#if defined(__clang__)
701// Flex uses `/*FALLTHROUGH*/` instead of dedicated statements.
Jamie Madillb980c562018-11-27 11:34:27 -0500702# pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
Nico Weber41b072b2018-02-09 10:01:32 -0500703#endif
maxvujovic@gmail.comc6b3b3c2012-06-27 22:49:39 +0000704
Jamie Madill2dc8bf82015-04-30 15:56:52 -0400705// Workaround for flex using the register keyword, deprecated in C++11.
706#ifdef __cplusplus
Jamie Madillb980c562018-11-27 11:34:27 -0500707# if __cplusplus > 199711L
708# define register
709# endif
Jamie Madill2dc8bf82015-04-30 15:56:52 -0400710#endif
711
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000712typedef std::string YYSTYPE;
Geoff Lang197d5292018-04-25 14:29:00 -0400713typedef angle::pp::SourceLocation YYLTYPE;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000714
715// Use the unused yycolumn variable to track file (string) number.
716#define yyfileno yycolumn
717
718#define YY_USER_INIT \
Jamie Madillb980c562018-11-27 11:34:27 -0500719 do \
720 { \
721 yyfileno = 0; \
722 yylineno = 1; \
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000723 yyextra->leadingSpace = false; \
Jamie Madillb980c562018-11-27 11:34:27 -0500724 yyextra->lineStart = true; \
725 } while (0);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000726
U-GOOGLE\courtneygobab086a2018-03-30 16:08:42 -0600727#define YY_NO_INPUT
alokp@chromium.org19d7aa62012-05-31 17:34:05 +0000728#define YY_USER_ACTION \
729 do \
730 { \
Geoff Lang197d5292018-04-25 14:29:00 -0400731 angle::pp::Input *input = &yyextra->input; \
732 angle::pp::Input::Location *scanLoc = &yyextra->scanLoc; \
alokp@chromium.org19d7aa62012-05-31 17:34:05 +0000733 while ((scanLoc->sIndex < input->count()) && \
734 (scanLoc->cIndex >= input->length(scanLoc->sIndex))) \
735 { \
736 scanLoc->cIndex -= input->length(scanLoc->sIndex++); \
Geoff Lang197d5292018-04-25 14:29:00 -0400737 ++yyfileno; \
738 yylineno = 1; \
alokp@chromium.org19d7aa62012-05-31 17:34:05 +0000739 } \
740 yylloc->file = yyfileno; \
741 yylloc->line = yylineno; \
742 scanLoc->cIndex += yyleng; \
Geoff Lang197d5292018-04-25 14:29:00 -0400743 } while (0);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000744
Jamie Madillb980c562018-11-27 11:34:27 -0500745#define YY_INPUT(buf, result, maxSize) result = yyextra->input.read(buf, maxSize, &yylineno);
Geoff Lang93561c32016-09-20 10:22:55 -0400746
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000747#define INITIAL 0
748#define COMMENT 1
749
Geoff Lang197d5292018-04-25 14:29:00 -0400750#define YY_EXTRA_TYPE angle::pp::Tokenizer::Context *
Geoff Lang93561c32016-09-20 10:22:55 -0400751
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000752/* Holds the entire state of the reentrant scanner. */
753struct yyguts_t
Jamie Madillb980c562018-11-27 11:34:27 -0500754{
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000755
756 /* User-defined. Not touched by flex. */
757 YY_EXTRA_TYPE yyextra_r;
758
759 /* The rest are the same as the globals declared in the non-reentrant scanner. */
760 FILE *yyin_r, *yyout_r;
Jamie Madillb980c562018-11-27 11:34:27 -0500761 size_t yy_buffer_stack_top; /**< index of top of stack. */
762 size_t yy_buffer_stack_max; /**< capacity of stack. */
763 YY_BUFFER_STATE *yy_buffer_stack; /**< Stack as an array. */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000764 char yy_hold_char;
Geoff Lang93561c32016-09-20 10:22:55 -0400765 int yy_n_chars;
766 int yyleng_r;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000767 char *yy_c_buf_p;
768 int yy_init;
769 int yy_start;
770 int yy_did_buffer_switch_on_eof;
771 int yy_start_stack_ptr;
772 int yy_start_stack_depth;
773 int *yy_start_stack;
774 yy_state_type yy_last_accepting_state;
Jamie Madillb980c562018-11-27 11:34:27 -0500775 char *yy_last_accepting_cpos;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000776
777 int yylineno_r;
778 int yy_flex_debug_r;
779
780 char *yytext_r;
781 int yy_more_flag;
782 int yy_more_len;
783
Jamie Madillb980c562018-11-27 11:34:27 -0500784 YYSTYPE *yylval_r;
Geoff Lang93561c32016-09-20 10:22:55 -0400785
Jamie Madillb980c562018-11-27 11:34:27 -0500786 YYLTYPE *yylloc_r;
Geoff Lang93561c32016-09-20 10:22:55 -0400787
Jamie Madillb980c562018-11-27 11:34:27 -0500788}; /* end struct yyguts_t */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000789
Jamie Madillb980c562018-11-27 11:34:27 -0500790static int yy_init_globals(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400791
Jamie Madillb980c562018-11-27 11:34:27 -0500792/* This must go here because YYSTYPE and YYLTYPE are included
793 * from bison output in section 1.*/
794#define yylval yyg->yylval_r
Geoff Lang93561c32016-09-20 10:22:55 -0400795
Jamie Madillb980c562018-11-27 11:34:27 -0500796#define yylloc yyg->yylloc_r
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000797
Jamie Madillb980c562018-11-27 11:34:27 -0500798int yylex_init(yyscan_t *scanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400799
Jamie Madillb980c562018-11-27 11:34:27 -0500800int yylex_init_extra(YY_EXTRA_TYPE user_defined, yyscan_t *scanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400801
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000802/* Accessor methods to globals.
803 These are made visible to non-reentrant scanners for convenience. */
804
Jamie Madillb980c562018-11-27 11:34:27 -0500805int yylex_destroy(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400806
Jamie Madillb980c562018-11-27 11:34:27 -0500807int yyget_debug(yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000808
Jamie Madillb980c562018-11-27 11:34:27 -0500809void yyset_debug(int debug_flag, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400810
Jamie Madillb980c562018-11-27 11:34:27 -0500811YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400812
Jamie Madillb980c562018-11-27 11:34:27 -0500813void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000814
Jamie Madillb980c562018-11-27 11:34:27 -0500815FILE *yyget_in(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400816
Jamie Madillb980c562018-11-27 11:34:27 -0500817void yyset_in(FILE *_in_str, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400818
Jamie Madillb980c562018-11-27 11:34:27 -0500819FILE *yyget_out(yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000820
Jamie Madillb980c562018-11-27 11:34:27 -0500821void yyset_out(FILE *_out_str, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400822
Jamie Madillb980c562018-11-27 11:34:27 -0500823int yyget_leng(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400824
Jamie Madillb980c562018-11-27 11:34:27 -0500825char *yyget_text(yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000826
Jamie Madillb980c562018-11-27 11:34:27 -0500827int yyget_lineno(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400828
Jamie Madillb980c562018-11-27 11:34:27 -0500829void yyset_lineno(int _line_number, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400830
Jamie Madillb980c562018-11-27 11:34:27 -0500831int yyget_column(yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000832
Jamie Madillb980c562018-11-27 11:34:27 -0500833void yyset_column(int _column_no, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400834
Jamie Madillb980c562018-11-27 11:34:27 -0500835YYSTYPE *yyget_lval(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400836
Jamie Madillb980c562018-11-27 11:34:27 -0500837void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000838
Jamie Madillb980c562018-11-27 11:34:27 -0500839YYLTYPE *yyget_lloc(yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400840
Jamie Madillb980c562018-11-27 11:34:27 -0500841void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner);
Geoff Lang93561c32016-09-20 10:22:55 -0400842
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000843/* Macros after this point can all be overridden by user definitions in
844 * section 1.
845 */
846
847#ifndef YY_SKIP_YYWRAP
Jamie Madillb980c562018-11-27 11:34:27 -0500848# ifdef __cplusplus
849extern "C" int yywrap(yyscan_t yyscanner);
850# else
851extern int yywrap(yyscan_t yyscanner);
852# endif
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000853#endif
854
Geoff Lang93561c32016-09-20 10:22:55 -0400855#ifndef YY_NO_UNPUT
Jamie Madillb980c562018-11-27 11:34:27 -0500856
Geoff Lang93561c32016-09-20 10:22:55 -0400857#endif
858
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000859#ifndef yytext_ptr
Jamie Madillb980c562018-11-27 11:34:27 -0500860static void yy_flex_strncpy(char *, const char *, int, yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000861#endif
862
863#ifdef YY_NEED_STRLEN
Jamie Madillb980c562018-11-27 11:34:27 -0500864static int yy_flex_strlen(const char *, yyscan_t yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000865#endif
866
867#ifndef YY_NO_INPUT
Jamie Madillb980c562018-11-27 11:34:27 -0500868# ifdef __cplusplus
869static int yyinput(yyscan_t yyscanner);
870# else
871static int input(yyscan_t yyscanner);
872# endif
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000873
874#endif
875
876/* Amount of stuff to slurp up with each read. */
877#ifndef YY_READ_BUF_SIZE
Jamie Madillb980c562018-11-27 11:34:27 -0500878# ifdef __ia64__
Geoff Lang93561c32016-09-20 10:22:55 -0400879/* On IA-64, the buffer size is 16k, not 8k */
Jamie Madillb980c562018-11-27 11:34:27 -0500880# define YY_READ_BUF_SIZE 16384
881# else
882# define YY_READ_BUF_SIZE 8192
883# endif /* __ia64__ */
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000884#endif
885
886/* Copy whatever the last rule matched to the standard output. */
887#ifndef ECHO
888/* This used to be an fputs(), but since the string might contain NUL's,
889 * we now use fwrite().
890 */
Jamie Madillb980c562018-11-27 11:34:27 -0500891# define ECHO \
892 do \
893 { \
894 if (fwrite(yytext, (size_t)yyleng, 1, yyout)) \
895 { \
896 } \
897 } while (0)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000898#endif
899
900/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
901 * is returned in "result".
902 */
903#ifndef YY_INPUT
Jamie Madillb980c562018-11-27 11:34:27 -0500904# define YY_INPUT(buf, result, max_size) \
905 if (YY_CURRENT_BUFFER_LVALUE->yy_is_interactive) \
906 { \
907 int c = '*'; \
908 int n; \
909 for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n) \
910 buf[n] = (char)c; \
911 if (c == '\n') \
912 buf[n++] = (char)c; \
913 if (c == EOF && ferror(yyin)) \
914 YY_FATAL_ERROR("input in flex scanner failed"); \
915 result = n; \
916 } \
917 else \
918 { \
919 errno = 0; \
920 while ((result = (int)fread(buf, 1, (yy_size_t)max_size, yyin)) == 0 && ferror(yyin)) \
921 { \
922 if (errno != EINTR) \
923 { \
924 YY_FATAL_ERROR("input in flex scanner failed"); \
925 break; \
926 } \
927 errno = 0; \
928 clearerr(yyin); \
929 } \
930 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000931
932#endif
933
934/* No semi-colon after return; correct usage is to write "yyterminate();" -
935 * we don't want an extra ';' after the "return" because that will cause
936 * some compilers to complain about unreachable statements.
937 */
938#ifndef yyterminate
Jamie Madillb980c562018-11-27 11:34:27 -0500939# define yyterminate() return YY_NULL
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000940#endif
941
942/* Number of entries by which start-condition stack grows. */
943#ifndef YY_START_STACK_INCR
Jamie Madillb980c562018-11-27 11:34:27 -0500944# define YY_START_STACK_INCR 25
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000945#endif
946
947/* Report a fatal error. */
948#ifndef YY_FATAL_ERROR
Jamie Madillb980c562018-11-27 11:34:27 -0500949# define YY_FATAL_ERROR(msg) yy_fatal_error(msg, yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000950#endif
951
952/* end tables serialization structures and prototypes */
953
954/* Default declaration of generated scanner - a define so the user can
955 * easily add parameters.
956 */
957#ifndef YY_DECL
Jamie Madillb980c562018-11-27 11:34:27 -0500958# define YY_DECL_IS_OURS 1
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000959
Jamie Madillb980c562018-11-27 11:34:27 -0500960extern int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner);
Luc Ferrone49f1e92018-01-24 14:47:55 -0500961
Jamie Madillb980c562018-11-27 11:34:27 -0500962# define YY_DECL int yylex(YYSTYPE *yylval_param, YYLTYPE *yylloc_param, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000963#endif /* !YY_DECL */
964
965/* Code executed at the beginning of each rule, after yytext and yyleng
966 * have been set up.
967 */
968#ifndef YY_USER_ACTION
Jamie Madillb980c562018-11-27 11:34:27 -0500969# define YY_USER_ACTION
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000970#endif
971
972/* Code executed at the end of each rule. */
973#ifndef YY_BREAK
Jamie Madillb980c562018-11-27 11:34:27 -0500974# define YY_BREAK /*LINTED*/ break;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000975#endif
976
Jamie Madillb980c562018-11-27 11:34:27 -0500977#define YY_RULE_SETUP YY_USER_ACTION
Geoff Lang93561c32016-09-20 10:22:55 -0400978
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000979/** The main scanner function which does all the work.
980 */
981YY_DECL
982{
Jamie Madillb980c562018-11-27 11:34:27 -0500983 yy_state_type yy_current_state;
984 char *yy_cp, *yy_bp;
985 int yy_act;
986 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
Geoff Lang93561c32016-09-20 10:22:55 -0400987
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000988 yylval = yylval_param;
989
990 yylloc = yylloc_param;
991
Jamie Madillb980c562018-11-27 11:34:27 -0500992 if (!yyg->yy_init)
993 {
994 yyg->yy_init = 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000995
996#ifdef YY_USER_INIT
Jamie Madillb980c562018-11-27 11:34:27 -0500997 YY_USER_INIT;
alokp@chromium.org04d7d222012-05-16 19:24:07 +0000998#endif
999
Jamie Madillb980c562018-11-27 11:34:27 -05001000 if (!yyg->yy_start)
1001 yyg->yy_start = 1; /* first start state */
Geoff Lang93561c32016-09-20 10:22:55 -04001002
Jamie Madillb980c562018-11-27 11:34:27 -05001003 if (!yyin)
1004 yyin = stdin;
Geoff Lang93561c32016-09-20 10:22:55 -04001005
Jamie Madillb980c562018-11-27 11:34:27 -05001006 if (!yyout)
1007 yyout = stdout;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001008
Jamie Madillb980c562018-11-27 11:34:27 -05001009 if (!YY_CURRENT_BUFFER)
1010 {
1011 yyensure_buffer_stack(yyscanner);
1012 YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner);
1013 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001014
Jamie Madillb980c562018-11-27 11:34:27 -05001015 yy_load_buffer_state(yyscanner);
Corentin Wallezdc0fa462017-02-01 14:44:43 -05001016 }
Jamie Madillb980c562018-11-27 11:34:27 -05001017
Corentin Wallezdc0fa462017-02-01 14:44:43 -05001018 {
alokp@chromium.org19d7aa62012-05-31 17:34:05 +00001019
Jamie Madillb980c562018-11-27 11:34:27 -05001020 /* Line comment */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001021
Jamie Madillb980c562018-11-27 11:34:27 -05001022 while (/*CONSTCOND*/ 1) /* loops until end-of-file is reached */
1023 {
1024 yy_cp = yyg->yy_c_buf_p;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001025
Jamie Madillb980c562018-11-27 11:34:27 -05001026 /* Support of yytext. */
1027 *yy_cp = yyg->yy_hold_char;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001028
Jamie Madillb980c562018-11-27 11:34:27 -05001029 /* yy_bp points to the position in yy_ch_buf of the start of
1030 * the current run.
1031 */
1032 yy_bp = yy_cp;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001033
Jamie Madillb980c562018-11-27 11:34:27 -05001034 yy_current_state = yyg->yy_start;
1035 yy_match:
1036 do
1037 {
1038 YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1039 if (yy_accept[yy_current_state])
1040 {
1041 yyg->yy_last_accepting_state = yy_current_state;
1042 yyg->yy_last_accepting_cpos = yy_cp;
1043 }
1044 while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
1045 {
1046 yy_current_state = (int)yy_def[yy_current_state];
1047 if (yy_current_state >= 95)
1048 yy_c = yy_meta[yy_c];
1049 }
1050 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1051 ++yy_cp;
1052 } while (yy_current_state != 94);
1053 yy_cp = yyg->yy_last_accepting_cpos;
1054 yy_current_state = yyg->yy_last_accepting_state;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001055
Jamie Madillb980c562018-11-27 11:34:27 -05001056 yy_find_action:
1057 yy_act = yy_accept[yy_current_state];
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001058
Jamie Madillb980c562018-11-27 11:34:27 -05001059 YY_DO_BEFORE_ACTION;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001060
Jamie Madillb980c562018-11-27 11:34:27 -05001061 do_action: /* This label is used only to access EOF actions. */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001062
Jamie Madillb980c562018-11-27 11:34:27 -05001063 switch (yy_act)
1064 { /* beginning of action switch */
1065 case 0: /* must back up */
1066 /* undo the effects of YY_DO_BEFORE_ACTION */
1067 *yy_cp = yyg->yy_hold_char;
1068 yy_cp = yyg->yy_last_accepting_cpos;
1069 yy_current_state = yyg->yy_last_accepting_state;
1070 goto yy_find_action;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001071
Jamie Madillb980c562018-11-27 11:34:27 -05001072 case 1:
1073 YY_RULE_SETUP
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001074
Jamie Madillb980c562018-11-27 11:34:27 -05001075 YY_BREAK
1076 /* Block comment */
1077 /* Line breaks are just counted - not returned. */
1078 /* The comment is replaced by a single space. */
1079 case 2:
1080 YY_RULE_SETUP { BEGIN(COMMENT); }
1081 YY_BREAK
1082 case 3:
1083 YY_RULE_SETUP
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001084
Jamie Madillb980c562018-11-27 11:34:27 -05001085 YY_BREAK
1086 case 4:
1087 YY_RULE_SETUP
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001088
Jamie Madillb980c562018-11-27 11:34:27 -05001089 YY_BREAK
1090 case 5:
1091 /* rule 5 can match eol */
1092 YY_RULE_SETUP
1093 {
1094 if (yylineno == INT_MAX)
1095 {
1096 *yylval = "Integer overflow on line number";
1097 return angle::pp::Token::GOT_ERROR;
1098 }
1099 ++yylineno;
1100 }
1101 YY_BREAK
1102 case 6:
1103 YY_RULE_SETUP
1104 {
1105 yyextra->leadingSpace = true;
1106 BEGIN(INITIAL);
1107 }
1108 YY_BREAK
1109 case 7:
1110 YY_RULE_SETUP
1111 {
1112 // # is only valid at start of line for preprocessor directives.
1113 yylval->assign(1, yytext[0]);
1114 return yyextra->lineStart ? angle::pp::Token::PP_HASH
1115 : angle::pp::Token::PP_OTHER;
1116 }
1117 YY_BREAK
1118 case 8:
1119 YY_RULE_SETUP
1120 {
1121 yylval->assign(yytext, yyleng);
1122 return angle::pp::Token::IDENTIFIER;
1123 }
1124 YY_BREAK
1125 case 9:
1126 YY_RULE_SETUP
1127 {
1128 yylval->assign(yytext, yyleng);
1129 return angle::pp::Token::CONST_INT;
1130 }
1131 YY_BREAK
1132 case 10:
1133 YY_RULE_SETUP
1134 {
1135 yylval->assign(yytext, yyleng);
1136 return angle::pp::Token::CONST_FLOAT;
1137 }
1138 YY_BREAK
1139 /* Anything that starts with a {DIGIT} or .{DIGIT} must be a number. */
1140 /* Rule to catch all invalid integers and floats. */
1141 case 11:
1142 YY_RULE_SETUP
1143 {
1144 yylval->assign(yytext, yyleng);
1145 return angle::pp::Token::PP_NUMBER;
1146 }
1147 YY_BREAK
1148 case 12:
1149 YY_RULE_SETUP
1150 {
1151 yylval->assign(yytext, yyleng);
1152 return angle::pp::Token::OP_INC;
1153 }
1154 YY_BREAK
1155 case 13:
1156 YY_RULE_SETUP
1157 {
1158 yylval->assign(yytext, yyleng);
1159 return angle::pp::Token::OP_DEC;
1160 }
1161 YY_BREAK
1162 case 14:
1163 YY_RULE_SETUP
1164 {
1165 yylval->assign(yytext, yyleng);
1166 return angle::pp::Token::OP_LEFT;
1167 }
1168 YY_BREAK
1169 case 15:
1170 YY_RULE_SETUP
1171 {
1172 yylval->assign(yytext, yyleng);
1173 return angle::pp::Token::OP_RIGHT;
1174 }
1175 YY_BREAK
1176 case 16:
1177 YY_RULE_SETUP
1178 {
1179 yylval->assign(yytext, yyleng);
1180 return angle::pp::Token::OP_LE;
1181 }
1182 YY_BREAK
1183 case 17:
1184 YY_RULE_SETUP
1185 {
1186 yylval->assign(yytext, yyleng);
1187 return angle::pp::Token::OP_GE;
1188 }
1189 YY_BREAK
1190 case 18:
1191 YY_RULE_SETUP
1192 {
1193 yylval->assign(yytext, yyleng);
1194 return angle::pp::Token::OP_EQ;
1195 }
1196 YY_BREAK
1197 case 19:
1198 YY_RULE_SETUP
1199 {
1200 yylval->assign(yytext, yyleng);
1201 return angle::pp::Token::OP_NE;
1202 }
1203 YY_BREAK
1204 case 20:
1205 YY_RULE_SETUP
1206 {
1207 yylval->assign(yytext, yyleng);
1208 return angle::pp::Token::OP_AND;
1209 }
1210 YY_BREAK
1211 case 21:
1212 YY_RULE_SETUP
1213 {
1214 yylval->assign(yytext, yyleng);
1215 return angle::pp::Token::OP_XOR;
1216 }
1217 YY_BREAK
1218 case 22:
1219 YY_RULE_SETUP
1220 {
1221 yylval->assign(yytext, yyleng);
1222 return angle::pp::Token::OP_OR;
1223 }
1224 YY_BREAK
1225 case 23:
1226 YY_RULE_SETUP
1227 {
1228 yylval->assign(yytext, yyleng);
1229 return angle::pp::Token::OP_ADD_ASSIGN;
1230 }
1231 YY_BREAK
1232 case 24:
1233 YY_RULE_SETUP
1234 {
1235 yylval->assign(yytext, yyleng);
1236 return angle::pp::Token::OP_SUB_ASSIGN;
1237 }
1238 YY_BREAK
1239 case 25:
1240 YY_RULE_SETUP
1241 {
1242 yylval->assign(yytext, yyleng);
1243 return angle::pp::Token::OP_MUL_ASSIGN;
1244 }
1245 YY_BREAK
1246 case 26:
1247 YY_RULE_SETUP
1248 {
1249 yylval->assign(yytext, yyleng);
1250 return angle::pp::Token::OP_DIV_ASSIGN;
1251 }
1252 YY_BREAK
1253 case 27:
1254 YY_RULE_SETUP
1255 {
1256 yylval->assign(yytext, yyleng);
1257 return angle::pp::Token::OP_MOD_ASSIGN;
1258 }
1259 YY_BREAK
1260 case 28:
1261 YY_RULE_SETUP
1262 {
1263 yylval->assign(yytext, yyleng);
1264 return angle::pp::Token::OP_LEFT_ASSIGN;
1265 }
1266 YY_BREAK
1267 case 29:
1268 YY_RULE_SETUP
1269 {
1270 yylval->assign(yytext, yyleng);
1271 return angle::pp::Token::OP_RIGHT_ASSIGN;
1272 }
1273 YY_BREAK
1274 case 30:
1275 YY_RULE_SETUP
1276 {
1277 yylval->assign(yytext, yyleng);
1278 return angle::pp::Token::OP_AND_ASSIGN;
1279 }
1280 YY_BREAK
1281 case 31:
1282 YY_RULE_SETUP
1283 {
1284 yylval->assign(yytext, yyleng);
1285 return angle::pp::Token::OP_XOR_ASSIGN;
1286 }
1287 YY_BREAK
1288 case 32:
1289 YY_RULE_SETUP
1290 {
1291 yylval->assign(yytext, yyleng);
1292 return angle::pp::Token::OP_OR_ASSIGN;
1293 }
1294 YY_BREAK
1295 case 33:
1296 YY_RULE_SETUP
1297 {
1298 yylval->assign(1, yytext[0]);
1299 return yytext[0];
1300 }
1301 YY_BREAK
1302 case 34:
1303 YY_RULE_SETUP { yyextra->leadingSpace = true; }
1304 YY_BREAK
1305 case 35:
1306 /* rule 35 can match eol */
1307 YY_RULE_SETUP
1308 {
1309 if (yylineno == INT_MAX)
1310 {
1311 *yylval = "Integer overflow on line number";
1312 return angle::pp::Token::GOT_ERROR;
1313 }
1314 ++yylineno;
1315 yylval->assign(1, '\n');
1316 return '\n';
1317 }
1318 YY_BREAK
1319 case 36:
1320 YY_RULE_SETUP
1321 {
1322 yylval->assign(1, yytext[0]);
1323 return angle::pp::Token::PP_OTHER;
1324 }
1325 YY_BREAK
1326 case YY_STATE_EOF(INITIAL):
1327 case YY_STATE_EOF(COMMENT):
1328 {
1329 // YY_USER_ACTION is not invoked for handling EOF.
1330 // Set the location for EOF token manually.
1331 angle::pp::Input *input = &yyextra->input;
1332 angle::pp::Input::Location *scanLoc = &yyextra->scanLoc;
1333 yy_size_t sIndexMax = input->count() ? input->count() - 1 : 0;
1334 if (scanLoc->sIndex != sIndexMax)
1335 {
1336 // We can only reach here if there are empty strings at the
1337 // end of the input.
1338 scanLoc->sIndex = sIndexMax;
1339 scanLoc->cIndex = 0;
1340 // FIXME: this is not 64-bit clean.
1341 yyfileno = static_cast<int>(sIndexMax);
1342 yylineno = 1;
1343 }
1344 yylloc->file = yyfileno;
1345 yylloc->line = yylineno;
1346 yylval->clear();
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001347
Jamie Madillb980c562018-11-27 11:34:27 -05001348 // Line number overflows fake EOFs to exit early, check for this case.
1349 if (yylineno == INT_MAX)
1350 {
1351 yyextra->diagnostics->report(angle::pp::Diagnostics::PP_TOKENIZER_ERROR,
1352 angle::pp::SourceLocation(yyfileno, yylineno),
1353 "Integer overflow on line number");
1354 }
1355 else if (YY_START == COMMENT)
1356 {
1357 yyextra->diagnostics->report(angle::pp::Diagnostics::PP_EOF_IN_COMMENT,
1358 angle::pp::SourceLocation(yyfileno, yylineno),
1359 "EOF while in a comment");
1360 }
1361 yyterminate();
1362 }
1363 YY_BREAK
1364 case 37:
1365 YY_RULE_SETUP
1366 ECHO;
1367 YY_BREAK
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001368
Jamie Madillb980c562018-11-27 11:34:27 -05001369 case YY_END_OF_BUFFER:
1370 {
1371 /* Amount of text matched not including the EOB char. */
1372 int yy_amount_of_matched_text = (int)(yy_cp - yyg->yytext_ptr) - 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001373
Jamie Madillb980c562018-11-27 11:34:27 -05001374 /* Undo the effects of YY_DO_BEFORE_ACTION. */
1375 *yy_cp = yyg->yy_hold_char;
1376 YY_RESTORE_YY_MORE_OFFSET
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001377
Jamie Madillb980c562018-11-27 11:34:27 -05001378 if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW)
1379 {
1380 /* We're scanning a new file or input source. It's
1381 * possible that this happened because the user
1382 * just pointed yyin at a new source and called
1383 * yylex(). If so, then we have to assure
1384 * consistency between YY_CURRENT_BUFFER and our
1385 * globals. Here is the right place to do so, because
1386 * this is the first action (other than possibly a
1387 * back-up) that will match for the new input source.
1388 */
1389 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1390 YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
1391 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1392 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001393
Jamie Madillb980c562018-11-27 11:34:27 -05001394 /* Note that here we test for yy_c_buf_p "<=" to the position
1395 * of the first EOB in the buffer, since yy_c_buf_p will
1396 * already have been incremented past the NUL character
1397 * (since all states make transitions on EOB to the
1398 * end-of-buffer state). Contrast this with the test
1399 * in input().
1400 */
1401 if (yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars])
1402 { /* This was really a NUL. */
1403 yy_state_type yy_next_state;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001404
Jamie Madillb980c562018-11-27 11:34:27 -05001405 yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001406
Jamie Madillb980c562018-11-27 11:34:27 -05001407 yy_current_state = yy_get_previous_state(yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001408
Jamie Madillb980c562018-11-27 11:34:27 -05001409 /* Okay, we're now positioned to make the NUL
1410 * transition. We couldn't have
1411 * yy_get_previous_state() go ahead and do it
1412 * for us because it doesn't know how to deal
1413 * with the possibility of jamming (and we don't
1414 * want to build jamming into it because then it
1415 * will run more slowly).
1416 */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001417
Jamie Madillb980c562018-11-27 11:34:27 -05001418 yy_next_state = yy_try_NUL_trans(yy_current_state, yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001419
Jamie Madillb980c562018-11-27 11:34:27 -05001420 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1421
1422 if (yy_next_state)
1423 {
1424 /* Consume the NUL. */
1425 yy_cp = ++yyg->yy_c_buf_p;
1426 yy_current_state = yy_next_state;
1427 goto yy_match;
1428 }
1429
1430 else
1431 {
1432 yy_cp = yyg->yy_last_accepting_cpos;
1433 yy_current_state = yyg->yy_last_accepting_state;
1434 goto yy_find_action;
1435 }
1436 }
1437
1438 else
1439 switch (yy_get_next_buffer(yyscanner))
1440 {
1441 case EOB_ACT_END_OF_FILE:
1442 {
1443 yyg->yy_did_buffer_switch_on_eof = 0;
1444
1445 if (yywrap(yyscanner))
1446 {
1447 /* Note: because we've taken care in
1448 * yy_get_next_buffer() to have set up
1449 * yytext, we can now set up
1450 * yy_c_buf_p so that if some total
1451 * hoser (like flex itself) wants to
1452 * call the scanner after we return the
1453 * YY_NULL, it'll still work - another
1454 * YY_NULL will get returned.
1455 */
1456 yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
1457
1458 yy_act = YY_STATE_EOF(YY_START);
1459 goto do_action;
1460 }
1461
1462 else
1463 {
1464 if (!yyg->yy_did_buffer_switch_on_eof)
1465 YY_NEW_FILE;
1466 }
1467 break;
1468 }
1469
1470 case EOB_ACT_CONTINUE_SCAN:
1471 yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
1472
1473 yy_current_state = yy_get_previous_state(yyscanner);
1474
1475 yy_cp = yyg->yy_c_buf_p;
1476 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1477 goto yy_match;
1478
1479 case EOB_ACT_LAST_MATCH:
1480 yyg->yy_c_buf_p =
1481 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
1482
1483 yy_current_state = yy_get_previous_state(yyscanner);
1484
1485 yy_cp = yyg->yy_c_buf_p;
1486 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1487 goto yy_find_action;
1488 }
1489 break;
1490 }
1491
1492 default:
1493 YY_FATAL_ERROR("fatal flex scanner internal error--no action found");
1494 } /* end of action switch */
1495 } /* end of scanning one token */
1496 } /* end of user's declarations */
Corentin Wallez168d5e82017-02-01 12:18:56 -08001497} /* end of yylex */
Geoff Lang93561c32016-09-20 10:22:55 -04001498
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001499/* yy_get_next_buffer - try to read in a new buffer
1500 *
1501 * Returns a code representing an action:
1502 * EOB_ACT_LAST_MATCH -
1503 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1504 * EOB_ACT_END_OF_FILE - end of file
1505 */
Jamie Madillb980c562018-11-27 11:34:27 -05001506static int yy_get_next_buffer(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001507{
Jamie Madillb980c562018-11-27 11:34:27 -05001508 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
1509 char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1510 char *source = yyg->yytext_ptr;
1511 int number_to_move, i;
1512 int ret_val;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001513
Jamie Madillb980c562018-11-27 11:34:27 -05001514 if (yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1])
1515 YY_FATAL_ERROR("fatal flex scanner internal error--end of buffer missed");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001516
Jamie Madillb980c562018-11-27 11:34:27 -05001517 if (YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0)
1518 { /* Don't try to fill the buffer, so this is an EOF. */
1519 if (yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1)
1520 {
1521 /* We matched a single character, the EOB, so
1522 * treat this as a final EOF.
1523 */
1524 return EOB_ACT_END_OF_FILE;
1525 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001526
Jamie Madillb980c562018-11-27 11:34:27 -05001527 else
1528 {
1529 /* We matched some text prior to the EOB, first
1530 * process it.
1531 */
1532 return EOB_ACT_LAST_MATCH;
1533 }
1534 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001535
Jamie Madillb980c562018-11-27 11:34:27 -05001536 /* Try to read more data. */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001537
Jamie Madillb980c562018-11-27 11:34:27 -05001538 /* First move last chars to start of buffer. */
1539 number_to_move = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr - 1);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001540
Jamie Madillb980c562018-11-27 11:34:27 -05001541 for (i = 0; i < number_to_move; ++i)
1542 *(dest++) = *(source++);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001543
Jamie Madillb980c562018-11-27 11:34:27 -05001544 if (YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING)
1545 /* don't do the read, it's not guaranteed to return an EOF,
1546 * just force an EOF
1547 */
1548 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001549
Jamie Madillb980c562018-11-27 11:34:27 -05001550 else
1551 {
1552 int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001553
Jamie Madillb980c562018-11-27 11:34:27 -05001554 while (num_to_read <= 0)
1555 { /* Not enough room in the buffer - grow it. */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001556
Jamie Madillb980c562018-11-27 11:34:27 -05001557 /* just a shorter name for the current buffer */
1558 YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001559
Jamie Madillb980c562018-11-27 11:34:27 -05001560 int yy_c_buf_p_offset = (int)(yyg->yy_c_buf_p - b->yy_ch_buf);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001561
Jamie Madillb980c562018-11-27 11:34:27 -05001562 if (b->yy_is_our_buffer)
1563 {
1564 int new_size = b->yy_buf_size * 2;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001565
Jamie Madillb980c562018-11-27 11:34:27 -05001566 if (new_size <= 0)
1567 b->yy_buf_size += b->yy_buf_size / 8;
1568 else
1569 b->yy_buf_size *= 2;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001570
Jamie Madillb980c562018-11-27 11:34:27 -05001571 b->yy_ch_buf = (char *)
1572 /* Include room in for 2 EOB chars. */
1573 yyrealloc((void *)b->yy_ch_buf, (yy_size_t)(b->yy_buf_size + 2), yyscanner);
1574 }
1575 else
1576 /* Can't grow it, we don't own it. */
1577 b->yy_ch_buf = NULL;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001578
Jamie Madillb980c562018-11-27 11:34:27 -05001579 if (!b->yy_ch_buf)
1580 YY_FATAL_ERROR("fatal error - scanner input buffer overflow");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001581
Jamie Madillb980c562018-11-27 11:34:27 -05001582 yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001583
Jamie Madillb980c562018-11-27 11:34:27 -05001584 num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1585 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001586
Jamie Madillb980c562018-11-27 11:34:27 -05001587 if (num_to_read > YY_READ_BUF_SIZE)
1588 num_to_read = YY_READ_BUF_SIZE;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001589
Jamie Madillb980c562018-11-27 11:34:27 -05001590 /* Read in more data. */
1591 yy_size_t ret = 0;
1592 YY_INPUT((&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), ret, num_to_read);
1593 yyg->yy_n_chars = static_cast<int>(ret);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001594
Jamie Madillb980c562018-11-27 11:34:27 -05001595 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
1596 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001597
Jamie Madillb980c562018-11-27 11:34:27 -05001598 if (yyg->yy_n_chars == 0)
1599 {
1600 if (number_to_move == YY_MORE_ADJ)
1601 {
1602 ret_val = EOB_ACT_END_OF_FILE;
1603 yyrestart(yyin, yyscanner);
1604 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001605
Jamie Madillb980c562018-11-27 11:34:27 -05001606 else
1607 {
1608 ret_val = EOB_ACT_LAST_MATCH;
1609 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING;
1610 }
1611 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001612
Jamie Madillb980c562018-11-27 11:34:27 -05001613 else
1614 ret_val = EOB_ACT_CONTINUE_SCAN;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001615
Jamie Madillb980c562018-11-27 11:34:27 -05001616 if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size)
1617 {
1618 /* Extend the array by 50%, plus the number we really need. */
1619 int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
1620 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *)yyrealloc(
1621 (void *)YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t)new_size, yyscanner);
1622 if (!YY_CURRENT_BUFFER_LVALUE->yy_ch_buf)
1623 YY_FATAL_ERROR("out of dynamic memory in yy_get_next_buffer()");
1624 /* "- 2" to take care of EOB's */
1625 YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int)(new_size - 2);
1626 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001627
Jamie Madillb980c562018-11-27 11:34:27 -05001628 yyg->yy_n_chars += number_to_move;
1629 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
1630 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001631
Jamie Madillb980c562018-11-27 11:34:27 -05001632 yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001633
Jamie Madillb980c562018-11-27 11:34:27 -05001634 return ret_val;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001635}
1636
1637/* yy_get_previous_state - get the state just before the EOB char was reached */
1638
Jamie Madillb980c562018-11-27 11:34:27 -05001639static yy_state_type yy_get_previous_state(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001640{
Jamie Madillb980c562018-11-27 11:34:27 -05001641 yy_state_type yy_current_state;
1642 char *yy_cp;
1643 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001644
Jamie Madillb980c562018-11-27 11:34:27 -05001645 yy_current_state = yyg->yy_start;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001646
Jamie Madillb980c562018-11-27 11:34:27 -05001647 for (yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp)
1648 {
1649 YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1650 if (yy_accept[yy_current_state])
1651 {
1652 yyg->yy_last_accepting_state = yy_current_state;
1653 yyg->yy_last_accepting_cpos = yy_cp;
1654 }
1655 while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
1656 {
1657 yy_current_state = (int)yy_def[yy_current_state];
1658 if (yy_current_state >= 95)
1659 yy_c = yy_meta[yy_c];
1660 }
1661 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1662 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001663
Jamie Madillb980c562018-11-27 11:34:27 -05001664 return yy_current_state;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001665}
1666
1667/* yy_try_NUL_trans - try to make a transition on the NUL character
1668 *
1669 * synopsis
1670 * next_state = yy_try_NUL_trans( current_state );
1671 */
Jamie Madillb980c562018-11-27 11:34:27 -05001672static yy_state_type yy_try_NUL_trans(yy_state_type yy_current_state, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001673{
Jamie Madillb980c562018-11-27 11:34:27 -05001674 int yy_is_jam;
1675 struct yyguts_t *yyg =
1676 (struct yyguts_t *)yyscanner; /* This var may be unused depending upon options. */
1677 char *yy_cp = yyg->yy_c_buf_p;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001678
Jamie Madillb980c562018-11-27 11:34:27 -05001679 YY_CHAR yy_c = 1;
1680 if (yy_accept[yy_current_state])
1681 {
1682 yyg->yy_last_accepting_state = yy_current_state;
1683 yyg->yy_last_accepting_cpos = yy_cp;
1684 }
1685 while (yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state)
1686 {
1687 yy_current_state = (int)yy_def[yy_current_state];
1688 if (yy_current_state >= 95)
1689 yy_c = yy_meta[yy_c];
1690 }
1691 yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
1692 yy_is_jam = (yy_current_state == 94);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001693
Jamie Madillb980c562018-11-27 11:34:27 -05001694 (void)yyg;
1695 return yy_is_jam ? 0 : yy_current_state;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001696}
1697
Geoff Lang93561c32016-09-20 10:22:55 -04001698#ifndef YY_NO_UNPUT
1699
1700#endif
1701
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001702#ifndef YY_NO_INPUT
Jamie Madillb980c562018-11-27 11:34:27 -05001703# ifdef __cplusplus
1704static int yyinput(yyscan_t yyscanner)
1705# else
1706static int input(yyscan_t yyscanner)
1707# endif
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001708
1709{
Jamie Madillb980c562018-11-27 11:34:27 -05001710 int c;
1711 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001712
Jamie Madillb980c562018-11-27 11:34:27 -05001713 *yyg->yy_c_buf_p = yyg->yy_hold_char;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001714
Jamie Madillb980c562018-11-27 11:34:27 -05001715 if (*yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR)
1716 {
1717 /* yy_c_buf_p now points to the character we want to return.
1718 * If this occurs *before* the EOB characters, then it's a
1719 * valid NUL; if not, then we've hit the end of the buffer.
1720 */
1721 if (yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars])
1722 /* This was really a NUL. */
1723 *yyg->yy_c_buf_p = '\0';
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001724
Jamie Madillb980c562018-11-27 11:34:27 -05001725 else
1726 { /* need more input */
1727 int offset = (int)(yyg->yy_c_buf_p - yyg->yytext_ptr);
1728 ++yyg->yy_c_buf_p;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001729
Jamie Madillb980c562018-11-27 11:34:27 -05001730 switch (yy_get_next_buffer(yyscanner))
1731 {
1732 case EOB_ACT_LAST_MATCH:
1733 /* This happens because yy_g_n_b()
1734 * sees that we've accumulated a
1735 * token and flags that we need to
1736 * try matching the token before
1737 * proceeding. But for input(),
1738 * there's no matching to consider.
1739 * So convert the EOB_ACT_LAST_MATCH
1740 * to EOB_ACT_END_OF_FILE.
1741 */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001742
Jamie Madillb980c562018-11-27 11:34:27 -05001743 /* Reset buffer status. */
1744 yyrestart(yyin, yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001745
Jamie Madillb980c562018-11-27 11:34:27 -05001746 /*FALLTHROUGH*/
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001747
Jamie Madillb980c562018-11-27 11:34:27 -05001748 case EOB_ACT_END_OF_FILE:
1749 {
1750 if (yywrap(yyscanner))
1751 return 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001752
Jamie Madillb980c562018-11-27 11:34:27 -05001753 if (!yyg->yy_did_buffer_switch_on_eof)
1754 YY_NEW_FILE;
1755# ifdef __cplusplus
1756 return yyinput(yyscanner);
1757# else
1758 return input(yyscanner);
1759# endif
1760 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001761
Jamie Madillb980c562018-11-27 11:34:27 -05001762 case EOB_ACT_CONTINUE_SCAN:
1763 yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
1764 break;
1765 }
1766 }
1767 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001768
Jamie Madillb980c562018-11-27 11:34:27 -05001769 c = *(unsigned char *)yyg->yy_c_buf_p; /* cast for 8-bit char's */
1770 *yyg->yy_c_buf_p = '\0'; /* preserve yytext */
1771 yyg->yy_hold_char = *++yyg->yy_c_buf_p;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001772
Jamie Madillb980c562018-11-27 11:34:27 -05001773 return c;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001774}
Jamie Madillb980c562018-11-27 11:34:27 -05001775#endif /* ifndef YY_NO_INPUT */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001776
1777/** Immediately switch to a different input stream.
1778 * @param input_file A readable stream.
1779 * @param yyscanner The scanner object.
1780 * @note This function does not reset the start condition to @c INITIAL .
1781 */
Jamie Madillb980c562018-11-27 11:34:27 -05001782void yyrestart(FILE *input_file, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001783{
Jamie Madillb980c562018-11-27 11:34:27 -05001784 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001785
Jamie Madillb980c562018-11-27 11:34:27 -05001786 if (!YY_CURRENT_BUFFER)
1787 {
1788 yyensure_buffer_stack(yyscanner);
1789 YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin, YY_BUF_SIZE, yyscanner);
1790 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001791
Jamie Madillb980c562018-11-27 11:34:27 -05001792 yy_init_buffer(YY_CURRENT_BUFFER, input_file, yyscanner);
1793 yy_load_buffer_state(yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001794}
1795
1796/** Switch to a different input buffer.
1797 * @param new_buffer The new input buffer.
1798 * @param yyscanner The scanner object.
1799 */
Jamie Madillb980c562018-11-27 11:34:27 -05001800void yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001801{
Jamie Madillb980c562018-11-27 11:34:27 -05001802 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001803
Jamie Madillb980c562018-11-27 11:34:27 -05001804 /* TODO. We should be able to replace this entire function body
1805 * with
1806 * yypop_buffer_state();
1807 * yypush_buffer_state(new_buffer);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001808 */
Jamie Madillb980c562018-11-27 11:34:27 -05001809 yyensure_buffer_stack(yyscanner);
1810 if (YY_CURRENT_BUFFER == new_buffer)
1811 return;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001812
Jamie Madillb980c562018-11-27 11:34:27 -05001813 if (YY_CURRENT_BUFFER)
1814 {
1815 /* Flush out information for old buffer. */
1816 *yyg->yy_c_buf_p = yyg->yy_hold_char;
1817 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
1818 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
1819 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001820
Jamie Madillb980c562018-11-27 11:34:27 -05001821 YY_CURRENT_BUFFER_LVALUE = new_buffer;
1822 yy_load_buffer_state(yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001823
Jamie Madillb980c562018-11-27 11:34:27 -05001824 /* We don't actually know whether we did this switch during
1825 * EOF (yywrap()) processing, but the only time this flag
1826 * is looked at is after yywrap() is called, so it's safe
1827 * to go ahead and always set it.
1828 */
1829 yyg->yy_did_buffer_switch_on_eof = 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001830}
1831
Jamie Madillb980c562018-11-27 11:34:27 -05001832static void yy_load_buffer_state(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001833{
Jamie Madillb980c562018-11-27 11:34:27 -05001834 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
1835 yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1836 yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1837 yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1838 yyg->yy_hold_char = *yyg->yy_c_buf_p;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001839}
1840
1841/** Allocate and initialize an input buffer state.
1842 * @param file A readable stream.
1843 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1844 * @param yyscanner The scanner object.
1845 * @return the allocated buffer state.
1846 */
Jamie Madillb980c562018-11-27 11:34:27 -05001847YY_BUFFER_STATE yy_create_buffer(FILE *file, int size, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001848{
Jamie Madillb980c562018-11-27 11:34:27 -05001849 YY_BUFFER_STATE b;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001850
Jamie Madillb980c562018-11-27 11:34:27 -05001851 b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner);
1852 if (!b)
1853 YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001854
Jamie Madillb980c562018-11-27 11:34:27 -05001855 b->yy_buf_size = size;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001856
Jamie Madillb980c562018-11-27 11:34:27 -05001857 /* yy_ch_buf has to be 2 characters longer than the size given because
1858 * we need to put in 2 end-of-buffer characters.
1859 */
1860 b->yy_ch_buf = (char *)yyalloc((yy_size_t)(b->yy_buf_size + 2), yyscanner);
1861 if (!b->yy_ch_buf)
1862 YY_FATAL_ERROR("out of dynamic memory in yy_create_buffer()");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001863
Jamie Madillb980c562018-11-27 11:34:27 -05001864 b->yy_is_our_buffer = 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001865
Jamie Madillb980c562018-11-27 11:34:27 -05001866 yy_init_buffer(b, file, yyscanner);
1867
1868 return b;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001869}
1870
1871/** Destroy the buffer.
Corentin Wallez168d5e82017-02-01 12:18:56 -08001872 * @param b a buffer created with yy_create_buffer()
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001873 * @param yyscanner The scanner object.
1874 */
Jamie Madillb980c562018-11-27 11:34:27 -05001875void yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001876{
Jamie Madillb980c562018-11-27 11:34:27 -05001877 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001878
Jamie Madillb980c562018-11-27 11:34:27 -05001879 if (!b)
1880 return;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001881
Jamie Madillb980c562018-11-27 11:34:27 -05001882 if (b == YY_CURRENT_BUFFER) /* Not sure if we should pop here. */
1883 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE)0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001884
Jamie Madillb980c562018-11-27 11:34:27 -05001885 if (b->yy_is_our_buffer)
1886 yyfree((void *)b->yy_ch_buf, yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001887
Jamie Madillb980c562018-11-27 11:34:27 -05001888 yyfree((void *)b, yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001889}
1890
1891/* Initializes or reinitializes a buffer.
1892 * This function is sometimes called more than once on the same buffer,
Corentin Wallez168d5e82017-02-01 12:18:56 -08001893 * such as during a yyrestart() or at EOF.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001894 */
Jamie Madillb980c562018-11-27 11:34:27 -05001895static void yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001896
1897{
Jamie Madillb980c562018-11-27 11:34:27 -05001898 int oerrno = errno;
1899 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001900
Jamie Madillb980c562018-11-27 11:34:27 -05001901 yy_flush_buffer(b, yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001902
Jamie Madillb980c562018-11-27 11:34:27 -05001903 b->yy_input_file = file;
1904 b->yy_fill_buffer = 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001905
Corentin Wallez168d5e82017-02-01 12:18:56 -08001906 /* If b is the current buffer, then yy_init_buffer was _probably_
1907 * called from yyrestart() or through yy_get_next_buffer.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001908 * In that case, we don't want to reset the lineno or column.
1909 */
Jamie Madillb980c562018-11-27 11:34:27 -05001910 if (b != YY_CURRENT_BUFFER)
1911 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001912 b->yy_bs_lineno = 1;
1913 b->yy_bs_column = 0;
1914 }
1915
Jamie Madillb980c562018-11-27 11:34:27 -05001916 b->yy_is_interactive = 0;
Geoff Lang93561c32016-09-20 10:22:55 -04001917
Jamie Madillb980c562018-11-27 11:34:27 -05001918 errno = oerrno;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001919}
1920
1921/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
1922 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
1923 * @param yyscanner The scanner object.
1924 */
Jamie Madillb980c562018-11-27 11:34:27 -05001925void yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001926{
Jamie Madillb980c562018-11-27 11:34:27 -05001927 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
1928 if (!b)
1929 return;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001930
Jamie Madillb980c562018-11-27 11:34:27 -05001931 b->yy_n_chars = 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001932
Jamie Madillb980c562018-11-27 11:34:27 -05001933 /* We always need two end-of-buffer characters. The first causes
1934 * a transition to the end-of-buffer state. The second causes
1935 * a jam in that state.
1936 */
1937 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
1938 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001939
Jamie Madillb980c562018-11-27 11:34:27 -05001940 b->yy_buf_pos = &b->yy_ch_buf[0];
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001941
Jamie Madillb980c562018-11-27 11:34:27 -05001942 b->yy_at_bol = 1;
1943 b->yy_buffer_status = YY_BUFFER_NEW;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001944
Jamie Madillb980c562018-11-27 11:34:27 -05001945 if (b == YY_CURRENT_BUFFER)
1946 yy_load_buffer_state(yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001947}
1948
1949/** Pushes the new state onto the stack. The new state becomes
1950 * the current state. This function will allocate the stack
1951 * if necessary.
1952 * @param new_buffer The new state.
1953 * @param yyscanner The scanner object.
1954 */
Jamie Madillb980c562018-11-27 11:34:27 -05001955void yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001956{
Jamie Madillb980c562018-11-27 11:34:27 -05001957 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
1958 if (new_buffer == NULL)
1959 return;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001960
Jamie Madillb980c562018-11-27 11:34:27 -05001961 yyensure_buffer_stack(yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001962
Jamie Madillb980c562018-11-27 11:34:27 -05001963 /* This block is copied from yy_switch_to_buffer. */
1964 if (YY_CURRENT_BUFFER)
1965 {
1966 /* Flush out information for old buffer. */
1967 *yyg->yy_c_buf_p = yyg->yy_hold_char;
1968 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
1969 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
1970 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001971
Jamie Madillb980c562018-11-27 11:34:27 -05001972 /* Only push if top exists. Otherwise, replace top. */
1973 if (YY_CURRENT_BUFFER)
1974 yyg->yy_buffer_stack_top++;
1975 YY_CURRENT_BUFFER_LVALUE = new_buffer;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001976
Jamie Madillb980c562018-11-27 11:34:27 -05001977 /* copied from yy_switch_to_buffer. */
1978 yy_load_buffer_state(yyscanner);
1979 yyg->yy_did_buffer_switch_on_eof = 1;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001980}
1981
1982/** Removes and deletes the top of the stack, if present.
1983 * The next element becomes the new top.
1984 * @param yyscanner The scanner object.
1985 */
Jamie Madillb980c562018-11-27 11:34:27 -05001986void yypop_buffer_state(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001987{
Jamie Madillb980c562018-11-27 11:34:27 -05001988 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
1989 if (!YY_CURRENT_BUFFER)
1990 return;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001991
Jamie Madillb980c562018-11-27 11:34:27 -05001992 yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner);
1993 YY_CURRENT_BUFFER_LVALUE = NULL;
1994 if (yyg->yy_buffer_stack_top > 0)
1995 --yyg->yy_buffer_stack_top;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001996
Jamie Madillb980c562018-11-27 11:34:27 -05001997 if (YY_CURRENT_BUFFER)
1998 {
1999 yy_load_buffer_state(yyscanner);
2000 yyg->yy_did_buffer_switch_on_eof = 1;
2001 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002002}
2003
2004/* Allocates the stack if it does not exist.
2005 * Guarantees space for at least one push.
2006 */
Jamie Madillb980c562018-11-27 11:34:27 -05002007static void yyensure_buffer_stack(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002008{
Jamie Madillb980c562018-11-27 11:34:27 -05002009 yy_size_t num_to_alloc;
2010 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002011
Jamie Madillb980c562018-11-27 11:34:27 -05002012 if (!yyg->yy_buffer_stack)
2013 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002014
Jamie Madillb980c562018-11-27 11:34:27 -05002015 /* First allocation is just for 2 elements, since we don't know if this
2016 * scanner will even need a stack. We use 2 instead of 1 to avoid an
2017 * immediate realloc on the next call.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002018 */
Jamie Madillb980c562018-11-27 11:34:27 -05002019 num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
2020 yyg->yy_buffer_stack = (struct yy_buffer_state **)yyalloc(
2021 num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner);
2022 if (!yyg->yy_buffer_stack)
2023 YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()");
Corentin Wallez168d5e82017-02-01 12:18:56 -08002024
Jamie Madillb980c562018-11-27 11:34:27 -05002025 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state *));
Corentin Wallez168d5e82017-02-01 12:18:56 -08002026
Jamie Madillb980c562018-11-27 11:34:27 -05002027 yyg->yy_buffer_stack_max = num_to_alloc;
2028 yyg->yy_buffer_stack_top = 0;
2029 return;
2030 }
Corentin Wallez168d5e82017-02-01 12:18:56 -08002031
Jamie Madillb980c562018-11-27 11:34:27 -05002032 if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1)
2033 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002034
Jamie Madillb980c562018-11-27 11:34:27 -05002035 /* Increase the buffer to prepare for a possible push. */
2036 yy_size_t grow_size = 8 /* arbitrary grow size */;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002037
Jamie Madillb980c562018-11-27 11:34:27 -05002038 num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
2039 yyg->yy_buffer_stack = (struct yy_buffer_state **)yyrealloc(
2040 yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state *), yyscanner);
2041 if (!yyg->yy_buffer_stack)
2042 YY_FATAL_ERROR("out of dynamic memory in yyensure_buffer_stack()");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002043
Jamie Madillb980c562018-11-27 11:34:27 -05002044 /* zero only the new slots.*/
2045 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0,
2046 grow_size * sizeof(struct yy_buffer_state *));
2047 yyg->yy_buffer_stack_max = num_to_alloc;
2048 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002049}
2050
2051/** Setup the input buffer state to scan directly from a user-specified character buffer.
2052 * @param base the character buffer
2053 * @param size the size in bytes of the character buffer
2054 * @param yyscanner The scanner object.
Corentin Wallez168d5e82017-02-01 12:18:56 -08002055 * @return the newly allocated buffer state object.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002056 */
Jamie Madillb980c562018-11-27 11:34:27 -05002057YY_BUFFER_STATE yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002058{
Jamie Madillb980c562018-11-27 11:34:27 -05002059 YY_BUFFER_STATE b;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002060
Jamie Madillb980c562018-11-27 11:34:27 -05002061 if (size < 2 || base[size - 2] != YY_END_OF_BUFFER_CHAR ||
2062 base[size - 1] != YY_END_OF_BUFFER_CHAR)
2063 /* They forgot to leave room for the EOB's. */
2064 return NULL;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002065
Jamie Madillb980c562018-11-27 11:34:27 -05002066 b = (YY_BUFFER_STATE)yyalloc(sizeof(struct yy_buffer_state), yyscanner);
2067 if (!b)
2068 YY_FATAL_ERROR("out of dynamic memory in yy_scan_buffer()");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002069
Jamie Madillb980c562018-11-27 11:34:27 -05002070 b->yy_buf_size = (int)(size - 2); /* "- 2" to take care of EOB's */
2071 b->yy_buf_pos = b->yy_ch_buf = base;
2072 b->yy_is_our_buffer = 0;
2073 b->yy_input_file = NULL;
2074 b->yy_n_chars = b->yy_buf_size;
2075 b->yy_is_interactive = 0;
2076 b->yy_at_bol = 1;
2077 b->yy_fill_buffer = 0;
2078 b->yy_buffer_status = YY_BUFFER_NEW;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002079
Jamie Madillb980c562018-11-27 11:34:27 -05002080 yy_switch_to_buffer(b, yyscanner);
2081
2082 return b;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002083}
2084
Corentin Wallez168d5e82017-02-01 12:18:56 -08002085/** Setup the input buffer state to scan a string. The next call to yylex() will
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002086 * scan from a @e copy of @a str.
2087 * @param yystr a NUL-terminated string to scan
2088 * @param yyscanner The scanner object.
2089 * @return the newly allocated buffer state object.
2090 * @note If you want to scan bytes that may contain NUL values, then use
Corentin Wallez168d5e82017-02-01 12:18:56 -08002091 * yy_scan_bytes() instead.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002092 */
Jamie Madillb980c562018-11-27 11:34:27 -05002093YY_BUFFER_STATE yy_scan_string(const char *yystr, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002094{
Jamie Madillb980c562018-11-27 11:34:27 -05002095
2096 return yy_scan_bytes(yystr, (int)strlen(yystr), yyscanner);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002097}
2098
Corentin Wallez168d5e82017-02-01 12:18:56 -08002099/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002100 * scan from a @e copy of @a bytes.
Zhenyao Mof1d723c2013-09-23 14:57:07 -04002101 * @param yybytes the byte buffer to scan
2102 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002103 * @param yyscanner The scanner object.
2104 * @return the newly allocated buffer state object.
2105 */
Jamie Madillb980c562018-11-27 11:34:27 -05002106YY_BUFFER_STATE yy_scan_bytes(const char *yybytes, int _yybytes_len, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002107{
Jamie Madillb980c562018-11-27 11:34:27 -05002108 YY_BUFFER_STATE b;
2109 char *buf;
2110 yy_size_t n;
2111 int i;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002112
Jamie Madillb980c562018-11-27 11:34:27 -05002113 /* Get memory for full buffer, including space for trailing EOB's. */
2114 n = (yy_size_t)(_yybytes_len + 2);
2115 buf = (char *)yyalloc(n, yyscanner);
2116 if (!buf)
2117 YY_FATAL_ERROR("out of dynamic memory in yy_scan_bytes()");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002118
Jamie Madillb980c562018-11-27 11:34:27 -05002119 for (i = 0; i < _yybytes_len; ++i)
2120 buf[i] = yybytes[i];
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002121
Jamie Madillb980c562018-11-27 11:34:27 -05002122 buf[_yybytes_len] = buf[_yybytes_len + 1] = YY_END_OF_BUFFER_CHAR;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002123
Jamie Madillb980c562018-11-27 11:34:27 -05002124 b = yy_scan_buffer(buf, n, yyscanner);
2125 if (!b)
2126 YY_FATAL_ERROR("bad buffer in yy_scan_bytes()");
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002127
Jamie Madillb980c562018-11-27 11:34:27 -05002128 /* It's okay to grow etc. this buffer, and we should throw it
2129 * away when we're done.
2130 */
2131 b->yy_is_our_buffer = 1;
2132
2133 return b;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002134}
2135
2136#ifndef YY_EXIT_FAILURE
Jamie Madillb980c562018-11-27 11:34:27 -05002137# define YY_EXIT_FAILURE 2
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002138#endif
2139
Jamie Madillb980c562018-11-27 11:34:27 -05002140static void yynoreturn yy_fatal_error(const char *msg, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002141{
Jamie Madillb980c562018-11-27 11:34:27 -05002142 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2143 (void)yyg;
2144 fprintf(stderr, "%s\n", msg);
2145 exit(YY_EXIT_FAILURE);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002146}
2147
2148/* Redefine yyless() so it works in section 3 code. */
2149
2150#undef yyless
Jamie Madillb980c562018-11-27 11:34:27 -05002151#define yyless(n) \
2152 do \
2153 { \
2154 /* Undo effects of setting up yytext. */ \
2155 int yyless_macro_arg = (n); \
2156 YY_LESS_LINENO(yyless_macro_arg); \
2157 yytext[yyleng] = yyg->yy_hold_char; \
2158 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
2159 yyg->yy_hold_char = *yyg->yy_c_buf_p; \
2160 *yyg->yy_c_buf_p = '\0'; \
2161 yyleng = yyless_macro_arg; \
2162 } while (0)
Geoff Lang93561c32016-09-20 10:22:55 -04002163
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002164/* Accessor methods (get/set functions) to struct members. */
2165
2166/** Get the user-defined data for this scanner.
2167 * @param yyscanner The scanner object.
2168 */
Jamie Madillb980c562018-11-27 11:34:27 -05002169YY_EXTRA_TYPE yyget_extra(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002170{
Jamie Madillb980c562018-11-27 11:34:27 -05002171 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002172 return yyextra;
2173}
2174
2175/** Get the current line number.
2176 * @param yyscanner The scanner object.
2177 */
Jamie Madillb980c562018-11-27 11:34:27 -05002178int yyget_lineno(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002179{
Jamie Madillb980c562018-11-27 11:34:27 -05002180 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
Corentin Wallez168d5e82017-02-01 12:18:56 -08002181
Jamie Madillb980c562018-11-27 11:34:27 -05002182 if (!YY_CURRENT_BUFFER)
2183 return 0;
2184
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002185 return yylineno;
2186}
2187
2188/** Get the current column number.
2189 * @param yyscanner The scanner object.
2190 */
Jamie Madillb980c562018-11-27 11:34:27 -05002191int yyget_column(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002192{
Jamie Madillb980c562018-11-27 11:34:27 -05002193 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
Corentin Wallez168d5e82017-02-01 12:18:56 -08002194
Jamie Madillb980c562018-11-27 11:34:27 -05002195 if (!YY_CURRENT_BUFFER)
2196 return 0;
2197
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002198 return yycolumn;
2199}
2200
2201/** Get the input stream.
2202 * @param yyscanner The scanner object.
2203 */
Jamie Madillb980c562018-11-27 11:34:27 -05002204FILE *yyget_in(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002205{
Jamie Madillb980c562018-11-27 11:34:27 -05002206 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002207 return yyin;
2208}
2209
2210/** Get the output stream.
2211 * @param yyscanner The scanner object.
2212 */
Jamie Madillb980c562018-11-27 11:34:27 -05002213FILE *yyget_out(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002214{
Jamie Madillb980c562018-11-27 11:34:27 -05002215 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002216 return yyout;
2217}
2218
2219/** Get the length of the current token.
2220 * @param yyscanner The scanner object.
2221 */
Jamie Madillb980c562018-11-27 11:34:27 -05002222int yyget_leng(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002223{
Jamie Madillb980c562018-11-27 11:34:27 -05002224 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002225 return yyleng;
2226}
2227
2228/** Get the current token.
2229 * @param yyscanner The scanner object.
2230 */
2231
Jamie Madillb980c562018-11-27 11:34:27 -05002232char *yyget_text(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002233{
Jamie Madillb980c562018-11-27 11:34:27 -05002234 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002235 return yytext;
2236}
2237
2238/** Set the user-defined data. This data is never touched by the scanner.
2239 * @param user_defined The data to be associated with this scanner.
2240 * @param yyscanner The scanner object.
2241 */
Jamie Madillb980c562018-11-27 11:34:27 -05002242void yyset_extra(YY_EXTRA_TYPE user_defined, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002243{
Jamie Madillb980c562018-11-27 11:34:27 -05002244 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2245 yyextra = user_defined;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002246}
2247
2248/** Set the current line number.
Geoff Lang93561c32016-09-20 10:22:55 -04002249 * @param _line_number line number
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002250 * @param yyscanner The scanner object.
2251 */
Jamie Madillb980c562018-11-27 11:34:27 -05002252void yyset_lineno(int _line_number, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002253{
Jamie Madillb980c562018-11-27 11:34:27 -05002254 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002255
Jamie Madillb980c562018-11-27 11:34:27 -05002256 /* lineno is only valid if an input buffer exists. */
2257 if (!YY_CURRENT_BUFFER)
2258 YY_FATAL_ERROR("yyset_lineno called with no buffer");
2259
Geoff Lang93561c32016-09-20 10:22:55 -04002260 yylineno = _line_number;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002261}
2262
2263/** Set the current column.
Geoff Lang93561c32016-09-20 10:22:55 -04002264 * @param _column_no column number
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002265 * @param yyscanner The scanner object.
2266 */
Jamie Madillb980c562018-11-27 11:34:27 -05002267void yyset_column(int _column_no, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002268{
Jamie Madillb980c562018-11-27 11:34:27 -05002269 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002270
Jamie Madillb980c562018-11-27 11:34:27 -05002271 /* column is only valid if an input buffer exists. */
2272 if (!YY_CURRENT_BUFFER)
2273 YY_FATAL_ERROR("yyset_column called with no buffer");
2274
Geoff Lang93561c32016-09-20 10:22:55 -04002275 yycolumn = _column_no;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002276}
2277
2278/** Set the input stream. This does not discard the current
2279 * input buffer.
Geoff Lang93561c32016-09-20 10:22:55 -04002280 * @param _in_str A readable stream.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002281 * @param yyscanner The scanner object.
Corentin Wallez168d5e82017-02-01 12:18:56 -08002282 * @see yy_switch_to_buffer
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002283 */
Jamie Madillb980c562018-11-27 11:34:27 -05002284void yyset_in(FILE *_in_str, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002285{
Jamie Madillb980c562018-11-27 11:34:27 -05002286 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2287 yyin = _in_str;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002288}
2289
Jamie Madillb980c562018-11-27 11:34:27 -05002290void yyset_out(FILE *_out_str, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002291{
Jamie Madillb980c562018-11-27 11:34:27 -05002292 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2293 yyout = _out_str;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002294}
2295
Jamie Madillb980c562018-11-27 11:34:27 -05002296int yyget_debug(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002297{
Jamie Madillb980c562018-11-27 11:34:27 -05002298 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002299 return yy_flex_debug;
2300}
2301
Jamie Madillb980c562018-11-27 11:34:27 -05002302void yyset_debug(int _bdebug, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002303{
Jamie Madillb980c562018-11-27 11:34:27 -05002304 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2305 yy_flex_debug = _bdebug;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002306}
2307
2308/* Accessor methods for yylval and yylloc */
2309
Jamie Madillb980c562018-11-27 11:34:27 -05002310YYSTYPE *yyget_lval(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002311{
Jamie Madillb980c562018-11-27 11:34:27 -05002312 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002313 return yylval;
2314}
2315
Jamie Madillb980c562018-11-27 11:34:27 -05002316void yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002317{
Jamie Madillb980c562018-11-27 11:34:27 -05002318 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2319 yylval = yylval_param;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002320}
2321
Jamie Madillb980c562018-11-27 11:34:27 -05002322YYLTYPE *yyget_lloc(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002323{
Jamie Madillb980c562018-11-27 11:34:27 -05002324 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002325 return yylloc;
2326}
Geoff Lang93561c32016-09-20 10:22:55 -04002327
Jamie Madillb980c562018-11-27 11:34:27 -05002328void yyset_lloc(YYLTYPE *yylloc_param, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002329{
Jamie Madillb980c562018-11-27 11:34:27 -05002330 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2331 yylloc = yylloc_param;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002332}
Geoff Lang93561c32016-09-20 10:22:55 -04002333
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002334/* User-visible API */
2335
Corentin Wallez168d5e82017-02-01 12:18:56 -08002336/* yylex_init is special because it creates the scanner itself, so it is
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002337 * the ONLY reentrant function that doesn't take the scanner as the last argument.
2338 * That's why we explicitly handle the declaration, instead of using our macros.
2339 */
Jamie Madillb980c562018-11-27 11:34:27 -05002340int yylex_init(yyscan_t *ptr_yy_globals)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002341{
Jamie Madillb980c562018-11-27 11:34:27 -05002342 if (ptr_yy_globals == NULL)
2343 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002344 errno = EINVAL;
2345 return 1;
2346 }
2347
Jamie Madillb980c562018-11-27 11:34:27 -05002348 *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), NULL);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002349
Jamie Madillb980c562018-11-27 11:34:27 -05002350 if (*ptr_yy_globals == NULL)
2351 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002352 errno = ENOMEM;
2353 return 1;
2354 }
2355
2356 /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
Jamie Madillb980c562018-11-27 11:34:27 -05002357 memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t));
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002358
Jamie Madillb980c562018-11-27 11:34:27 -05002359 return yy_init_globals(*ptr_yy_globals);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002360}
2361
Corentin Wallez168d5e82017-02-01 12:18:56 -08002362/* yylex_init_extra has the same functionality as yylex_init, but follows the
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002363 * convention of taking the scanner as the last argument. Note however, that
2364 * this is a *pointer* to a scanner, as it will be allocated by this call (and
2365 * is the reason, too, why this function also must handle its own declaration).
Corentin Wallez168d5e82017-02-01 12:18:56 -08002366 * The user defined value in the first argument will be available to yyalloc in
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002367 * the yyextra field.
2368 */
Jamie Madillb980c562018-11-27 11:34:27 -05002369int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined, yyscan_t *ptr_yy_globals)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002370{
2371 struct yyguts_t dummy_yyguts;
2372
Jamie Madillb980c562018-11-27 11:34:27 -05002373 yyset_extra(yy_user_defined, &dummy_yyguts);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002374
Jamie Madillb980c562018-11-27 11:34:27 -05002375 if (ptr_yy_globals == NULL)
2376 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002377 errno = EINVAL;
2378 return 1;
2379 }
Corentin Wallez168d5e82017-02-01 12:18:56 -08002380
Jamie Madillb980c562018-11-27 11:34:27 -05002381 *ptr_yy_globals = (yyscan_t)yyalloc(sizeof(struct yyguts_t), &dummy_yyguts);
Corentin Wallez168d5e82017-02-01 12:18:56 -08002382
Jamie Madillb980c562018-11-27 11:34:27 -05002383 if (*ptr_yy_globals == NULL)
2384 {
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002385 errno = ENOMEM;
2386 return 1;
2387 }
Corentin Wallez168d5e82017-02-01 12:18:56 -08002388
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002389 /* By setting to 0xAA, we expose bugs in
2390 yy_init_globals. Leave at 0x00 for releases. */
Jamie Madillb980c562018-11-27 11:34:27 -05002391 memset(*ptr_yy_globals, 0x00, sizeof(struct yyguts_t));
Corentin Wallez168d5e82017-02-01 12:18:56 -08002392
Jamie Madillb980c562018-11-27 11:34:27 -05002393 yyset_extra(yy_user_defined, *ptr_yy_globals);
Corentin Wallez168d5e82017-02-01 12:18:56 -08002394
Jamie Madillb980c562018-11-27 11:34:27 -05002395 return yy_init_globals(*ptr_yy_globals);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002396}
2397
Jamie Madillb980c562018-11-27 11:34:27 -05002398static int yy_init_globals(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002399{
Jamie Madillb980c562018-11-27 11:34:27 -05002400 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002401 /* Initialization is the same as for the non-reentrant scanner.
Corentin Wallez168d5e82017-02-01 12:18:56 -08002402 * This function is called from yylex_destroy(), so don't allocate here.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002403 */
2404
Jamie Madillb980c562018-11-27 11:34:27 -05002405 yyg->yy_buffer_stack = NULL;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002406 yyg->yy_buffer_stack_top = 0;
2407 yyg->yy_buffer_stack_max = 0;
Jamie Madillb980c562018-11-27 11:34:27 -05002408 yyg->yy_c_buf_p = NULL;
2409 yyg->yy_init = 0;
2410 yyg->yy_start = 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002411
Jamie Madillb980c562018-11-27 11:34:27 -05002412 yyg->yy_start_stack_ptr = 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002413 yyg->yy_start_stack_depth = 0;
Jamie Madillb980c562018-11-27 11:34:27 -05002414 yyg->yy_start_stack = NULL;
Geoff Lang93561c32016-09-20 10:22:55 -04002415
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002416/* Defined in main.c */
2417#ifdef YY_STDINIT
Jamie Madillb980c562018-11-27 11:34:27 -05002418 yyin = stdin;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002419 yyout = stdout;
2420#else
Jamie Madillb980c562018-11-27 11:34:27 -05002421 yyin = NULL;
Luc Ferrone49f1e92018-01-24 14:47:55 -05002422 yyout = NULL;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002423#endif
2424
2425 /* For future reference: Set errno on error, since we are called by
Corentin Wallez168d5e82017-02-01 12:18:56 -08002426 * yylex_init()
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002427 */
2428 return 0;
2429}
2430
Corentin Wallez168d5e82017-02-01 12:18:56 -08002431/* yylex_destroy is for both reentrant and non-reentrant scanners. */
Jamie Madillb980c562018-11-27 11:34:27 -05002432int yylex_destroy(yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002433{
Jamie Madillb980c562018-11-27 11:34:27 -05002434 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002435
2436 /* Pop the buffer stack, destroying each element. */
Jamie Madillb980c562018-11-27 11:34:27 -05002437 while (YY_CURRENT_BUFFER)
2438 {
2439 yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner);
2440 YY_CURRENT_BUFFER_LVALUE = NULL;
2441 yypop_buffer_state(yyscanner);
2442 }
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002443
Jamie Madillb980c562018-11-27 11:34:27 -05002444 /* Destroy the stack itself. */
2445 yyfree(yyg->yy_buffer_stack, yyscanner);
2446 yyg->yy_buffer_stack = NULL;
Luc Ferrone49f1e92018-01-24 14:47:55 -05002447
2448 /* Destroy the start condition stack. */
Jamie Madillb980c562018-11-27 11:34:27 -05002449 yyfree(yyg->yy_start_stack, yyscanner);
2450 yyg->yy_start_stack = NULL;
Luc Ferrone49f1e92018-01-24 14:47:55 -05002451
2452 /* Reset the globals. This is important in a non-reentrant scanner so the next time
2453 * yylex() is called, initialization will occur. */
Jamie Madillb980c562018-11-27 11:34:27 -05002454 yy_init_globals(yyscanner);
Luc Ferrone49f1e92018-01-24 14:47:55 -05002455
2456 /* Destroy the main struct (reentrant only). */
Jamie Madillb980c562018-11-27 11:34:27 -05002457 yyfree(yyscanner, yyscanner);
Luc Ferrone49f1e92018-01-24 14:47:55 -05002458 yyscanner = NULL;
2459 return 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002460}
2461
2462/*
2463 * Internal utility routines.
2464 */
2465
2466#ifndef yytext_ptr
Jamie Madillb980c562018-11-27 11:34:27 -05002467static void yy_flex_strncpy(char *s1, const char *s2, int n, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002468{
Jamie Madillb980c562018-11-27 11:34:27 -05002469 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2470 (void)yyg;
Geoff Lang93561c32016-09-20 10:22:55 -04002471
Jamie Madillb980c562018-11-27 11:34:27 -05002472 int i;
2473 for (i = 0; i < n; ++i)
2474 s1[i] = s2[i];
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002475}
2476#endif
2477
2478#ifdef YY_NEED_STRLEN
Jamie Madillb980c562018-11-27 11:34:27 -05002479static int yy_flex_strlen(const char *s, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002480{
Jamie Madillb980c562018-11-27 11:34:27 -05002481 int n;
2482 for (n = 0; s[n]; ++n)
2483 ;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002484
Jamie Madillb980c562018-11-27 11:34:27 -05002485 return n;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002486}
2487#endif
2488
Jamie Madillb980c562018-11-27 11:34:27 -05002489void *yyalloc(yy_size_t size, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002490{
Jamie Madillb980c562018-11-27 11:34:27 -05002491 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2492 (void)yyg;
2493 return malloc(size);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002494}
2495
Jamie Madillb980c562018-11-27 11:34:27 -05002496void *yyrealloc(void *ptr, yy_size_t size, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002497{
Jamie Madillb980c562018-11-27 11:34:27 -05002498 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2499 (void)yyg;
Geoff Lang93561c32016-09-20 10:22:55 -04002500
Jamie Madillb980c562018-11-27 11:34:27 -05002501 /* The cast to (char *) in the following accommodates both
2502 * implementations that use char* generic pointers, and those
2503 * that use void* generic pointers. It works with the latter
2504 * because both ANSI C and C++ allow castless assignment from
2505 * any pointer type to void*, and deal with argument conversions
2506 * as though doing an assignment.
2507 */
2508 return realloc(ptr, size);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002509}
2510
Jamie Madillb980c562018-11-27 11:34:27 -05002511void yyfree(void *ptr, yyscan_t yyscanner)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002512{
Jamie Madillb980c562018-11-27 11:34:27 -05002513 struct yyguts_t *yyg = (struct yyguts_t *)yyscanner;
2514 (void)yyg;
2515 free((char *)ptr); /* see yyrealloc() for (char *) cast */
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002516}
2517
2518#define YYTABLES_NAME "yytables"
2519
Geoff Lang197d5292018-04-25 14:29:00 -04002520namespace angle
2521{
Geoff Lang93561c32016-09-20 10:22:55 -04002522
Jamie Madillb980c562018-11-27 11:34:27 -05002523namespace pp
2524{
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002525
Corentin Wallez054f7ed2016-09-20 17:15:59 -04002526Tokenizer::Tokenizer(Diagnostics *diagnostics) : mHandle(nullptr), mMaxTokenSize(256)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002527{
alokp@chromium.org2c958ee2012-05-17 20:35:42 +00002528 mContext.diagnostics = diagnostics;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002529}
2530
2531Tokenizer::~Tokenizer()
2532{
2533 destroyScanner();
2534}
2535
Jamie Madillb980c562018-11-27 11:34:27 -05002536bool Tokenizer::init(size_t count, const char *const string[], const int length[])
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002537{
Zhenyao Mod526f982014-05-13 14:51:19 -07002538 if ((count > 0) && (string == 0))
2539 return false;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002540
2541 mContext.input = Input(count, string, length);
2542 return initScanner();
2543}
2544
alokp@chromium.org46aa13d2012-06-15 15:40:27 +00002545void Tokenizer::setFileNumber(int file)
2546{
2547 // We use column number as file number.
2548 // See macro yyfileno.
Corentin Wallez168d5e82017-02-01 12:18:56 -08002549 yyset_column(file, mHandle);
alokp@chromium.org46aa13d2012-06-15 15:40:27 +00002550}
2551
2552void Tokenizer::setLineNumber(int line)
2553{
Corentin Wallez168d5e82017-02-01 12:18:56 -08002554 yyset_lineno(line, mHandle);
alokp@chromium.org46aa13d2012-06-15 15:40:27 +00002555}
2556
Jamie Madill5508f392014-02-20 13:31:36 -05002557void Tokenizer::setMaxTokenSize(size_t maxTokenSize)
2558{
2559 mMaxTokenSize = maxTokenSize;
2560}
2561
Zhenyao Mod526f982014-05-13 14:51:19 -07002562void Tokenizer::lex(Token *token)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002563{
Corentin Wallezdc0fa462017-02-01 14:44:43 -05002564 int tokenType = yylex(&token->text, &token->location, mHandle);
2565
2566 if (tokenType == Token::GOT_ERROR)
2567 {
2568 mContext.diagnostics->report(Diagnostics::PP_TOKENIZER_ERROR, token->location, token->text);
2569 token->type = Token::LAST;
2570 }
2571 else
2572 {
2573 token->type = tokenType;
2574 }
2575
Jamie Madill5508f392014-02-20 13:31:36 -05002576 if (token->text.size() > mMaxTokenSize)
alokp@chromium.orgc022c3a2012-07-09 15:56:42 +00002577 {
Jamie Madillb980c562018-11-27 11:34:27 -05002578 mContext.diagnostics->report(Diagnostics::PP_TOKEN_TOO_LONG, token->location, token->text);
Jamie Madill5508f392014-02-20 13:31:36 -05002579 token->text.erase(mMaxTokenSize);
alokp@chromium.orgc022c3a2012-07-09 15:56:42 +00002580 }
2581
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +00002582 token->flags = 0;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002583
alokp@chromium.org19d7aa62012-05-31 17:34:05 +00002584 token->setAtStartOfLine(mContext.lineStart);
2585 mContext.lineStart = token->type == '\n';
2586
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002587 token->setHasLeadingSpace(mContext.leadingSpace);
2588 mContext.leadingSpace = false;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002589}
2590
2591bool Tokenizer::initScanner()
2592{
Corentin Wallez168d5e82017-02-01 12:18:56 -08002593 if ((mHandle == nullptr) && yylex_init_extra(&mContext, &mHandle))
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002594 return false;
2595
Corentin Wallez168d5e82017-02-01 12:18:56 -08002596 yyrestart(0, mHandle);
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002597 return true;
2598}
2599
2600void Tokenizer::destroyScanner()
2601{
Corentin Wallez054f7ed2016-09-20 17:15:59 -04002602 if (mHandle == nullptr)
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002603 return;
2604
Corentin Wallez168d5e82017-02-01 12:18:56 -08002605 yylex_destroy(mHandle);
Corentin Wallez054f7ed2016-09-20 17:15:59 -04002606 mHandle = nullptr;
alokp@chromium.org04d7d222012-05-16 19:24:07 +00002607}
2608
2609} // namespace pp
2610
Geoff Lang197d5292018-04-25 14:29:00 -04002611} // namespace angle