ReactOS  0.4.14-dev-604-gcfdd483
jscript.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008-2009 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 
21 #include <stdarg.h>
22 #include <stdio.h>
23 #include <stdint.h>
24 
25 #define COBJMACROS
26 
27 #include "windef.h"
28 #include "winbase.h"
29 #include "winuser.h"
30 #ifdef __REACTOS__
31 #include "winnls.h"
32 #endif
33 #include "ole2.h"
34 #include "dispex.h"
35 #include "activscp.h"
36 
37 #include "resource.h"
38 
39 #include "wine/heap.h"
40 #include "wine/list.h"
41 
42 /*
43  * This is Wine jscript extension for ES5 compatible mode. Native IE9+ implements
44  * a separated JavaScript enging in side MSHTML. We implement its features here
45  * and enable it when HTML flag is specified in SCRIPTPROP_INVOKEVERSIONING property.
46  */
47 #define SCRIPTLANGUAGEVERSION_HTML 0x400
48 
49 /*
50  * This is Wine jscript extension for ES5 compatible mode. Allowed only in HTML mode.
51  */
52 #define SCRIPTLANGUAGEVERSION_ES5 0x102
53 
54 typedef struct _jsval_t jsval_t;
55 typedef struct _jsstr_t jsstr_t;
56 typedef struct _script_ctx_t script_ctx_t;
59 
60 typedef struct {
61  void **blocks;
66  struct list custom_blocks;
67 } heap_pool_t;
68 
75 
77 {
78  LPWSTR ret = NULL;
79 
80  if(str) {
81  DWORD size;
82 
83  size = (lstrlenW(str)+1)*sizeof(WCHAR);
84  ret = heap_alloc(size);
85  if(ret)
86  memcpy(ret, str, size);
87  }
88 
89  return ret;
90 }
91 
92 typedef struct jsdisp_t jsdisp_t;
93 
95 
96 #define PROPF_ARGMASK 0x00ff
97 #define PROPF_METHOD 0x0100
98 #define PROPF_CONSTR 0x0200
99 
100 #define PROPF_ENUMERABLE 0x0400
101 #define PROPF_WRITABLE 0x0800
102 #define PROPF_CONFIGURABLE 0x1000
103 #define PROPF_ALL (PROPF_ENUMERABLE | PROPF_WRITABLE | PROPF_CONFIGURABLE)
104 
105 #define PROPF_VERSION_MASK 0x01ff0000
106 #define PROPF_VERSION_SHIFT 16
107 #define PROPF_HTML (SCRIPTLANGUAGEVERSION_HTML << PROPF_VERSION_SHIFT)
108 #define PROPF_ES5 ((SCRIPTLANGUAGEVERSION_HTML|SCRIPTLANGUAGEVERSION_ES5) << PROPF_VERSION_SHIFT)
109 
110 /*
111  * This is our internal dispatch flag informing calee that it's called directly from interpreter.
112  * If calee is executed as interpreted function, we may let already running interpreter to take
113  * of execution.
114  */
115 #define DISPATCH_JSCRIPT_CALLEREXECSSOURCE 0x8000
116 #define DISPATCH_JSCRIPT_INTERNAL_MASK DISPATCH_JSCRIPT_CALLEREXECSSOURCE
117 
118 /* NOTE: Keep in sync with names in Object.toString implementation */
119 typedef enum {
136 } jsclass_t;
137 
139 
140 typedef struct {
141  union {
143  IDispatchEx *dispex;
145  } u;
147 } vdisp_t;
148 
149 #define VDISP_DISPEX 0x0001
150 #define VDISP_JSDISP 0x0002
151 
152 static inline void vdisp_release(vdisp_t *vdisp)
153 {
154  IDispatch_Release(vdisp->u.disp);
155 }
156 
157 static inline BOOL is_jsdisp(vdisp_t *vdisp)
158 {
159  return (vdisp->flags & VDISP_JSDISP) != 0;
160 }
161 
162 static inline BOOL is_dispex(vdisp_t *vdisp)
163 {
164  return (vdisp->flags & VDISP_DISPEX) != 0;
165 }
166 
167 static inline void set_jsdisp(vdisp_t *vdisp, jsdisp_t *jsdisp)
168 {
169  vdisp->u.jsdisp = jsdisp;
170  vdisp->flags = VDISP_JSDISP | VDISP_DISPEX;
171  IDispatch_AddRef(vdisp->u.disp);
172 }
173 
174 static inline void set_disp(vdisp_t *vdisp, IDispatch *disp)
175 {
176  IDispatchEx *dispex;
177  jsdisp_t *jsdisp;
178  HRESULT hres;
179 
180  jsdisp = iface_to_jsdisp(disp);
181  if(jsdisp) {
182  vdisp->u.jsdisp = jsdisp;
183  vdisp->flags = VDISP_JSDISP | VDISP_DISPEX;
184  return;
185  }
186 
187  hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
188  if(SUCCEEDED(hres)) {
189  vdisp->u.dispex = dispex;
190  vdisp->flags = VDISP_DISPEX;
191  return;
192  }
193 
194  IDispatch_AddRef(disp);
195  vdisp->u.disp = disp;
196  vdisp->flags = 0;
197 }
198 
199 static inline jsdisp_t *get_jsdisp(vdisp_t *vdisp)
200 {
201  return is_jsdisp(vdisp) ? vdisp->u.jsdisp : NULL;
202 }
203 
207 
209 
210 typedef struct {
211  const WCHAR *name;
217 
218 typedef struct {
219  jsclass_t class;
223  void (*destructor)(jsdisp_t*);
224  void (*on_put)(jsdisp_t*,const WCHAR*);
225  unsigned (*idx_length)(jsdisp_t*);
229 
230 struct jsdisp_t {
231  IDispatchEx IDispatchEx_iface;
232 
234 
239 
241 
243 };
244 
245 static inline IDispatch *to_disp(jsdisp_t *jsdisp)
246 {
247  return (IDispatch*)&jsdisp->IDispatchEx_iface;
248 }
249 
253 
254 #ifndef TRACE_REFCNT
255 
256 /*
257  * We do a lot of refcount calls during script execution, so having an inline
258  * version is a nice perf win. Define TRACE_REFCNT macro when debugging
259  * refcount bugs to have traces. Also, since jsdisp_t is not thread safe anyways,
260  * there is no point in using atomic operations.
261  */
262 static inline jsdisp_t *jsdisp_addref(jsdisp_t *jsdisp)
263 {
264  jsdisp->ref++;
265  return jsdisp;
266 }
267 
268 static inline void jsdisp_release(jsdisp_t *jsdisp)
269 {
270  if(!--jsdisp->ref)
271  jsdisp_free(jsdisp);
272 }
273 
274 #else
275 
278 
279 #endif
280 
284 
306 
312 
315 #define DEFAULT_FUNCTION_VALUE {NULL, Function_value,0, Function_get_value}
316 
325 
336 
337 typedef enum {
341 } hint_t;
342 
352 
354 
356 
358 
361 
362 typedef struct named_item_t {
366 
368 } named_item_t;
369 
370 typedef struct _cc_var_t cc_var_t;
371 
372 typedef struct {
374 } cc_ctx_t;
375 
377 
378 typedef struct {
380 
382 
384 } JSCaller;
385 
386 #include "jsval.h"
387 
389  unsigned flags;
390  unsigned mask;
397 };
398 
399 typedef struct {
402 } jsexcept_t;
403 
404 typedef struct {
405  unsigned index;
406  unsigned length;
408 
411 
414 
426 
428 
430 
432  unsigned stack_size;
433  unsigned stack_top;
435 
440 
460 };
461 
464 
465 static inline void script_addref(script_ctx_t *ctx)
466 {
467  ctx->ref++;
468 }
469 
473 
485 
488 
489 #define REM_CHECK_GLOBAL 0x0001
490 #define REM_RESET_INDEX 0x0002
491 #define REM_NO_CTX_UPDATE 0x0004
492 #define REM_ALLOC_RESULT 0x0008
493 #define REM_NO_PARENS 0x0010
494 struct match_state_t;
498 
501 
503 
504 static inline BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
505 {
506  return jsdisp->builtin_info->class == class;
507 }
508 
509 static inline BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
510 {
511  return is_jsdisp(vdisp) && is_class(vdisp->u.jsdisp, class);
512 }
513 
514 static inline BOOL is_int32(double d)
515 {
516  return INT32_MIN <= d && d <= INT32_MAX && (double)(int)d == d;
517 }
518 
520 {
521  return ((ctx->version & 0xff) << 28) | flags;
522 }
523 
524 #define FACILITY_JSCRIPT 10
525 
526 #define MAKE_JSERROR(code) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_JSCRIPT, code)
527 
528 #define JS_E_TO_PRIMITIVE MAKE_JSERROR(IDS_TO_PRIMITIVE)
529 #define JS_E_INVALIDARG MAKE_JSERROR(IDS_INVALID_CALL_ARG)
530 #define JS_E_SUBSCRIPT_OUT_OF_RANGE MAKE_JSERROR(IDS_SUBSCRIPT_OUT_OF_RANGE)
531 #define JS_E_OBJECT_REQUIRED MAKE_JSERROR(IDS_OBJECT_REQUIRED)
532 #define JS_E_CANNOT_CREATE_OBJ MAKE_JSERROR(IDS_CREATE_OBJ_ERROR)
533 #define JS_E_INVALID_PROPERTY MAKE_JSERROR(IDS_NO_PROPERTY)
534 #define JS_E_INVALID_ACTION MAKE_JSERROR(IDS_UNSUPPORTED_ACTION)
535 #define JS_E_MISSING_ARG MAKE_JSERROR(IDS_ARG_NOT_OPT)
536 #define JS_E_SYNTAX MAKE_JSERROR(IDS_SYNTAX_ERROR)
537 #define JS_E_MISSING_SEMICOLON MAKE_JSERROR(IDS_SEMICOLON)
538 #define JS_E_MISSING_LBRACKET MAKE_JSERROR(IDS_LBRACKET)
539 #define JS_E_MISSING_RBRACKET MAKE_JSERROR(IDS_RBRACKET)
540 #define JS_E_EXPECTED_IDENTIFIER MAKE_JSERROR(IDS_EXPECTED_IDENTIFIER)
541 #define JS_E_EXPECTED_ASSIGN MAKE_JSERROR(IDS_EXPECTED_ASSIGN)
542 #define JS_E_INVALID_CHAR MAKE_JSERROR(IDS_INVALID_CHAR)
543 #define JS_E_UNTERMINATED_STRING MAKE_JSERROR(IDS_UNTERMINATED_STR)
544 #define JS_E_MISPLACED_RETURN MAKE_JSERROR(IDS_MISPLACED_RETURN)
545 #define JS_E_INVALID_BREAK MAKE_JSERROR(IDS_INVALID_BREAK)
546 #define JS_E_INVALID_CONTINUE MAKE_JSERROR(IDS_INVALID_CONTINUE)
547 #define JS_E_LABEL_REDEFINED MAKE_JSERROR(IDS_LABEL_REDEFINED)
548 #define JS_E_LABEL_NOT_FOUND MAKE_JSERROR(IDS_LABEL_NOT_FOUND)
549 #define JS_E_EXPECTED_CCEND MAKE_JSERROR(IDS_EXPECTED_CCEND)
550 #define JS_E_DISABLED_CC MAKE_JSERROR(IDS_DISABLED_CC)
551 #define JS_E_EXPECTED_AT MAKE_JSERROR(IDS_EXPECTED_AT)
552 #define JS_E_FUNCTION_EXPECTED MAKE_JSERROR(IDS_NOT_FUNC)
553 #define JS_E_DATE_EXPECTED MAKE_JSERROR(IDS_NOT_DATE)
554 #define JS_E_NUMBER_EXPECTED MAKE_JSERROR(IDS_NOT_NUM)
555 #define JS_E_OBJECT_EXPECTED MAKE_JSERROR(IDS_OBJECT_EXPECTED)
556 #define JS_E_ILLEGAL_ASSIGN MAKE_JSERROR(IDS_ILLEGAL_ASSIGN)
557 #define JS_E_UNDEFINED_VARIABLE MAKE_JSERROR(IDS_UNDEFINED)
558 #define JS_E_BOOLEAN_EXPECTED MAKE_JSERROR(IDS_NOT_BOOL)
559 #define JS_E_VBARRAY_EXPECTED MAKE_JSERROR(IDS_NOT_VBARRAY)
560 #define JS_E_INVALID_DELETE MAKE_JSERROR(IDS_INVALID_DELETE)
561 #define JS_E_JSCRIPT_EXPECTED MAKE_JSERROR(IDS_JSCRIPT_EXPECTED)
562 #define JS_E_ENUMERATOR_EXPECTED MAKE_JSERROR(IDS_NOT_ENUMERATOR)
563 #define JS_E_REGEXP_SYNTAX MAKE_JSERROR(IDS_REGEXP_SYNTAX_ERROR)
564 #define JS_E_INVALID_URI_CODING MAKE_JSERROR(IDS_URI_INVALID_CODING)
565 #define JS_E_INVALID_URI_CHAR MAKE_JSERROR(IDS_URI_INVALID_CHAR)
566 #define JS_E_FRACTION_DIGITS_OUT_OF_RANGE MAKE_JSERROR(IDS_FRACTION_DIGITS_OUT_OF_RANGE)
567 #define JS_E_PRECISION_OUT_OF_RANGE MAKE_JSERROR(IDS_PRECISION_OUT_OF_RANGE)
568 #define JS_E_INVALID_LENGTH MAKE_JSERROR(IDS_INVALID_LENGTH)
569 #define JS_E_ARRAY_EXPECTED MAKE_JSERROR(IDS_ARRAY_EXPECTED)
570 #define JS_E_NONCONFIGURABLE_REDEFINED MAKE_JSERROR(IDS_NONCONFIGURABLE_REDEFINED)
571 #define JS_E_NONWRITABLE_MODIFIED MAKE_JSERROR(IDS_NONWRITABLE_MODIFIED)
572 #define JS_E_PROP_DESC_MISMATCH MAKE_JSERROR(IDS_PROP_DESC_MISMATCH)
573 #define JS_E_INVALID_WRITABLE_PROP_DESC MAKE_JSERROR(IDS_INVALID_WRITABLE_PROP_DESC)
574 
576 {
578 }
579 
580 const char *debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN;
581 
583 
585 
586 static inline void lock_module(void)
587 {
589 }
590 
591 static inline void unlock_module(void)
592 {
594 }
HRESULT jsdisp_next_prop(jsdisp_t *, DISPID, BOOL, DISPID *) DECLSPEC_HIDDEN
Definition: dispex.c:1546
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
HRESULT to_uint32(script_ctx_t *, jsval_t, UINT32 *) DECLSPEC_HIDDEN
Definition: jsutils.c:686
#define INT32_MIN
Definition: macro.lex.yy.c:66
Definition: jsval.h:54
HRESULT parse_regexp_flags(const WCHAR *, DWORD, DWORD *) DECLSPEC_HIDDEN
Definition: jsregexp.c:1022
jsdisp_t * bool_constr
Definition: jscript.h:444
disp
Definition: i386-dis.c:3181
#define HRESULT
Definition: msvc.h:7
script_ctx_t * ctx
Definition: jscript.h:238
jsdisp_t * vbarray_constr
Definition: jscript.h:459
HRESULT create_object_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:718
HRESULT disp_delete_name(script_ctx_t *, IDispatch *, jsstr_t *, BOOL *) DECLSPEC_HIDDEN
Definition: dispex.c:1574
jsstr_t * last_match
Definition: jscript.h:436
jsdisp_t * reference_error_constr
Definition: jscript.h:450
#define REFIID
Definition: guiddef.h:118
HRESULT disp_call(script_ctx_t *, IDispatch *, DISPID, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1136
jsdisp_t * enumerator_constr
Definition: jscript.h:446
HRESULT create_builtin_function(script_ctx_t *, builtin_invoke_t, const WCHAR *, const builtin_info_t *, DWORD, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: function.c:651
DWORD props_cnt
Definition: jscript.h:221
const WCHAR * name
Definition: jscript.h:211
jsdisp_t * array_constr
Definition: jscript.h:443
jsdisp_t * iface_to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:1060
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
static void set_disp(vdisp_t *vdisp, IDispatch *disp)
Definition: jscript.h:174
static void vdisp_release(vdisp_t *vdisp)
Definition: jscript.h:152
static void lock_module(void)
Definition: jscript.h:586
jsdisp_t * to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:914
jsdisp_t * type_error_constr
Definition: jscript.h:453
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
HRESULT to_integer(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:648
Definition: jsstr.h:39
HRESULT Function_invoke(jsdisp_t *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:264
jsdisp_t * range_error_constr
Definition: jscript.h:449
HRESULT throw_syntax_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:435
BOOL bool_obj_value(jsdisp_t *) DECLSPEC_HIDDEN
Definition: bool.c:52
void * heap_pool_alloc(heap_pool_t *, DWORD) __WINE_ALLOC_SIZE(2) DECLSPEC_HIDDEN
Definition: jsutils.c:77
#define __WINE_ALLOC_SIZE(x)
Definition: winnt_old.h:84
HRESULT create_jscaller(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:1047
void clear_ei(script_ctx_t *) DECLSPEC_HIDDEN
Definition: engine.c:430
HRESULT jsdisp_propput_idx(jsdisp_t *, DWORD, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1349
HRESULT init_dispex(jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:919
builtin_getter_t getter
Definition: jscript.h:214
HRESULT jsdisp_propput_name(jsdisp_t *, const WCHAR *, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1344
unsigned flags
Definition: jscript.h:389
const builtin_info_t * builtin_info
Definition: jscript.h:242
HRESULT create_string(script_ctx_t *, jsstr_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1787
HRESULT create_number_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: number.c:613
jsdisp_t * string_constr
Definition: jscript.h:458
HRESULT create_enumerator_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: enumerator.c:332
DWORD flags
Definition: jscript.h:146
struct _call_frame_t * call_ctx
Definition: jscript.h:415
HRESULT(* builtin_setter_t)(script_ctx_t *, jsdisp_t *, jsval_t)
Definition: jscript.h:206
unsigned array_get_length(jsdisp_t *) DECLSPEC_HIDDEN
Definition: array.c:73
DWORD LCID
Definition: nls.h:13
struct named_item_t * next
Definition: jscript.h:367
LONG module_ref
Definition: ieframe_main.c:31
HRESULT double_to_string(double, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:727
jsdisp_t * getter
Definition: jscript.h:394
cc_ctx_t * cc
Definition: jscript.h:423
HRESULT throw_range_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:420
#define lstrlenW
Definition: compat.h:415
LONG ref
Definition: jscript.h:233
int32_t INT
Definition: typedefs.h:56
HRESULT create_bool(script_ctx_t *, BOOL, jsdisp_t **) DECLSPEC_HIDDEN
Definition: bool.c:216
IDispatch * host_global
Definition: jscript.h:429
unsigned index
Definition: jscript.h:405
HRESULT throw_reference_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:425
HRESULT throw_generic_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:415
HRESULT jsdisp_define_property(jsdisp_t *, const WCHAR *, property_desc_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1677
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define INT32_MAX
Definition: macro.lex.yy.c:75
unsigned mask
Definition: jscript.h:390
HRESULT init_global(script_ctx_t *) DECLSPEC_HIDDEN
Definition: global.c:1105
HRESULT init_error_constr(script_ctx_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: error.c:328
HRESULT jsdisp_propget_name(jsdisp_t *, LPCWSTR, jsval_t *) DECLSPEC_HIDDEN
builtin_invoke_t invoke
Definition: jscript.h:212
jsdisp_t * syntax_error_constr
Definition: jscript.h:452
BOOL mark
Definition: jscript.h:65
HRESULT JSGlobal_eval(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: global.c:183
jsdisp_t * error_constr
Definition: jscript.h:447
jsdisp_t * regexp_error_constr
Definition: jscript.h:451
static BOOL is_jscript_error(HRESULT hres)
Definition: jscript.h:575
HRESULT to_number(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:609
DWORD flags
Definition: jscript.h:213
unsigned int UINT32
IDispatchEx IDispatchEx_iface
Definition: jscript.h:231
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:504
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
HRESULT create_math(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: math.c:533
HRESULT jsdisp_get_own_property(jsdisp_t *, const WCHAR *, BOOL, property_desc_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1633
HRESULT jsdisp_propput(jsdisp_t *, const WCHAR *, DWORD, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1332
jsval_t acc
Definition: jscript.h:434
HRESULT throw_eval_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
match_result_t match_parens[9]
Definition: jscript.h:437
jsdisp_t * number_constr
Definition: jscript.h:455
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:80
const WCHAR * str
HRESULT create_json(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: json.c:837
smooth NULL
Definition: ftsmooth.c:416
jsval_t val
Definition: jscript.h:401
HRESULT regexp_match_next(script_ctx_t *, jsdisp_t *, DWORD, jsstr_t *, struct match_state_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:125
HRESULT create_vbarray_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:330
HRESULT to_int32(script_ctx_t *, jsval_t, INT *) DECLSPEC_HIDDEN
Definition: jsutils.c:665
DWORD version
Definition: jscript.h:420
BOOL explicit_setter
Definition: jscript.h:395
enum tagSCRIPTSTATE SCRIPTSTATE
jsdisp_t * jsdisp
Definition: jscript.h:144
IServiceProvider IServiceProvider_iface
Definition: jscript.h:379
jsdisp_t * regexp_constr
Definition: jscript.h:457
#define inline
Definition: module.h:38
union vdisp_t::@425 u
HRESULT create_object_prototype(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:726
HRESULT create_number(script_ctx_t *, double, jsdisp_t **) DECLSPEC_HIDDEN
Definition: number.c:632
struct _jsval_t jsval_t
Definition: jscript.h:54
HRESULT Function_get_value(script_ctx_t *, jsdisp_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:487
static DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
Definition: jscript.h:519
HRESULT jsdisp_get_idx(jsdisp_t *, DWORD, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1425
HRESULT create_array_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1364
JSCaller * jscaller
Definition: jscript.h:424
HRESULT create_regexp(script_ctx_t *, jsstr_t *, DWORD, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:644
HRESULT builtin_set_const(script_ctx_t *, jsdisp_t *, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:555
static jsdisp_t * get_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:199
struct named_item_t named_item_t
HINSTANCE jscript_hinstance
Definition: jscript_main.c:39
static void set_jsdisp(vdisp_t *vdisp, jsdisp_t *jsdisp)
Definition: jscript.h:167
HRESULT disp_propput(script_ctx_t *, IDispatch *, DISPID, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1359
HRESULT jsval_strict_equal(jsval_t, jsval_t, BOOL *) DECLSPEC_HIDDEN
Definition: engine.c:531
HRESULT variant_change_type(script_ctx_t *, VARIANT *, VARIANT *, VARTYPE) DECLSPEC_HIDDEN
Definition: jsutils.c:881
HRESULT create_activex_constr(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: activex.c:188
void script_release(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jscript.c:67
HRESULT create_builtin_constructor(script_ctx_t *, builtin_invoke_t, const WCHAR *, const builtin_info_t *, DWORD, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: function.c:686
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
HRESULT create_jscript_object(BOOL, REFIID, void **) DECLSPEC_HIDDEN
Definition: jscript.c:1072
#define d
Definition: ke_i.h:81
void release_cc(cc_ctx_t *) DECLSPEC_HIDDEN
Definition: lex.c:817
IDispatch * disp
Definition: jscript.h:142
DWORD safeopt
Definition: jscript.h:419
__wchar_t WCHAR
Definition: xmlstorage.h:180
IDispatchEx * dispex
Definition: jscript.h:143
LONG HRESULT
Definition: typedefs.h:77
HRESULT jsdisp_call_value(jsdisp_t *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1089
static BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
Definition: jscript.h:509
builtin_prop_t value_prop
Definition: jscript.h:220
HRESULT create_array(script_ctx_t *, DWORD, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1381
unsigned stack_top
Definition: jscript.h:433
HRESULT decode_source(WCHAR *) DECLSPEC_HIDDEN
Definition: decode.c:111
HRESULT regexp_string_match(script_ctx_t *, jsdisp_t *, jsstr_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: jsregexp.c:727
DWORD last_match_index
Definition: jscript.h:438
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT to_boolean(jsval_t, BOOL *) DECLSPEC_HIDDEN
Definition: jsutils.c:472
LONG ref
Definition: jscript.h:381
HRESULT jsdisp_call(jsdisp_t *, DISPID, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1113
static jsdisp_t * jsdisp_addref(jsdisp_t *jsdisp)
Definition: jscript.h:262
SCRIPTSTATE state
Definition: jscript.h:412
#define VDISP_DISPEX
Definition: jscript.h:149
const builtin_prop_t * props
Definition: jscript.h:222
GLbitfield flags
Definition: glext.h:7161
HINSTANCE jscript_hinstance DECLSPEC_HIDDEN
Definition: jscript.h:584
jsdisp_t * object_constr
Definition: jscript.h:456
HRESULT jsdisp_define_data_property(jsdisp_t *, const WCHAR *, unsigned, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1801
IActiveScript * active_script
Definition: jscript.h:413
DWORD prop_cnt
Definition: jscript.h:236
HRESULT disp_call_value(script_ctx_t *, IDispatch *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1228
int ret
HRESULT jsdisp_get_id(jsdisp_t *, const WCHAR *, DWORD, DISPID *) DECLSPEC_HIDDEN
Definition: dispex.c:1067
#define InterlockedDecrement
Definition: armddk.h:52
void jsdisp_free(jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:976
HRESULT create_regexp_var(script_ctx_t *, jsval_t, jsval_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:674
DWORD offset
Definition: jscript.h:64
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: _list.h:228
jsclass_t class
Definition: jscript.h:219
HRESULT throw_regexp_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:430
heap_pool_t tmp_heap
Definition: jscript.h:427
HRESULT jsdisp_delete_idx(jsdisp_t *, DWORD) DECLSPEC_HIDDEN
Definition: dispex.c:1494
jsdisp_t * as_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:908
DWORD flags
Definition: jscript.h:364
static BOOL is_dispex(vdisp_t *vdisp)
Definition: jscript.h:162
HRESULT Function_value(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:471
void heap_pool_init(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:71
jsval_t * stack
Definition: jscript.h:431
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:245
dispex_prop_t * props
Definition: jscript.h:237
HRESULT create_dispex(script_ctx_t *, const builtin_info_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: dispex.c:957
HRESULT create_regexp_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:1004
BOOL is_finite(double) DECLSPEC_HIDDEN
Definition: jsutils.c:58
HRESULT create_date_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: date.c:2534
struct stdole::EXCEPINFO EXCEPINFO
static VARIANTARG static DISPID
Definition: ordinal.c:49
script_ctx_t * ctx
Definition: jscript.h:383
jsdisp_t * function_constr
Definition: jscript.h:442
#define InterlockedIncrement
Definition: armddk.h:53
hint_t
Definition: jscript.h:337
void ** blocks
Definition: jscript.h:61
BOOL html_mode
Definition: jscript.h:421
jsclass_t
Definition: jscript.h:119
LPWSTR name
Definition: jscript.h:365
HRESULT jsdisp_call_name(jsdisp_t *, const WCHAR *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1124
HRESULT create_string_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1769
HRESULT init_dispex_from_constr(jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1030
IActiveScriptSite * site
Definition: jscript.h:417
Definition: lex.c:810
HRESULT throw_uri_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:445
unsigned short VARTYPE
Definition: compat.h:1903
IDispatch * disp
Definition: jscript.h:363
jsdisp_t * date_constr
Definition: jscript.h:445
IInternetHostSecurityManager * secmgr
Definition: jscript.h:418
DWORD last_block
Definition: jscript.h:63
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:268
jsdisp_t * global
Definition: jscript.h:441
DWORD last_match_length
Definition: jscript.h:439
static void script_addref(script_ctx_t *ctx)
Definition: jscript.h:465
HRESULT to_string(script_ctx_t *, jsval_t, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:757
static void unlock_module(void)
Definition: jscript.h:591
HRESULT init_function_constr(script_ctx_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: function.c:1010
IUnknown * create_ax_site(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jscript.c:324
cc_var_t * vars
Definition: jscript.h:373
DWORD buf_size
Definition: jscript.h:235
void * heap_pool_grow(heap_pool_t *, void *, DWORD, DWORD) DECLSPEC_HIDDEN
Definition: jsutils.c:130
void heap_pool_free(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:169
HRESULT(* builtin_getter_t)(script_ctx_t *, jsdisp_t *, jsval_t *)
Definition: jscript.h:205
HRESULT create_bool_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: bool.c:198
HRESULT jsdisp_propget(jsdisp_t *, DISPID, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1447
HRESULT to_object(script_ctx_t *, jsval_t, IDispatch **) DECLSPEC_HIDDEN
Definition: jsutils.c:816
HRESULT throw_type_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:440
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:731
unsigned length
Definition: jscript.h:406
jsdisp_t * prototype
Definition: jscript.h:240
named_item_t * named_items
Definition: jscript.h:416
struct _builtin_prop_t builtin_prop_t
Definition: vbscript.h:141
#define VDISP_JSDISP
Definition: jscript.h:150
builtin_setter_t setter
Definition: jscript.h:215
jsval_t value
Definition: jscript.h:392
EXCEPINFO ei
Definition: jscript.h:400
jsdisp_t * eval_error_constr
Definition: jscript.h:448
WCHAR * LPWSTR
Definition: xmlstorage.h:184
heap_pool_t * heap_pool_mark(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:182
#define FACILITY_JSCRIPT
Definition: jscript.h:524
static LPWSTR heap_strdupW(LPCWSTR str)
Definition: jscript.h:76
static BOOL is_int32(double d)
Definition: jscript.h:514
HRESULT create_vbarray(script_ctx_t *, SAFEARRAY *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:347
jsdisp_t * uri_error_constr
Definition: jscript.h:454
DWORD block_cnt
Definition: jscript.h:62
BOOL explicit_value
Definition: jscript.h:391
jsexcept_t ei
Definition: jscript.h:425
HRESULT to_flat_string(script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **) DECLSPEC_HIDDEN
Definition: jsutils.c:798
BOOL explicit_getter
Definition: jscript.h:393
static BOOL is_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:157
#define SUCCEEDED(hr)
Definition: intsafe.h:57
static unsigned(__cdecl *hash_bstr)(bstr_t s)
HRESULT(* builtin_invoke_t)(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *)
Definition: jscript.h:204
jsdisp_t * setter
Definition: jscript.h:396
const char * debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN
Definition: jsutils.c:35
unsigned stack_size
Definition: jscript.h:432
HRESULT disp_propget(script_ctx_t *, IDispatch *, DISPID, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1458
HRESULT disp_delete(IDispatch *, DISPID, BOOL *) DECLSPEC_HIDDEN
Definition: dispex.c:1511
HRESULT to_primitive(script_ctx_t *, jsval_t, jsval_t *, hint_t) DECLSPEC_HIDDEN
Definition: jsutils.c:404
void heap_pool_clear(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:146