ReactOS 0.4.17-dev-357-ga8f14ff
parser.h
Go to the documentation of this file.
1/*
2 * Copyright 2014 Jacek Caban for CodeWeavers
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#pragma once
20
23
24struct _bytecode_t;
25
26typedef struct {
28 union {
30 double n;
31 } u;
32} ccval_t;
33
34typedef struct _parser_ctx_t {
35 const WCHAR *begin;
36 const WCHAR *end;
37 const WCHAR *ptr;
38
47 unsigned error_loc;
48
50 unsigned cc_if_depth;
51
54
57
58int parser_lex(void*,unsigned*,parser_ctx_t*);
59
60static inline void *parser_alloc(parser_ctx_t *ctx, DWORD size)
61{
62 return heap_pool_alloc(&ctx->heap, size);
63}
64
66{
67 return heap_pool_alloc(&ctx->script->tmp_heap, size);
68}
69
70int hex_to_int(WCHAR);
72BOOL unescape(WCHAR*,size_t*);
73HRESULT parse_decimal(const WCHAR**,const WCHAR*,double*);
74
75typedef enum {
82
83typedef struct {
85 union {
86 double dval;
89 struct {
90 jsstr_t *str;
92 } regexp;
93 } u;
94} literal_t;
95
98
103
105 struct _variable_declaration_t *global_next; /* for compiler */
107
108typedef enum {
126
130 unsigned loc;
131};
132
133typedef struct {
135 unsigned int scope_index;
138
139typedef struct {
143
144typedef struct {
148
149typedef struct {
155
156typedef struct {
162
163typedef struct {
168 unsigned expr_loc;
170 unsigned end_loc;
172 unsigned int scope_index;
174
175typedef struct {
182
183typedef struct {
187
188typedef struct {
193
194typedef struct {
199
200typedef struct _case_clausule_t {
202 unsigned loc;
204
207
208typedef struct {
213
214typedef struct {
218
219typedef struct {
224 unsigned finally_loc;
226
227typedef enum {
287
290};
291
292typedef struct _parameter_t {
296
305 unsigned func_id;
307 unsigned int scope_index;
308
309 struct _function_expression_t *next; /* for compiler */
311
312typedef struct {
317
318typedef struct {
322
323typedef struct {
329
330typedef struct {
335
336typedef struct _argument_t {
338
341
342typedef struct {
347
348typedef struct {
352
353typedef struct {
357
358typedef struct _array_element_t {
361
364
365typedef struct {
370
372 unsigned type;
375
378
379typedef struct {
383
386
387static inline ccval_t ccval_num(double n)
388{
389 ccval_t r;
390 r.is_num = TRUE;
391 r.u.n = n;
392 return r;
393}
394
395static inline ccval_t ccval_bool(BOOL b)
396{
397 ccval_t r;
398 r.is_num = FALSE;
399 r.u.b = b;
400 return r;
401}
402
403static inline BOOL get_ccbool(ccval_t v)
404{
405 return v.is_num ? v.u.n != 0 : v.u.b;
406}
407
408static inline double get_ccnum(ccval_t v)
409{
410 return v.is_num ? v.u.n : v.u.b;
411}
412
413jsstr_t *compiler_alloc_string_len(struct _compiler_ctx_t*,const WCHAR *,unsigned);
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
literal_t * parse_regexp(parser_ctx_t *)
Definition: lex.c:1115
static void * parser_alloc(parser_ctx_t *ctx, DWORD size)
Definition: parser.h:60
expression_type_t
Definition: parser.h:227
@ EXPR_MEMBER
Definition: parser.h:277
@ EXPR_PREDEC
Definition: parser.h:249
@ EXPR_RSHIFT
Definition: parser.h:261
@ EXPR_LESS
Definition: parser.h:254
@ EXPR_ASSIGNADD
Definition: parser.h:267
@ EXPR_GREATER
Definition: parser.h:256
@ EXPR_THIS
Definition: parser.h:280
@ EXPR_BOR
Definition: parser.h:231
@ EXPR_LITERAL
Definition: parser.h:285
@ EXPR_EQEQ
Definition: parser.h:251
@ EXPR_ASSIGNRRSHIFT
Definition: parser.h:266
@ EXPR_ASSIGNDIV
Definition: parser.h:270
@ EXPR_ARRAY
Definition: parser.h:276
@ EXPR_ASSIGNMUL
Definition: parser.h:269
@ EXPR_BXOR
Definition: parser.h:232
@ EXPR_ASSIGNMOD
Definition: parser.h:271
@ EXPR_MOD
Definition: parser.h:240
@ EXPR_FUNC
Definition: parser.h:281
@ EXPR_BAND
Definition: parser.h:233
@ EXPR_VOID
Definition: parser.h:242
@ EXPR_NEW
Definition: parser.h:278
@ EXPR_POSTDEC
Definition: parser.h:247
@ EXPR_ASSIGNOR
Definition: parser.h:273
@ EXPR_GREATEREQ
Definition: parser.h:257
@ EXPR_ASSIGNLSHIFT
Definition: parser.h:264
@ EXPR_CALL
Definition: parser.h:279
@ EXPR_LSHIFT
Definition: parser.h:260
@ EXPR_LOGNEG
Definition: parser.h:259
@ EXPR_PROPVAL
Definition: parser.h:284
@ EXPR_DELETE
Definition: parser.h:241
@ EXPR_ARRAYLIT
Definition: parser.h:283
@ EXPR_DIV
Definition: parser.h:239
@ EXPR_ADD
Definition: parser.h:236
@ EXPR_ASSIGN
Definition: parser.h:263
@ EXPR_TYPEOF
Definition: parser.h:243
@ EXPR_IDENT
Definition: parser.h:282
@ EXPR_IN
Definition: parser.h:235
@ EXPR_INSTANCEOF
Definition: parser.h:234
@ EXPR_PLUS
Definition: parser.h:245
@ EXPR_MUL
Definition: parser.h:238
@ EXPR_BITNEG
Definition: parser.h:258
@ EXPR_COND
Definition: parser.h:275
@ EXPR_PREINC
Definition: parser.h:248
@ EXPR_OR
Definition: parser.h:229
@ EXPR_NOTEQ
Definition: parser.h:252
@ EXPR_NOTEQEQ
Definition: parser.h:253
@ EXPR_POSTINC
Definition: parser.h:246
@ EXPR_ASSIGNAND
Definition: parser.h:272
@ EXPR_RRSHIFT
Definition: parser.h:262
@ EXPR_ASSIGNSUB
Definition: parser.h:268
@ EXPR_SUB
Definition: parser.h:237
@ EXPR_EQ
Definition: parser.h:250
@ EXPR_ASSIGNRSHIFT
Definition: parser.h:265
@ EXPR_LESSEQ
Definition: parser.h:255
@ EXPR_MINUS
Definition: parser.h:244
@ EXPR_COMMA
Definition: parser.h:228
@ EXPR_ASSIGNXOR
Definition: parser.h:274
@ EXPR_AND
Definition: parser.h:230
BOOL unescape(WCHAR *, size_t *)
Definition: lex.c:227
BOOL try_parse_ccval(parser_ctx_t *, ccval_t *)
Definition: lex.c:907
static ccval_t ccval_bool(BOOL b)
Definition: parser.h:395
HRESULT script_parse(script_ctx_t *, struct _compiler_ctx_t *, struct _bytecode_t *, const WCHAR *, BOOL, parser_ctx_t **)
static double get_ccnum(ccval_t v)
Definition: parser.h:408
literal_type_t
Definition: parser.h:75
@ LT_BOOL
Definition: parser.h:78
@ LT_STRING
Definition: parser.h:77
@ LT_NULL
Definition: parser.h:79
@ LT_REGEXP
Definition: parser.h:80
@ LT_DOUBLE
Definition: parser.h:76
HRESULT parse_decimal(const WCHAR **, const WCHAR *, double *)
Definition: lex.c:397
literal_t * new_boolean_literal(parser_ctx_t *, BOOL)
Definition: lex.c:387
struct _parameter_t parameter_t
void parser_release(parser_ctx_t *)
BOOL parse_cc_expr(parser_ctx_t *)
BOOL is_identifier_char(WCHAR)
Definition: lex.c:83
struct _parser_ctx_t parser_ctx_t
int hex_to_int(WCHAR)
Definition: lex.c:120
struct _function_expression_t function_expression_t
statement_type_t
Definition: parser.h:108
@ STAT_CONTINUE
Definition: parser.h:111
@ STAT_FOR
Definition: parser.h:114
@ STAT_EMPTY
Definition: parser.h:112
@ STAT_THROW
Definition: parser.h:120
@ STAT_SWITCH
Definition: parser.h:119
@ STAT_VAR
Definition: parser.h:122
@ STAT_EXPR
Definition: parser.h:113
@ STAT_TRY
Definition: parser.h:121
@ STAT_RETURN
Definition: parser.h:118
@ STAT_BLOCK
Definition: parser.h:109
@ STAT_WITH
Definition: parser.h:124
@ STAT_IF
Definition: parser.h:116
@ STAT_FORIN
Definition: parser.h:115
@ STAT_BREAK
Definition: parser.h:110
@ STAT_LABEL
Definition: parser.h:117
@ STAT_WHILE
Definition: parser.h:123
static ccval_t ccval_num(double n)
Definition: parser.h:387
struct _array_element_t array_element_t
static void * parser_alloc_tmp(parser_ctx_t *ctx, DWORD size)
Definition: parser.h:65
jsstr_t * compiler_alloc_string_len(struct _compiler_ctx_t *, const WCHAR *, unsigned)
Definition: compile.c:189
struct _variable_declaration_t variable_declaration_t
struct _property_definition_t property_definition_t
struct _case_clausule_t case_clausule_t
struct _argument_t argument_t
int parser_lex(void *, unsigned *, parser_ctx_t *)
Definition: lex.c:1102
static BOOL get_ccbool(ccval_t v)
Definition: parser.h:403
expression_type_t
Definition: parse.h:21
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
const GLdouble * v
Definition: gl.h:2040
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLdouble n
Definition: glext.h:7729
GLsizeiptr size
Definition: glext.h:5919
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
void * heap_pool_alloc(heap_pool_t *, DWORD) __WINE_ALLOC_SIZE(2)
Definition: jsutils.c:72
#define b
Definition: ke_i.h:79
short WCHAR
Definition: pedump.c:58
const WCHAR * str
expression_t * expr
Definition: parser.h:337
struct _argument_t * next
Definition: parser.h:339
expression_t * expr
Definition: parser.h:360
struct _array_element_t * next
Definition: parser.h:362
struct _case_clausule_t * next
Definition: parser.h:205
statement_t * stat
Definition: parser.h:203
expression_t * expr
Definition: parser.h:201
unsigned loc
Definition: parser.h:202
expression_type_t type
Definition: parser.h:289
const WCHAR * event_target
Definition: parser.h:300
unsigned int scope_index
Definition: parser.h:307
parameter_t * parameter_list
Definition: parser.h:301
expression_t expr
Definition: parser.h:298
const WCHAR * src_str
Definition: parser.h:303
struct _function_expression_t * next
Definition: parser.h:309
statement_t * statement_list
Definition: parser.h:302
const WCHAR * identifier
Definition: parser.h:299
Definition: jsstr.h:36
struct _parameter_t * next
Definition: parser.h:294
const WCHAR * identifier
Definition: parser.h:293
heap_pool_t heap
Definition: parser.h:52
ccval_t ccval
Definition: parser.h:49
script_ctx_t * script
Definition: parser.h:39
statement_t * source
Definition: parser.h:41
const WCHAR * ptr
Definition: parser.h:37
BOOL is_html
Definition: parser.h:44
unsigned error_loc
Definition: parser.h:47
BOOL nl
Definition: parser.h:42
BOOL implicit_nl_semicolon
Definition: parser.h:43
unsigned cc_if_depth
Definition: parser.h:50
HRESULT hres
Definition: parser.h:46
struct _compiler_ctx_t * compiler
Definition: parser.h:40
BOOL lexer_error
Definition: parser.h:45
const WCHAR * begin
Definition: parser.h:35
const WCHAR * end
Definition: parser.h:36
struct _property_definition_t * next
Definition: parser.h:376
literal_t * name
Definition: parser.h:373
expression_t * value
Definition: parser.h:374
statement_type_t type
Definition: parser.h:128
statement_t * next
Definition: parser.h:129
unsigned loc
Definition: parser.h:130
const WCHAR * identifier
Definition: parser.h:100
struct _variable_declaration_t * global_next
Definition: parser.h:105
expression_t * expr
Definition: parser.h:102
struct _variable_declaration_t * next
Definition: parser.h:104
array_element_t * element_list
Definition: parser.h:367
expression_t expr
Definition: parser.h:313
expression_t * expression1
Definition: parser.h:314
expression_t * expression2
Definition: parser.h:315
statement_t stat
Definition: parser.h:134
statement_t * stat_list
Definition: parser.h:136
unsigned int scope_index
Definition: parser.h:135
statement_t stat
Definition: parser.h:184
const WCHAR * identifier
Definition: parser.h:185
expression_t * expression
Definition: parser.h:344
expression_t expr
Definition: parser.h:343
argument_t * argument_list
Definition: parser.h:345
statement_t * statement
Definition: parser.h:216
const WCHAR * identifier
Definition: parser.h:215
Definition: parser.h:26
double n
Definition: parser.h:30
BOOL b
Definition: parser.h:29
BOOL is_num
Definition: parser.h:27
expression_t * true_expression
Definition: parser.h:326
expression_t * expression
Definition: parser.h:325
expression_t expr
Definition: parser.h:324
expression_t * false_expression
Definition: parser.h:327
expression_t * expr
Definition: parser.h:146
statement_t stat
Definition: parser.h:145
statement_t stat
Definition: parser.h:164
expression_t * expr
Definition: parser.h:167
statement_t * statement
Definition: parser.h:171
unsigned expr_loc
Definition: parser.h:168
expression_t * end_expr
Definition: parser.h:169
unsigned int scope_index
Definition: parser.h:172
unsigned end_loc
Definition: parser.h:170
expression_t * begin_expr
Definition: parser.h:166
variable_declaration_t * variable_list
Definition: parser.h:165
variable_declaration_t * variable
Definition: parser.h:177
statement_t stat
Definition: parser.h:176
statement_t * statement
Definition: parser.h:180
expression_t * in_expr
Definition: parser.h:179
expression_t * expr
Definition: parser.h:178
expression_t expr
Definition: parser.h:349
const WCHAR * identifier
Definition: parser.h:350
statement_t stat
Definition: parser.h:150
statement_t * if_stat
Definition: parser.h:152
expression_t * expr
Definition: parser.h:151
statement_t * else_stat
Definition: parser.h:153
const WCHAR * identifier
Definition: parser.h:196
statement_t * statement
Definition: parser.h:197
statement_t stat
Definition: parser.h:195
literal_t * literal
Definition: parser.h:355
expression_t expr
Definition: parser.h:354
DWORD flags
Definition: parser.h:91
BOOL bval
Definition: parser.h:88
double dval
Definition: parser.h:86
literal_type_t type
Definition: parser.h:84
jsstr_t * str
Definition: parser.h:87
const WCHAR * identifier
Definition: parser.h:333
expression_t expr
Definition: parser.h:331
expression_t * expression
Definition: parser.h:332
property_definition_t * property_list
Definition: parser.h:381
expression_t * expr
Definition: parser.h:210
case_clausule_t * case_list
Definition: parser.h:211
statement_t stat
Definition: parser.h:209
statement_t stat
Definition: parser.h:220
unsigned finally_loc
Definition: parser.h:224
catch_block_t * catch_block
Definition: parser.h:222
statement_t * try_statement
Definition: parser.h:221
statement_t * finally_statement
Definition: parser.h:223
expression_t * expression
Definition: parser.h:320
expression_t expr
Definition: parser.h:319
variable_declaration_t * variable_list
Definition: parser.h:141
statement_t stat
Definition: parser.h:140
expression_t * expr
Definition: parser.h:159
statement_t stat
Definition: parser.h:157
statement_t * statement
Definition: parser.h:160
statement_t stat
Definition: parser.h:189
statement_t * statement
Definition: parser.h:191
expression_t * expr
Definition: parser.h:190