wined3d: Get rid of the WINED3DADAPTER_IDENTIFIER typedef.
[wine] / dlls / jscript / engine.h
1 /*
2  * Copyright 2008 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 typedef struct _source_elements_t source_elements_t;
20 typedef struct _function_expression_t function_expression_t;
21 typedef struct _expression_t expression_t;
22
23 typedef struct _function_declaration_t {
24     function_expression_t *expr;
25
26     struct _function_declaration_t *next;
27 } function_declaration_t;
28
29 typedef struct _var_list_t {
30     const WCHAR *identifier;
31
32     struct _var_list_t *next;
33 } var_list_t;
34
35 typedef struct _func_stack {
36     function_declaration_t *func_head;
37     function_declaration_t *func_tail;
38     var_list_t *var_head;
39     var_list_t *var_tail;
40
41     struct _func_stack *next;
42 } func_stack_t;
43
44 #define OP_LIST                                   \
45     X(add, 1, 0)                                  \
46     X(bool, 1, 0)                                 \
47     X(bneg, 1, 0)                                 \
48     X(double, 1, 0)                               \
49     X(eq2, 1, 0)                                  \
50     X(in, 1, 0)                                   \
51     X(int, 1, ARG_INT)                            \
52     X(neg, 1, 0)                                  \
53     X(neq2, 1, 0)                                 \
54     X(str, 1, 0)                                  \
55     X(tonum, 1, 0)                                \
56     X(tree, 1, ARG_EXPR)                          \
57     X(ret, 0, 0)
58
59 typedef enum {
60 #define X(x,a,b) OP_##x,
61 OP_LIST
62 #undef X
63     OP_LAST
64 } jsop_t;
65
66 typedef union {
67     expression_t *expr;
68     double *dbl;
69     LONG lng;
70     WCHAR *str;
71 } instr_arg_t;
72
73 typedef enum {
74     ARG_NONE = 0,
75     ARG_EXPR,
76     ARG_INT
77 } instr_arg_type_t;
78
79 typedef struct {
80     jsop_t op;
81     instr_arg_t arg1;
82 } instr_t;
83
84 typedef struct {
85     instr_t *instrs;
86     jsheap_t heap;
87 } bytecode_t;
88
89 void release_bytecode(bytecode_t*);
90
91 typedef struct _compiler_ctx_t compiler_ctx_t;
92
93 void release_compiler(compiler_ctx_t*);
94
95 typedef struct _parser_ctx_t {
96     LONG ref;
97
98     WCHAR *begin;
99     const WCHAR *end;
100     const WCHAR *ptr;
101
102     script_ctx_t *script;
103     source_elements_t *source;
104     BOOL nl;
105     BOOL is_html;
106     BOOL lexer_error;
107     HRESULT hres;
108
109     jsheap_t heap;
110
111     func_stack_t *func_stack;
112
113     bytecode_t *code;
114     compiler_ctx_t *compiler;
115
116     struct _parser_ctx_t *next;
117 } parser_ctx_t;
118
119 HRESULT script_parse(script_ctx_t*,const WCHAR*,const WCHAR*,parser_ctx_t**) DECLSPEC_HIDDEN;
120 void parser_release(parser_ctx_t*) DECLSPEC_HIDDEN;
121
122 int parser_lex(void*,parser_ctx_t*) DECLSPEC_HIDDEN;
123
124 static inline void parser_addref(parser_ctx_t *ctx)
125 {
126     ctx->ref++;
127 }
128
129 static inline void *parser_alloc(parser_ctx_t *ctx, DWORD size)
130 {
131     return jsheap_alloc(&ctx->heap, size);
132 }
133
134 static inline void *parser_alloc_tmp(parser_ctx_t *ctx, DWORD size)
135 {
136     return jsheap_alloc(&ctx->script->tmp_heap, size);
137 }
138
139 typedef struct _scope_chain_t {
140     LONG ref;
141     jsdisp_t *obj;
142     struct _scope_chain_t *next;
143 } scope_chain_t;
144
145 HRESULT scope_push(scope_chain_t*,jsdisp_t*,scope_chain_t**) DECLSPEC_HIDDEN;
146 void scope_release(scope_chain_t*) DECLSPEC_HIDDEN;
147
148 static inline void scope_addref(scope_chain_t *scope)
149 {
150     scope->ref++;
151 }
152
153 struct _exec_ctx_t {
154     LONG ref;
155
156     parser_ctx_t *parser;
157     scope_chain_t *scope_chain;
158     jsdisp_t *var_disp;
159     IDispatch *this_obj;
160     BOOL is_global;
161
162     VARIANT *stack;
163     unsigned stack_size;
164     unsigned top;
165
166     unsigned ip;
167     jsexcept_t ei;
168 };
169
170 static inline void exec_addref(exec_ctx_t *ctx)
171 {
172     ctx->ref++;
173 }
174
175 void exec_release(exec_ctx_t*) DECLSPEC_HIDDEN;
176 HRESULT create_exec_ctx(script_ctx_t*,IDispatch*,jsdisp_t*,scope_chain_t*,BOOL,exec_ctx_t**) DECLSPEC_HIDDEN;
177 HRESULT exec_source(exec_ctx_t*,parser_ctx_t*,source_elements_t*,BOOL,jsexcept_t*,VARIANT*) DECLSPEC_HIDDEN;
178
179 typedef struct _statement_t statement_t;
180 typedef struct _parameter_t parameter_t;
181
182 HRESULT create_source_function(parser_ctx_t*,parameter_t*,source_elements_t*,scope_chain_t*,
183         const WCHAR*,DWORD,jsdisp_t**) DECLSPEC_HIDDEN;
184
185 typedef enum {
186     LT_INT,
187     LT_DOUBLE,
188     LT_STRING,
189     LT_BOOL,
190     LT_NULL,
191     LT_REGEXP
192 }literal_type_t;
193
194 typedef struct {
195     literal_type_t type;
196     union {
197         LONG lval;
198         double dval;
199         const WCHAR *wstr;
200         VARIANT_BOOL bval;
201         IDispatch *disp;
202         struct {
203             const WCHAR *str;
204             DWORD str_len;
205             DWORD flags;
206         } regexp;
207     } u;
208 } literal_t;
209
210 literal_t *parse_regexp(parser_ctx_t*) DECLSPEC_HIDDEN;
211 literal_t *new_boolean_literal(parser_ctx_t*,VARIANT_BOOL) DECLSPEC_HIDDEN;
212
213 typedef struct _variable_declaration_t {
214     const WCHAR *identifier;
215     expression_t *expr;
216
217     struct _variable_declaration_t *next;
218 } variable_declaration_t;
219
220 typedef struct _return_type_t return_type_t;
221
222 typedef HRESULT (*statement_eval_t)(script_ctx_t*,statement_t*,return_type_t*,VARIANT*);
223
224 struct _statement_t {
225     statement_eval_t eval;
226     statement_t *next;
227 };
228
229 typedef struct {
230     statement_t stat;
231     statement_t *stat_list;
232 } block_statement_t;
233
234 typedef struct {
235     statement_t stat;
236     variable_declaration_t *variable_list;
237 } var_statement_t;
238
239 typedef struct {
240     statement_t stat;
241     expression_t *expr;
242 } expression_statement_t;
243
244 typedef struct {
245     statement_t stat;
246     expression_t *expr;
247     statement_t *if_stat;
248     statement_t *else_stat;
249 } if_statement_t;
250
251 typedef struct {
252     statement_t stat;
253     BOOL do_while;
254     expression_t *expr;
255     statement_t *statement;
256 } while_statement_t;
257
258 typedef struct {
259     statement_t stat;
260     variable_declaration_t *variable_list;
261     expression_t *begin_expr;
262     expression_t *expr;
263     expression_t *end_expr;
264     statement_t *statement;
265 } for_statement_t;
266
267 typedef struct {
268     statement_t stat;
269     variable_declaration_t *variable;
270     expression_t *expr;
271     expression_t *in_expr;
272     statement_t *statement;
273 } forin_statement_t;
274
275 typedef struct {
276     statement_t stat;
277     const WCHAR *identifier;
278 } branch_statement_t;
279
280 typedef struct {
281     statement_t stat;
282     expression_t *expr;
283     statement_t *statement;
284 } with_statement_t;
285
286 typedef struct {
287     statement_t stat;
288     const WCHAR *identifier;
289     statement_t *statement;
290 } labelled_statement_t;
291
292 typedef struct _case_clausule_t {
293     expression_t *expr;
294     statement_t *stat;
295
296     struct _case_clausule_t *next;
297 } case_clausule_t;
298
299 typedef struct {
300     statement_t stat;
301     expression_t *expr;
302     case_clausule_t *case_list;
303 } switch_statement_t;
304
305 typedef struct {
306     const WCHAR *identifier;
307     statement_t *statement;
308 } catch_block_t;
309
310 typedef struct {
311     statement_t stat;
312     statement_t *try_statement;
313     catch_block_t *catch_block;
314     statement_t *finally_statement;
315 } try_statement_t;
316
317 HRESULT block_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
318 HRESULT var_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
319 HRESULT empty_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
320 HRESULT expression_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
321 HRESULT if_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
322 HRESULT while_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
323 HRESULT for_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
324 HRESULT forin_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
325 HRESULT continue_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
326 HRESULT break_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
327 HRESULT return_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
328 HRESULT with_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
329 HRESULT labelled_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
330 HRESULT switch_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
331 HRESULT throw_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
332 HRESULT try_statement_eval(script_ctx_t*,statement_t*,return_type_t*,VARIANT*) DECLSPEC_HIDDEN;
333
334 typedef struct {
335     enum {
336         EXPRVAL_VARIANT,
337         EXPRVAL_IDREF,
338         EXPRVAL_NAMEREF,
339         EXPRVAL_INVALID
340     } type;
341     union {
342         VARIANT var;
343         struct {
344             IDispatch *disp;
345             DISPID id;
346         } idref;
347         struct {
348             IDispatch *disp;
349             BSTR name;
350         } nameref;
351         BSTR identifier;
352     } u;
353 } exprval_t;
354
355 typedef enum {
356      EXPR_COMMA,
357      EXPR_OR,
358      EXPR_AND,
359      EXPR_BOR,
360      EXPR_BXOR,
361      EXPR_BAND,
362      EXPR_INSTANCEOF,
363      EXPR_IN,
364      EXPR_ADD,
365      EXPR_SUB,
366      EXPR_MUL,
367      EXPR_DIV,
368      EXPR_MOD,
369      EXPR_DELETE,
370      EXPR_VOID,
371      EXPR_TYPEOF,
372      EXPR_MINUS,
373      EXPR_PLUS,
374      EXPR_POSTINC,
375      EXPR_POSTDEC,
376      EXPR_PREINC,
377      EXPR_PREDEC,
378      EXPR_EQ,
379      EXPR_EQEQ,
380      EXPR_NOTEQ,
381      EXPR_NOTEQEQ,
382      EXPR_LESS,
383      EXPR_LESSEQ,
384      EXPR_GREATER,
385      EXPR_GREATEREQ,
386      EXPR_BITNEG,
387      EXPR_LOGNEG,
388      EXPR_LSHIFT,
389      EXPR_RSHIFT,
390      EXPR_RRSHIFT,
391      EXPR_ASSIGN,
392      EXPR_ASSIGNLSHIFT,
393      EXPR_ASSIGNRSHIFT,
394      EXPR_ASSIGNRRSHIFT,
395      EXPR_ASSIGNADD,
396      EXPR_ASSIGNSUB,
397      EXPR_ASSIGNMUL,
398      EXPR_ASSIGNDIV,
399      EXPR_ASSIGNMOD,
400      EXPR_ASSIGNAND,
401      EXPR_ASSIGNOR,
402      EXPR_ASSIGNXOR,
403      EXPR_COND,
404      EXPR_ARRAY,
405      EXPR_MEMBER,
406      EXPR_NEW,
407      EXPR_CALL,
408      EXPR_THIS,
409      EXPR_FUNC,
410      EXPR_IDENT,
411      EXPR_ARRAYLIT,
412      EXPR_PROPVAL,
413      EXPR_LITERAL
414 } expression_type_t;
415
416 typedef HRESULT (*expression_eval_t)(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*);
417
418 struct _expression_t {
419     expression_type_t type;
420     expression_eval_t eval;
421     unsigned instr_off;
422 };
423
424 struct _parameter_t {
425     const WCHAR *identifier;
426
427     struct _parameter_t *next;
428 };
429
430 struct _source_elements_t {
431     statement_t *statement;
432     statement_t *statement_tail;
433     function_declaration_t *functions;
434     var_list_t *variables;
435 };
436
437 struct _function_expression_t {
438     expression_t expr;
439     const WCHAR *identifier;
440     parameter_t *parameter_list;
441     source_elements_t *source_elements;
442     const WCHAR *src_str;
443     DWORD src_len;
444 };
445
446 typedef struct {
447     expression_t expr;
448     expression_t *expression1;
449     expression_t *expression2;
450 } binary_expression_t;
451
452 typedef struct {
453     expression_t expr;
454     expression_t *expression;
455 } unary_expression_t;
456
457 typedef struct {
458     expression_t expr;
459     expression_t *expression;
460     expression_t *true_expression;
461     expression_t *false_expression;
462 } conditional_expression_t;
463
464 typedef struct {
465     expression_t expr;
466     expression_t *member_expr;
467     expression_t *expression;
468 } array_expression_t;
469
470 typedef struct {
471     expression_t expr;
472     expression_t *expression;
473     const WCHAR *identifier;
474 } member_expression_t;
475
476 typedef struct _argument_t {
477     expression_t *expr;
478
479     struct _argument_t *next;
480 } argument_t;
481
482 typedef struct {
483     expression_t expr;
484     expression_t *expression;
485     argument_t *argument_list;
486 } call_expression_t;
487
488 typedef struct {
489     expression_t expr;
490     const WCHAR *identifier;
491 } identifier_expression_t;
492
493 typedef struct {
494     expression_t expr;
495     literal_t *literal;
496 } literal_expression_t;
497
498 typedef struct _array_element_t {
499     int elision;
500     expression_t *expr;
501
502     struct _array_element_t *next;
503 } array_element_t;
504
505 typedef struct {
506     expression_t expr;
507     array_element_t *element_list;
508     int length;
509 } array_literal_expression_t;
510
511 typedef struct _prop_val_t {
512     literal_t *name;
513     expression_t *value;
514
515     struct _prop_val_t *next;
516 } prop_val_t;
517
518 typedef struct {
519     expression_t expr;
520     prop_val_t *property_list;
521 } property_value_expression_t;
522
523 HRESULT function_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
524 HRESULT conditional_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
525 HRESULT array_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
526 HRESULT member_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
527 HRESULT new_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
528 HRESULT call_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
529 HRESULT this_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
530 HRESULT identifier_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
531 HRESULT literal_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
532 HRESULT array_literal_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
533 HRESULT property_value_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
534
535 HRESULT comma_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
536 HRESULT logical_or_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
537 HRESULT logical_and_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
538 HRESULT binary_or_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
539 HRESULT binary_xor_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
540 HRESULT binary_and_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
541 HRESULT instanceof_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
542 HRESULT sub_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
543 HRESULT mul_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
544 HRESULT div_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
545 HRESULT mod_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
546 HRESULT delete_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
547 HRESULT void_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
548 HRESULT typeof_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
549 HRESULT minus_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
550 HRESULT post_increment_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
551 HRESULT post_decrement_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
552 HRESULT pre_increment_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
553 HRESULT pre_decrement_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
554 HRESULT equal_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
555 HRESULT not_equal_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
556 HRESULT less_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
557 HRESULT lesseq_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
558 HRESULT greater_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
559 HRESULT greatereq_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
560 HRESULT left_shift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
561 HRESULT right_shift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
562 HRESULT right2_shift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
563 HRESULT assign_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
564 HRESULT assign_lshift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
565 HRESULT assign_rshift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
566 HRESULT assign_rrshift_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
567 HRESULT assign_add_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
568 HRESULT assign_sub_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
569 HRESULT assign_mul_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
570 HRESULT assign_div_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
571 HRESULT assign_mod_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
572 HRESULT assign_and_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
573 HRESULT assign_or_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
574 HRESULT assign_xor_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
575
576 HRESULT compiled_expression_eval(script_ctx_t*,expression_t*,DWORD,jsexcept_t*,exprval_t*) DECLSPEC_HIDDEN;
577
578 HRESULT compile_subscript(parser_ctx_t*,expression_t*,unsigned*) DECLSPEC_HIDDEN;