denyhosts/clamscan/libclamav/jsparse/lexglobal.h

149 lines
3.5 KiB
C
Raw Normal View History

2022-10-22 18:41:00 +08:00
/*
* Javascript normalizer.
*
* Copyright (C) 2013-2022 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
* Copyright (C) 2008-2013 Sourcefire, Inc.
*
* Authors: Török Edvin
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#ifndef YYSTYPE
enum token_type {
TOK_FUTURE_RESERVED_WORD = 1,
TOK_ERROR,
TOK_IDENTIFIER_NAME,
TOK_TRUE,
TOK_FALSE,
TOK_NULL,
TOK_BRACKET_OPEN,
TOK_BRACKET_CLOSE,
TOK_COMMA,
TOK_CURLY_BRACE_OPEN,
TOK_CURLY_BRACE_CLOSE,
TOK_PAR_OPEN,
TOK_PAR_CLOSE,
TOK_DOT,
TOK_SEMICOLON,
TOK_COLON,
TOK_NEW,
TOK_NumericInt,
TOK_NumericFloat,
TOK_StringLiteral,
TOK_REGULAR_EXPRESSION_LITERAL,
TOK_THIS,
TOK_PLUSPLUS,
TOK_MINUSMINUS,
TOK_DELETE,
TOK_VOID,
TOK_TYPEOF,
TOK_MINUS,
TOK_TILDE,
TOK_EXCLAMATION,
TOK_MULTIPLY,
TOK_DIVIDE,
TOK_PERCENT,
TOK_PLUS,
TOK_SHIFT_LEFT,
TOK_SHIFT_RIGHT,
TOK_DOUBLESHIFT_RIGHT,
TOK_LESS,
TOK_GREATER,
TOK_LESSEQUAL,
TOK_GREATEREQUAL,
TOK_INSTANCEOF,
TOK_IN,
TOK_EQUAL_EQUAL,
TOK_NOT_EQUAL,
TOK_TRIPLE_EQUAL,
TOK_NOT_DOUBLEEQUAL,
TOK_AND,
TOK_XOR,
TOK_OR,
TOK_AND_AND,
TOK_OR_OR,
TOK_QUESTIONMARK,
TOK_EQUAL,
TOK_ASSIGNMENT_OPERATOR_NOEQUAL,
TOK_VAR,
TOK_IF,
TOK_ELSE,
TOK_DO,
TOK_WHILE,
TOK_FOR,
TOK_CONTINUE,
TOK_BREAK,
TOK_RETURN,
TOK_WITH,
TOK_SWITCH,
TOK_CASE,
TOK_DEFAULT,
TOK_THROW,
TOK_TRY,
TOK_CATCH,
TOK_FINALLY,
TOK_FUNCTION,
TOK_UNNORM_IDENTIFIER
};
enum val_type {
vtype_undefined,
vtype_cstring,
vtype_string,
vtype_scope,
vtype_dval,
vtype_ival
};
typedef struct token {
union {
const char *cstring;
char *string;
struct scope *scope; /* for function */
double dval;
long ival;
} val;
enum token_type type;
enum val_type vtype;
} yystype;
/* inline functions to access the structure to ensure type safety */
#define TOKEN_SET(DST, VTYPE, VAL) \
do { \
(DST)->vtype = vtype_##VTYPE; \
(DST)->val.VTYPE = (VAL); \
} while (0);
#define cstring_invalid NULL
#define string_invalid NULL
#define scope_invalid NULL
/* there isn't really an invalid double, or long value, but we don't care
* about those values anyway, so -1 will be fine here */
#define dval_invalid -1
#define ival_invalid -1
/* compatible if same type, or if we request a const char* instead of char*,
* but not viceversa! */
static int vtype_compatible(enum val_type orig, enum val_type req)
{
return orig == req || (orig == vtype_string && req == vtype_cstring);
}
#define TOKEN_GET(SRC, VTYPE) (vtype_compatible((SRC)->vtype, vtype_##VTYPE) ? (SRC)->val.VTYPE : VTYPE##_invalid)
#define YYSTYPE yystype
#endif