26#include "wine/rbtree.h"
94#define X(n,a,b,c) {#n,b,c},
109 TRACE_(jscript_disas)(
"\t%d",
arg->uint);
113 TRACE_(jscript_disas)(
"\t%u",
arg->uint);
126 for(instr =
ctx->code->instrs+off; instr < ctx->
code->instrs+
ctx->code_off; instr++) {
134 TRACE_(jscript_disas)(
"\n");
152 scope =
ctx->local_scope_count++;
153 if (scope ==
ctx->local_scope_size)
158 ctx->local_scopes = new_alloc;
162 ctx->local_scopes[scope].locals_cnt = 0;
163 ctx->local_scopes[scope].ref_index = scope_index;
165 *scope_index = scope;
174 assert(scope_index < ctx->local_scope_count);
175 --
ctx->local_scope_count;
176 assert(scope_index == *
ctx->local_scopes[scope_index].ref_index);
177 *
ctx->local_scopes[scope_index].ref_index = 0;
178 memmove(&
ctx->local_scopes[scope_index], &
ctx->local_scopes[scope_index + 1],
179 sizeof(*
ctx->local_scopes) * (
ctx->local_scope_count - scope_index));
180 for (
i = scope_index;
i <
ctx->local_scope_count; ++
i)
181 --*
ctx->local_scopes[
i].ref_index;
193 if(!
ctx->code->str_pool_size) {
195 if(!
ctx->code->str_pool)
197 ctx->code->str_pool_size = 8;
198 }
else if(
ctx->code->str_pool_size ==
ctx->code->str_cnt) {
205 ctx->code->str_pool = new_pool;
206 ctx->code->str_pool_size *= 2;
213 ctx->code->str_pool[
ctx->code->str_cnt++] = new_str;
224 if(!
ctx->code->bstr_pool_size) {
226 if(!
ctx->code->bstr_pool)
228 ctx->code->bstr_pool_size = 8;
229 }
else if(
ctx->code->bstr_pool_size ==
ctx->code->bstr_cnt) {
232 new_pool =
realloc(
ctx->code->bstr_pool,
ctx->code->bstr_pool_size*2*
sizeof(
BSTR));
236 ctx->code->bstr_pool = new_pool;
237 ctx->code->bstr_pool_size *= 2;
249 if(!
ctx->code->bstr_pool[
ctx->code->bstr_cnt])
252 return ctx->code->bstr_pool[
ctx->code->bstr_cnt++];
261 if(!
ctx->code->bstr_pool[
ctx->code->bstr_cnt])
264 return ctx->code->bstr_pool[
ctx->code->bstr_cnt++];
276 if(
ctx->code_size ==
ctx->code_off) {
283 ctx->code->instrs = new_instrs;
287 ctx->code->instrs[
ctx->code_off].op =
op;
288 ctx->code->instrs[
ctx->code_off].loc =
ctx->loc;
289 return ctx->code_off++;
294 assert(off < ctx->code_off);
295 return ctx->code->instrs + off;
455#define LABEL_FLAG 0x80000000
459 if(!
ctx->labels_size) {
463 ctx->labels_size = 8;
464 }
else if(
ctx->labels_size ==
ctx->labels_cnt) {
465 unsigned *new_labels;
471 ctx->labels = new_labels;
472 ctx->labels_size *= 2;
494 for(iter =
ctx->stat_ctx; iter; iter = iter->
next) {
575 stat_ctx->
next =
ctx->stat_ctx;
576 ctx->stat_ctx = stat_ctx;
585 ctx->stat_ctx = stat_ctx->
next;
661 unsigned jmp_false, jmp_end;
723 unsigned arg_cnt = 0, extra_args = 0;
811 WARN(
"invalid delete, unimplemented exception message\n");
826 jsop_t assign_op = OP_throw_ref;
862 assign_op = OP_assign_call;
871 assign_op = OP_assign;
876 assign_op = OP_set_member;
880 if(assign_op == OP_throw_ref) {
921 switch(literal->
type) {
939 switch(literal->
type) {
955 unsigned array_instr;
960 for(iter =
expr->element_list; iter; iter = iter->
next) {
987 for(iter =
expr->property_list; iter; iter = iter->
next) {
1010 for(stat_ctx =
ctx->stat_ctx; stat_ctx; stat_ctx = stat_ctx->
next)
1015 ctx->current_function_expr->scope_index = stat_ctx ? stat_ctx->
scope_index : 0;
1016 ctx->current_function_expr =
ctx->current_function_expr->next;
1249 for(iter =
list; iter; iter = iter->
next) {
1254 FIXME(
"Constant variables are not supported.\n");
1311 if(
stat->else_stat) {
1347 jmp_off =
ctx->code_off;
1349 if(!
stat->do_while) {
1365 if(
stat->do_while) {
1392 if (
stat->scope_index)
1402 if(
stat->variable_list) {
1406 }
else if(
stat->begin_expr) {
1425 expr_off =
ctx->code_off;
1444 if(
stat->end_expr) {
1458 if (
stat->scope_index)
1473 if(
stat->variable) {
1491 if(
stat->variable) {
1535 for(iter =
ctx->stat_ctx; iter != stat_ctx; iter = iter->
next) {
1567 if(
stat->identifier) {
1573 for(iter =
ctx->stat_ctx; iter; iter = iter->
next) {
1581 WARN(
"Label not found\n");
1590 WARN(
"Label is not a loop\n");
1596 for(pop_ctx =
ctx->stat_ctx; pop_ctx; pop_ctx = pop_ctx->
next) {
1602 WARN(
"continue outside loop\n");
1620 if(
stat->identifier) {
1621 for(pop_ctx =
ctx->stat_ctx; pop_ctx; pop_ctx = pop_ctx->
next) {
1629 WARN(
"Label not found\n");
1633 for(pop_ctx =
ctx->stat_ctx; pop_ctx; pop_ctx = pop_ctx->
next) {
1639 WARN(
"Break outside loop\n");
1656 if(
ctx->from_eval) {
1657 WARN(
"misplaced return statement\n");
1705 for(iter =
ctx->stat_ctx; iter; iter = iter->next) {
1706 if(iter->labelled_stat && !
wcscmp(iter->labelled_stat->identifier,
stat->identifier)) {
1729 unsigned case_cnt = 0, *case_jmps,
i, default_jmp;
1743 for(iter =
stat->case_list; iter; iter = iter->
next) {
1748 case_jmps =
malloc(case_cnt *
sizeof(*case_jmps));
1753 for(iter =
stat->case_list; iter; iter = iter->
next) {
1755 have_default =
TRUE;
1787 for(iter =
stat->case_list; iter; iter = iter->
next) {
1795 for(stat_iter = iter->
stat; stat_iter && (!iter->
next || iter->
next->stat != stat_iter);
1796 stat_iter = stat_iter->
next) {
1837 unsigned push_except, finally_off = 0, catch_off = 0, pop_except, catch_pop_except = 0;
1845 if(
stat->catch_block) {
1861 if(
stat->catch_block) {
1864 if(
stat->finally_statement)
1867 catch_off =
ctx->code_off;
1880 if(
stat->finally_statement) {
1882 if(!catch_pop_except)
1887 if(
stat->finally_statement) {
1893 finally_off =
ctx->code_off;
1904 if(catch_pop_except)
1919 switch(
stat->type) {
1994 ctx->local_scopes[scope].locals_cnt++;
2016 expr->func_id =
ctx->func->func_cnt++;
2019 if(!
expr->identifier ||
expr->event_target)
2022 for (stat_ctx =
ctx->stat_ctx; stat_ctx; stat_ctx = stat_ctx->
next)
2173 for(iter =
list; iter; iter = iter->
next) {
2174 for (stat_ctx =
ctx->stat_ctx; stat_ctx; stat_ctx = stat_ctx->
next)
2231 switch(
stat->type) {
2241 if(expr_stat->
expr) {
2265 if (
var->block_scope)
2267 stat_ctx = &stat_ctx_data;
2293 if(for_stat->
expr) {
2326 if(forin_stat->
expr) {
2362 for(iter = switch_stat->
case_list; iter; iter = iter->
next) {
2370 for(iter = switch_stat->
case_list; iter; iter = iter->
next) {
2373 for(stat_iter = iter->
stat; stat_iter && (!iter->
next || iter->
next->stat != stat_iter);
2374 stat_iter = stat_iter->
next) {
2434 for(instr =
ctx->code->instrs+off; instr < ctx->
code->instrs+
ctx->code_off; instr++) {
2442 ctx->labels_cnt = 0;
2450 for(nl =
p =
code->source; p < code->
source + loc;
p++) {
2451 if(*
p !=
'\n')
continue;
2455 *char_pos = loc - (nl -
code->source);
2466 for(
i=0;
i <
code->bstr_cnt;
i++)
2468 for(
i=0;
i <
code->str_cnt;
i++)
2471 if(
code->named_item)
2522 unsigned off,
i, scope;
2529 func->scope_index = 0;
2531 ctx->from_eval = from_eval;
2533 ctx->local_scope_count = 0;
2549 if(!
func->event_target)
2556 for(param_iter = func_expr->
parameter_list; param_iter; param_iter = param_iter->
next)
2563 for(param_iter = func_expr->
parameter_list,
i=0; param_iter; param_iter = param_iter->
next,
i++) {
2565 if(!
func->params[
i])
2570 for(
i =
func->param_cnt;
i--;) {
2579 func->local_scope_count =
ctx->local_scope_count;
2581 if(!
func->local_scopes)
2585 if(!
func->variables)
2588 for (scope = 0; scope <
func->local_scope_count; ++scope)
2591 ctx->local_scopes[scope].locals_cnt *
sizeof(*
func->local_scopes[scope].locals));
2592 if(!
func->local_scopes[scope].locals)
2594 func->local_scopes[scope].locals_cnt =
ctx->local_scopes[scope].locals_cnt;
2599 func->local_scopes[scope].locals[
i].ref =
local->ref;
2600 if(
local->ref >= 0) {
2602 func->variables[
local->ref].func_id = -1;
2606 assert(
i ==
ctx->local_scopes[scope].locals_cnt);
2614 ctx->current_function_expr =
ctx->func_head;
2615 off =
ctx->code_off;
2629 func->instr_off = off;
2631 for(iter =
ctx->func_head,
i=0; iter; iter = iter->
next,
i++) {
2640 func->funcs[
i].name && !
func->funcs[
i].event_target) {
2643 func->funcs[
i].local_ref = local_ref->
ref;
2645 if(local_ref->
ref >= 0)
2646 func->variables[local_ref->
ref].func_id =
i;
2718 ctx->code->global_code.param_cnt *
sizeof(*
ctx->code->global_code.params));
2719 if(!
ctx->code->global_code.params)
2745 WARN(
"Decoding failed\n");
COMPILER_DEPENDENT_UINT64 UINT64
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define WINE_DECLARE_DEBUG_CHANNEL(x)
HRESULT throw_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
void release_named_item(named_item_t *item)
HRESULT script_parse(script_ctx_t *, struct _compiler_ctx_t *, struct _bytecode_t *, const WCHAR *, BOOL, parser_ctx_t **)
void parser_release(parser_ctx_t *)
#define IDS_COMPILATION_ERROR
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
local_ref_t * lookup_local(const function_code_t *function, const WCHAR *identifier, unsigned int scope)
static jsval_t stack_pop(script_ctx_t *ctx)
void set_error_location(jsexcept_t *, bytecode_t *, unsigned, unsigned, jsstr_t *)
#define INVALID_LOCAL_REF
GLuint GLuint GLsizei GLenum type
GLuint GLuint GLuint GLuint arg1
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
GLuint GLsizei GLsizei * length
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 const GLfloat const GLdouble const GLfloat GLint i
static HRESULT push_instr_bstr(compiler_ctx_t *ctx, jsop_t op, const WCHAR *arg)
static HRESULT compile_for_statement(compiler_ctx_t *ctx, for_statement_t *stat)
static HRESULT compile_forin_statement(compiler_ctx_t *ctx, forin_statement_t *stat)
static void dump_code(compiler_ctx_t *ctx, unsigned off)
static HRESULT compile_continue_statement(compiler_ctx_t *ctx, branch_statement_t *stat)
void release_bytecode(bytecode_t *code)
static HRESULT compile_arguments(compiler_ctx_t *ctx, const WCHAR *args)
static HRESULT emit_member_expression(compiler_ctx_t *ctx, expression_t *expr)
static HRESULT compile_comma_expression(compiler_ctx_t *ctx, binary_expression_t *expr, BOOL emit_ret)
static BSTR compiler_alloc_bstr(compiler_ctx_t *ctx, const WCHAR *str)
static BSTR compiler_alloc_bstr_len(compiler_ctx_t *ctx, const WCHAR *str, size_t len)
static HRESULT visit_statement(compiler_ctx_t *, statement_ctx_t *, statement_t *)
static HRESULT compile_expression(compiler_ctx_t *, expression_t *, BOOL)
static HRESULT compile_new_expression(compiler_ctx_t *ctx, call_expression_t *expr)
static HRESULT compile_return_statement(compiler_ctx_t *ctx, expression_statement_t *stat)
static HRESULT parse_arguments(compiler_ctx_t *ctx, const WCHAR *args, BSTR *arg_array, unsigned *args_size)
static HRESULT init_code(compiler_ctx_t *compiler, const WCHAR *source, UINT64 source_context, unsigned start_line)
static HRESULT push_instr_uint_str(compiler_ctx_t *ctx, jsop_t op, unsigned arg1, const WCHAR *arg2)
static BOOL ensure_bstr_slot(compiler_ctx_t *ctx)
static HRESULT compile_conditional_expression(compiler_ctx_t *ctx, conditional_expression_t *expr)
static HRESULT compile_while_statement(compiler_ctx_t *ctx, while_statement_t *stat)
static void * compiler_alloc(bytecode_t *code, size_t size)
static HRESULT compile_member_expression(compiler_ctx_t *ctx, member_expression_t *expr)
static BOOL alloc_variable(compiler_ctx_t *ctx, const WCHAR *name, unsigned int scope)
instr_arg_type_t arg2_type
static HRESULT compile_statement(compiler_ctx_t *, statement_ctx_t *, statement_t *)
static unsigned push_instr(compiler_ctx_t *ctx, jsop_t op)
static HRESULT compile_logical_expression(compiler_ctx_t *ctx, binary_expression_t *expr, jsop_t op)
static void resolve_labels(compiler_ctx_t *ctx, unsigned off)
static BOOL is_loop_statement(statement_type_t type)
static HRESULT literal_as_string(compiler_ctx_t *ctx, literal_t *literal, jsstr_t **str)
static HRESULT compile_function(compiler_ctx_t *ctx, statement_t *source, function_expression_t *func_expr, BOOL from_eval, function_code_t *func)
static unsigned alloc_label(compiler_ctx_t *ctx)
static void pop_compiler_statement_ctx(compiler_ctx_t *ctx, statement_ctx_t *stat_ctx)
static function_local_t * find_local(compiler_ctx_t *ctx, const WCHAR *name, unsigned int scope)
static HRESULT compile_binary_expression(compiler_ctx_t *ctx, binary_expression_t *expr, jsop_t op)
static HRESULT compile_labelled_statement(compiler_ctx_t *ctx, labelled_statement_t *stat)
static void dump_instr_arg(instr_arg_type_t type, instr_arg_t *arg)
instr_arg_type_t arg1_type
static BOOL alloc_local_scope(compiler_ctx_t *ctx, unsigned int *scope_index)
static HRESULT compile_typeof_expression(compiler_ctx_t *ctx, unary_expression_t *expr)
static HRESULT compile_throw_statement(compiler_ctx_t *ctx, expression_statement_t *stat)
static HRESULT compile_literal(compiler_ctx_t *ctx, literal_t *literal)
static HRESULT compile_variable_list(compiler_ctx_t *ctx, variable_declaration_t *list)
static BOOL bind_local(compiler_ctx_t *ctx, const WCHAR *identifier, int *ret_ref)
static HRESULT compile_if_statement(compiler_ctx_t *ctx, if_statement_t *stat)
static HRESULT visit_variable_list(compiler_ctx_t *ctx, variable_declaration_t *list)
static HRESULT compile_array_literal(compiler_ctx_t *ctx, array_literal_expression_t *expr)
static HRESULT pop_to_stat(compiler_ctx_t *ctx, statement_ctx_t *stat_ctx)
static HRESULT visit_function_expression(compiler_ctx_t *ctx, function_expression_t *expr)
static HRESULT push_instr_str_uint(compiler_ctx_t *ctx, jsop_t op, jsstr_t *str, unsigned arg2)
static HRESULT push_instr_double(compiler_ctx_t *ctx, jsop_t op, double arg)
static HRESULT compile_var_statement(compiler_ctx_t *ctx, var_statement_t *stat)
static HRESULT compile_expression_statement(compiler_ctx_t *ctx, expression_statement_t *stat)
static HRESULT compile_unary_expression(compiler_ctx_t *ctx, unary_expression_t *expr, jsop_t op)
static HRESULT compile_function_expression(compiler_ctx_t *ctx, function_expression_t *expr, BOOL emit_ret)
static jsstr_t * compiler_alloc_string(compiler_ctx_t *ctx, const WCHAR *str)
static BOOL is_memberid_expr(expression_type_t type)
static HRESULT compile_break_statement(compiler_ctx_t *ctx, branch_statement_t *stat)
static void remove_local_scope(compiler_ctx_t *ctx, unsigned int scope_index)
static HRESULT compile_assign_expression(compiler_ctx_t *ctx, binary_expression_t *expr, jsop_t op)
static HRESULT emit_identifier(compiler_ctx_t *ctx, const WCHAR *identifier)
static HRESULT compile_switch_statement(compiler_ctx_t *ctx, switch_statement_t *stat)
static HRESULT compile_increment_expression(compiler_ctx_t *ctx, unary_expression_t *expr, jsop_t op, int n)
jsstr_t * compiler_alloc_string_len(compiler_ctx_t *ctx, const WCHAR *str, unsigned len)
static void label_set_addr(compiler_ctx_t *ctx, unsigned label)
static void set_arg_uint(compiler_ctx_t *ctx, unsigned instr, unsigned arg)
static void push_compiler_statement_ctx(compiler_ctx_t *ctx, statement_ctx_t *stat_ctx)
static HRESULT push_instr_uint(compiler_ctx_t *ctx, jsop_t op, unsigned arg)
static HRESULT visit_expression(compiler_ctx_t *ctx, expression_t *expr)
HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, UINT64 source_context, unsigned start_line, const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, named_item_t *named_item, bytecode_t **ret)
static HRESULT visit_block_statement(compiler_ctx_t *ctx, block_statement_t *block, statement_t *iter)
static HRESULT push_instr_bstr_uint(compiler_ctx_t *ctx, jsop_t op, const WCHAR *arg1, unsigned arg2)
static instr_t * instr_ptr(compiler_ctx_t *ctx, unsigned off)
static int function_local_cmp(const void *key, const struct wine_rb_entry *entry)
static HRESULT compile_object_literal(compiler_ctx_t *ctx, property_value_expression_t *expr)
static HRESULT compile_call_expression(compiler_ctx_t *ctx, call_expression_t *expr, BOOL emit_ret)
void set_compiler_loc(compiler_ctx_t *ctx, unsigned loc)
static HRESULT emit_identifier_ref(compiler_ctx_t *ctx, const WCHAR *identifier, unsigned flags)
struct _statement_ctx_t statement_ctx_t
static HRESULT compile_memberid_expression(compiler_ctx_t *ctx, expression_t *expr, unsigned flags)
static HRESULT push_instr_int(compiler_ctx_t *ctx, jsop_t op, LONG arg)
static BOOL alloc_local(compiler_ctx_t *ctx, BSTR name, int ref, unsigned int scope)
unsigned get_location_line(bytecode_t *code, unsigned loc, unsigned *char_pos)
static HRESULT compile_try_statement(compiler_ctx_t *ctx, try_statement_t *stat)
static HRESULT push_instr_str(compiler_ctx_t *ctx, jsop_t op, jsstr_t *str)
static HRESULT compile_with_statement(compiler_ctx_t *ctx, with_statement_t *stat)
static HRESULT compile_block_statement(compiler_ctx_t *ctx, block_statement_t *block, statement_t *iter)
static HRESULT compile_delete_expression(compiler_ctx_t *ctx, unary_expression_t *expr)
struct _compiler_ctx_t compiler_ctx_t
HRESULT decode_source(WCHAR *code)
#define JS_E_ILLEGAL_ASSIGN
#define JS_E_INVALID_BREAK
#define JS_E_MISPLACED_RETURN
#define JS_E_LABEL_REDEFINED
#define JS_E_LABEL_NOT_FOUND
#define JS_E_INVALID_CONTINUE
void heap_pool_init(heap_pool_t *)
#define SCRIPTLANGUAGEVERSION_ES5
HRESULT double_to_string(double, jsstr_t **)
void * heap_pool_alloc(heap_pool_t *, DWORD) __WINE_ALLOC_SIZE(2)
void heap_pool_free(heap_pool_t *)
#define JS_E_INVALID_DELETE
jsstr_t * jsstr_alloc_len(const WCHAR *buf, unsigned len)
const char * debugstr_jsstr(jsstr_t *str)
static void jsstr_release(jsstr_t *str)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static const WCHAR label[]
#define DEFAULT_UNREACHABLE
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define WINE_RB_ENTRY_VALUE
#define WINE_RB_FOR_EACH_ENTRY
struct _array_element_t * next
named_item_t * named_item
function_code_t global_code
struct _case_clausule_t * next
function_expression_t * func_head
function_expression_t * func_tail
unsigned local_scope_size
function_expression_t * current_function_expr
struct _compiler_ctx_t::@429 * local_scopes
struct wine_rb_tree locals
unsigned local_scope_count
statement_ctx_t * stat_ctx
const WCHAR * event_target
parameter_t * parameter_list
struct _function_expression_t * next
statement_t * statement_list
struct _parameter_t * next
struct _property_definition_t * next
const labelled_statement_t * labelled_stat
struct _statement_ctx_t * next
struct _variable_declaration_t * next
array_element_t * element_list
expression_t * expression1
expression_t * expression2
expression_t * expression
argument_t * argument_list
expression_t * true_expression
expression_t * expression
expression_t * false_expression
expression_t * begin_expr
variable_declaration_t * variable_list
variable_declaration_t * variable
struct literal_t::@444::@445 regexp
expression_t * expression
case_clausule_t * case_list
catch_block_t * catch_block
statement_t * try_statement
statement_t * finally_statement
static unsigned arg_cnt(const DISPPARAMS *dp)
_In_ ULONG _In_ ULONG_PTR ident
static unsigned int block