ReactOS  0.4.14-dev-49-gfb4591c
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 
24 #define COBJMACROS
25 
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "ole2.h"
30 #include "dispex.h"
31 #include "activscp.h"
32 
33 #include "resource.h"
34 
35 #include "wine/unicode.h"
36 #include "wine/heap.h"
37 #include "wine/list.h"
38 
39 /*
40  * This is Wine jscript extension for ES5 compatible mode. Native IE9+ implements
41  * a separated JavaScript enging in side MSHTML. We implement its features here
42  * and enable it when HTML flag is specified in SCRIPTPROP_INVOKEVERSIONING property.
43  */
44 #define SCRIPTLANGUAGEVERSION_HTML 0x400
45 
46 /*
47  * This is Wine jscript extension for ES5 compatible mode. Allowed only in HTML mode.
48  */
49 #define SCRIPTLANGUAGEVERSION_ES5 0x102
50 
51 typedef struct _jsval_t jsval_t;
52 typedef struct _jsstr_t jsstr_t;
53 typedef struct _script_ctx_t script_ctx_t;
56 
57 typedef struct {
58  void **blocks;
63  struct list custom_blocks;
64 } heap_pool_t;
65 
72 
74 {
75  LPWSTR ret = NULL;
76 
77  if(str) {
78  DWORD size;
79 
80  size = (strlenW(str)+1)*sizeof(WCHAR);
81  ret = heap_alloc(size);
82  if(ret)
83  memcpy(ret, str, size);
84  }
85 
86  return ret;
87 }
88 
89 typedef struct jsdisp_t jsdisp_t;
90 
92 
93 #define PROPF_ARGMASK 0x00ff
94 #define PROPF_METHOD 0x0100
95 #define PROPF_CONSTR 0x0200
96 
97 #define PROPF_ENUMERABLE 0x0400
98 #define PROPF_WRITABLE 0x0800
99 #define PROPF_CONFIGURABLE 0x1000
100 #define PROPF_ALL (PROPF_ENUMERABLE | PROPF_WRITABLE | PROPF_CONFIGURABLE)
101 
102 #define PROPF_VERSION_MASK 0x01ff0000
103 #define PROPF_VERSION_SHIFT 16
104 #define PROPF_HTML (SCRIPTLANGUAGEVERSION_HTML << PROPF_VERSION_SHIFT)
105 #define PROPF_ES5 ((SCRIPTLANGUAGEVERSION_HTML|SCRIPTLANGUAGEVERSION_ES5) << PROPF_VERSION_SHIFT)
106 
107 /*
108  * This is our internal dispatch flag informing calee that it's called directly from interpreter.
109  * If calee is executed as interpreted function, we may let already running interpreter to take
110  * of execution.
111  */
112 #define DISPATCH_JSCRIPT_CALLEREXECSSOURCE 0x8000
113 #define DISPATCH_JSCRIPT_INTERNAL_MASK DISPATCH_JSCRIPT_CALLEREXECSSOURCE
114 
115 /* NOTE: Keep in sync with names in Object.toString implementation */
116 typedef enum {
133 } jsclass_t;
134 
136 
137 typedef struct {
138  union {
140  IDispatchEx *dispex;
142  } u;
144 } vdisp_t;
145 
146 #define VDISP_DISPEX 0x0001
147 #define VDISP_JSDISP 0x0002
148 
149 static inline void vdisp_release(vdisp_t *vdisp)
150 {
151  IDispatch_Release(vdisp->u.disp);
152 }
153 
154 static inline BOOL is_jsdisp(vdisp_t *vdisp)
155 {
156  return (vdisp->flags & VDISP_JSDISP) != 0;
157 }
158 
159 static inline BOOL is_dispex(vdisp_t *vdisp)
160 {
161  return (vdisp->flags & VDISP_DISPEX) != 0;
162 }
163 
164 static inline void set_jsdisp(vdisp_t *vdisp, jsdisp_t *jsdisp)
165 {
166  vdisp->u.jsdisp = jsdisp;
167  vdisp->flags = VDISP_JSDISP | VDISP_DISPEX;
168  IDispatch_AddRef(vdisp->u.disp);
169 }
170 
171 static inline void set_disp(vdisp_t *vdisp, IDispatch *disp)
172 {
173  IDispatchEx *dispex;
174  jsdisp_t *jsdisp;
175  HRESULT hres;
176 
177  jsdisp = iface_to_jsdisp(disp);
178  if(jsdisp) {
179  vdisp->u.jsdisp = jsdisp;
180  vdisp->flags = VDISP_JSDISP | VDISP_DISPEX;
181  return;
182  }
183 
184  hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
185  if(SUCCEEDED(hres)) {
186  vdisp->u.dispex = dispex;
187  vdisp->flags = VDISP_DISPEX;
188  return;
189  }
190 
191  IDispatch_AddRef(disp);
192  vdisp->u.disp = disp;
193  vdisp->flags = 0;
194 }
195 
196 static inline jsdisp_t *get_jsdisp(vdisp_t *vdisp)
197 {
198  return is_jsdisp(vdisp) ? vdisp->u.jsdisp : NULL;
199 }
200 
204 
206 
207 typedef struct {
208  const WCHAR *name;
214 
215 typedef struct {
216  jsclass_t class;
220  void (*destructor)(jsdisp_t*);
221  void (*on_put)(jsdisp_t*,const WCHAR*);
222  unsigned (*idx_length)(jsdisp_t*);
223  HRESULT (*idx_get)(jsdisp_t*,unsigned,jsval_t*);
224  HRESULT (*idx_put)(jsdisp_t*,unsigned,jsval_t);
226 
227 struct jsdisp_t {
228  IDispatchEx IDispatchEx_iface;
229 
231 
236 
238 
240 };
241 
242 static inline IDispatch *to_disp(jsdisp_t *jsdisp)
243 {
244  return (IDispatch*)&jsdisp->IDispatchEx_iface;
245 }
246 
250 
251 #ifndef TRACE_REFCNT
252 
253 /*
254  * We do a lot of refcount calls during script execution, so having an inline
255  * version is a nice perf win. Define TRACE_REFCNT macro when debugging
256  * refcount bugs to have traces. Also, since jsdisp_t is not thread safe anyways,
257  * there is no point in using atomic operations.
258  */
259 static inline jsdisp_t *jsdisp_addref(jsdisp_t *jsdisp)
260 {
261  jsdisp->ref++;
262  return jsdisp;
263 }
264 
265 static inline void jsdisp_release(jsdisp_t *jsdisp)
266 {
267  if(!--jsdisp->ref)
268  jsdisp_free(jsdisp);
269 }
270 
271 #else
272 
275 
276 #endif
277 
281 
302 
308 
311 #define DEFAULT_FUNCTION_VALUE {NULL, Function_value,0, Function_get_value}
312 
321 
332 
333 typedef enum {
337 } hint_t;
338 
348 
350 
352 
354 
357 
358 typedef struct named_item_t {
362 
364 } named_item_t;
365 
366 typedef struct _cc_var_t cc_var_t;
367 
368 typedef struct {
370 } cc_ctx_t;
371 
373 
374 typedef struct {
376 
378 
380 } JSCaller;
381 
382 #include "jsval.h"
383 
385  unsigned flags;
386  unsigned mask;
393 };
394 
395 typedef struct {
398 } jsexcept_t;
399 
400 typedef struct {
401  unsigned index;
402  unsigned length;
404 
407 
410 
422 
424 
426 
428  unsigned stack_size;
429  unsigned stack_top;
431 
436 
456 };
457 
460 
461 static inline void script_addref(script_ctx_t *ctx)
462 {
463  ctx->ref++;
464 }
465 
469 
481 
484 
485 #define REM_CHECK_GLOBAL 0x0001
486 #define REM_RESET_INDEX 0x0002
487 #define REM_NO_CTX_UPDATE 0x0004
488 #define REM_ALLOC_RESULT 0x0008
489 #define REM_NO_PARENS 0x0010
490 struct match_state_t;
494 
497 
499 
500 static inline BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
501 {
502  return jsdisp->builtin_info->class == class;
503 }
504 
505 static inline BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
506 {
507  return is_jsdisp(vdisp) && is_class(vdisp->u.jsdisp, class);
508 }
509 
510 #ifndef INT32_MIN
511 #define INT32_MIN (-2147483647-1)
512 #endif
513 
514 #ifndef INT32_MAX
515 #define INT32_MAX (2147483647)
516 #endif
517 
518 static inline BOOL is_int32(double d)
519 {
520  return INT32_MIN <= d && d <= INT32_MAX && (double)(int)d == d;
521 }
522 
524 {
525  return ((ctx->version & 0xff) << 28) | flags;
526 }
527 
528 #define FACILITY_JSCRIPT 10
529 
530 #define MAKE_JSERROR(code) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_JSCRIPT, code)
531 
532 #define JS_E_TO_PRIMITIVE MAKE_JSERROR(IDS_TO_PRIMITIVE)
533 #define JS_E_INVALIDARG MAKE_JSERROR(IDS_INVALID_CALL_ARG)
534 #define JS_E_SUBSCRIPT_OUT_OF_RANGE MAKE_JSERROR(IDS_SUBSCRIPT_OUT_OF_RANGE)
535 #define JS_E_OBJECT_REQUIRED MAKE_JSERROR(IDS_OBJECT_REQUIRED)
536 #define JS_E_CANNOT_CREATE_OBJ MAKE_JSERROR(IDS_CREATE_OBJ_ERROR)
537 #define JS_E_INVALID_PROPERTY MAKE_JSERROR(IDS_NO_PROPERTY)
538 #define JS_E_INVALID_ACTION MAKE_JSERROR(IDS_UNSUPPORTED_ACTION)
539 #define JS_E_MISSING_ARG MAKE_JSERROR(IDS_ARG_NOT_OPT)
540 #define JS_E_SYNTAX MAKE_JSERROR(IDS_SYNTAX_ERROR)
541 #define JS_E_MISSING_SEMICOLON MAKE_JSERROR(IDS_SEMICOLON)
542 #define JS_E_MISSING_LBRACKET MAKE_JSERROR(IDS_LBRACKET)
543 #define JS_E_MISSING_RBRACKET MAKE_JSERROR(IDS_RBRACKET)
544 #define JS_E_EXPECTED_IDENTIFIER MAKE_JSERROR(IDS_EXPECTED_IDENTIFIER)
545 #define JS_E_EXPECTED_ASSIGN MAKE_JSERROR(IDS_EXPECTED_ASSIGN)
546 #define JS_E_INVALID_CHAR MAKE_JSERROR(IDS_INVALID_CHAR)
547 #define JS_E_UNTERMINATED_STRING MAKE_JSERROR(IDS_UNTERMINATED_STR)
548 #define JS_E_MISPLACED_RETURN MAKE_JSERROR(IDS_MISPLACED_RETURN)
549 #define JS_E_INVALID_BREAK MAKE_JSERROR(IDS_INVALID_BREAK)
550 #define JS_E_INVALID_CONTINUE MAKE_JSERROR(IDS_INVALID_CONTINUE)
551 #define JS_E_LABEL_REDEFINED MAKE_JSERROR(IDS_LABEL_REDEFINED)
552 #define JS_E_LABEL_NOT_FOUND MAKE_JSERROR(IDS_LABEL_NOT_FOUND)
553 #define JS_E_EXPECTED_CCEND MAKE_JSERROR(IDS_EXPECTED_CCEND)
554 #define JS_E_DISABLED_CC MAKE_JSERROR(IDS_DISABLED_CC)
555 #define JS_E_EXPECTED_AT MAKE_JSERROR(IDS_EXPECTED_AT)
556 #define JS_E_FUNCTION_EXPECTED MAKE_JSERROR(IDS_NOT_FUNC)
557 #define JS_E_DATE_EXPECTED MAKE_JSERROR(IDS_NOT_DATE)
558 #define JS_E_NUMBER_EXPECTED MAKE_JSERROR(IDS_NOT_NUM)
559 #define JS_E_OBJECT_EXPECTED MAKE_JSERROR(IDS_OBJECT_EXPECTED)
560 #define JS_E_ILLEGAL_ASSIGN MAKE_JSERROR(IDS_ILLEGAL_ASSIGN)
561 #define JS_E_UNDEFINED_VARIABLE MAKE_JSERROR(IDS_UNDEFINED)
562 #define JS_E_BOOLEAN_EXPECTED MAKE_JSERROR(IDS_NOT_BOOL)
563 #define JS_E_VBARRAY_EXPECTED MAKE_JSERROR(IDS_NOT_VBARRAY)
564 #define JS_E_INVALID_DELETE MAKE_JSERROR(IDS_INVALID_DELETE)
565 #define JS_E_JSCRIPT_EXPECTED MAKE_JSERROR(IDS_JSCRIPT_EXPECTED)
566 #define JS_E_ENUMERATOR_EXPECTED MAKE_JSERROR(IDS_NOT_ENUMERATOR)
567 #define JS_E_REGEXP_SYNTAX MAKE_JSERROR(IDS_REGEXP_SYNTAX_ERROR)
568 #define JS_E_INVALID_URI_CODING MAKE_JSERROR(IDS_URI_INVALID_CODING)
569 #define JS_E_INVALID_URI_CHAR MAKE_JSERROR(IDS_URI_INVALID_CHAR)
570 #define JS_E_FRACTION_DIGITS_OUT_OF_RANGE MAKE_JSERROR(IDS_FRACTION_DIGITS_OUT_OF_RANGE)
571 #define JS_E_PRECISION_OUT_OF_RANGE MAKE_JSERROR(IDS_PRECISION_OUT_OF_RANGE)
572 #define JS_E_INVALID_LENGTH MAKE_JSERROR(IDS_INVALID_LENGTH)
573 #define JS_E_ARRAY_EXPECTED MAKE_JSERROR(IDS_ARRAY_EXPECTED)
574 #define JS_E_NONCONFIGURABLE_REDEFINED MAKE_JSERROR(IDS_NONCONFIGURABLE_REDEFINED)
575 #define JS_E_NONWRITABLE_MODIFIED MAKE_JSERROR(IDS_NONWRITABLE_MODIFIED)
576 #define JS_E_PROP_DESC_MISMATCH MAKE_JSERROR(IDS_PROP_DESC_MISMATCH)
577 #define JS_E_INVALID_WRITABLE_PROP_DESC MAKE_JSERROR(IDS_INVALID_WRITABLE_PROP_DESC)
578 
580 {
582 }
583 
584 const char *debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN;
585 
587 
589 
590 static inline void lock_module(void)
591 {
593 }
594 
595 static inline void unlock_module(void)
596 {
598 }
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:678
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:440
disp
Definition: i386-dis.c:3181
#define HRESULT
Definition: msvc.h:9
script_ctx_t * ctx
Definition: jscript.h:235
jsdisp_t * vbarray_constr
Definition: jscript.h:455
HRESULT create_object_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:584
HRESULT disp_delete_name(script_ctx_t *, IDispatch *, jsstr_t *, BOOL *) DECLSPEC_HIDDEN
Definition: dispex.c:1567
jsstr_t * last_match
Definition: jscript.h:432
jsdisp_t * reference_error_constr
Definition: jscript.h:446
#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:1157
jsdisp_t * enumerator_constr
Definition: jscript.h:442
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:644
DWORD props_cnt
Definition: jscript.h:218
const WCHAR * name
Definition: jscript.h:208
jsdisp_t * array_constr
Definition: jscript.h:439
jsdisp_t * iface_to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:1081
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
static void set_disp(vdisp_t *vdisp, IDispatch *disp)
Definition: jscript.h:171
static void vdisp_release(vdisp_t *vdisp)
Definition: jscript.h:149
static void lock_module(void)
Definition: jscript.h:590
jsdisp_t * to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:935
jsdisp_t * type_error_constr
Definition: jscript.h:449
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
HRESULT to_integer(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:640
Definition: jsstr.h:39
HRESULT Function_invoke(jsdisp_t *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:324
jsdisp_t * range_error_constr
Definition: jscript.h:445
HRESULT throw_syntax_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:433
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:75
#define __WINE_ALLOC_SIZE(x)
Definition: winnt_old.h:84
#define INT32_MIN
Definition: jscript.h:511
HRESULT create_jscaller(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:1031
void clear_ei(script_ctx_t *) DECLSPEC_HIDDEN
Definition: engine.c:428
HRESULT jsdisp_propput_idx(jsdisp_t *, DWORD, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1370
HRESULT init_dispex(jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:940
builtin_getter_t getter
Definition: jscript.h:211
HRESULT jsdisp_propput_name(jsdisp_t *, const WCHAR *, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1365
unsigned flags
Definition: jscript.h:385
const builtin_info_t * builtin_info
Definition: jscript.h:239
HRESULT create_string(script_ctx_t *, jsstr_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1768
HRESULT create_number_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: number.c:613
jsdisp_t * string_constr
Definition: jscript.h:454
HRESULT create_enumerator_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: enumerator.c:332
DWORD flags
Definition: jscript.h:143
struct _call_frame_t * call_ctx
Definition: jscript.h:411
HRESULT(* builtin_setter_t)(script_ctx_t *, jsdisp_t *, jsval_t)
Definition: jscript.h:203
#define INT32_MAX
Definition: jscript.h:515
unsigned array_get_length(jsdisp_t *) DECLSPEC_HIDDEN
Definition: array.c:70
DWORD LCID
Definition: nls.h:13
struct named_item_t * next
Definition: jscript.h:363
LONG module_ref
Definition: ieframe_main.c:31
HRESULT double_to_string(double, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:719
jsdisp_t * getter
Definition: jscript.h:390
cc_ctx_t * cc
Definition: jscript.h:419
HRESULT throw_range_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:418
LONG ref
Definition: jscript.h:230
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:425
unsigned index
Definition: jscript.h:401
HRESULT throw_reference_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:423
HRESULT throw_generic_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:413
HRESULT jsdisp_define_property(jsdisp_t *, const WCHAR *, property_desc_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1670
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
unsigned mask
Definition: jscript.h:386
HRESULT init_global(script_ctx_t *) DECLSPEC_HIDDEN
Definition: global.c:1106
HRESULT init_error_constr(script_ctx_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: error.c:326
HRESULT jsdisp_propget_name(jsdisp_t *, LPCWSTR, jsval_t *) DECLSPEC_HIDDEN
builtin_invoke_t invoke
Definition: jscript.h:209
jsdisp_t * syntax_error_constr
Definition: jscript.h:448
BOOL mark
Definition: jscript.h:62
HRESULT JSGlobal_eval(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: global.c:181
jsdisp_t * error_constr
Definition: jscript.h:443
jsdisp_t * regexp_error_constr
Definition: jscript.h:447
static BOOL is_jscript_error(HRESULT hres)
Definition: jscript.h:579
HRESULT to_number(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:601
DWORD flags
Definition: jscript.h:210
unsigned int UINT32
IDispatchEx IDispatchEx_iface
Definition: jscript.h:228
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:500
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
HRESULT create_math(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: math.c:531
HRESULT jsdisp_get_own_property(jsdisp_t *, const WCHAR *, BOOL, property_desc_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1626
HRESULT jsdisp_propput(jsdisp_t *, const WCHAR *, DWORD, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1353
jsval_t acc
Definition: jscript.h:430
HRESULT throw_eval_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
match_result_t match_parens[9]
Definition: jscript.h:433
jsdisp_t * number_constr
Definition: jscript.h:451
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:845
smooth NULL
Definition: ftsmooth.c:416
jsval_t val
Definition: jscript.h:397
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:657
DWORD version
Definition: jscript.h:416
BOOL explicit_setter
Definition: jscript.h:391
jsdisp_t * jsdisp
Definition: jscript.h:141
IServiceProvider IServiceProvider_iface
Definition: jscript.h:375
jsdisp_t * regexp_constr
Definition: jscript.h:453
#define inline
Definition: module.h:38
HRESULT create_object_prototype(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:592
HRESULT create_number(script_ctx_t *, double, jsdisp_t **) DECLSPEC_HIDDEN
Definition: number.c:632
struct _jsval_t jsval_t
Definition: jscript.h:51
HRESULT Function_get_value(script_ctx_t *, jsdisp_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:535
static DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
Definition: jscript.h:523
HRESULT jsdisp_get_idx(jsdisp_t *, DWORD, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1446
HRESULT create_array_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1293
JSCaller * jscaller
Definition: jscript.h:420
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:556
static jsdisp_t * get_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:196
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:164
HRESULT disp_propput(script_ctx_t *, IDispatch *, DISPID, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1380
HRESULT jsval_strict_equal(jsval_t, jsval_t, BOOL *) DECLSPEC_HIDDEN
Definition: engine.c:529
HRESULT variant_change_type(script_ctx_t *, VARIANT *, VARIANT *, VARTYPE) DECLSPEC_HIDDEN
Definition: jsutils.c:873
HRESULT create_activex_constr(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: activex.c:190
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:679
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:846
IDispatch * disp
Definition: jscript.h:139
DWORD safeopt
Definition: jscript.h:415
__wchar_t WCHAR
Definition: xmlstorage.h:180
IDispatchEx * dispex
Definition: jscript.h:140
LONG HRESULT
Definition: typedefs.h:77
HRESULT jsdisp_call_value(jsdisp_t *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1110
static BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
Definition: jscript.h:505
builtin_prop_t value_prop
Definition: jscript.h:217
HRESULT create_array(script_ctx_t *, DWORD, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1310
unsigned stack_top
Definition: jscript.h:429
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:434
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:464
LONG ref
Definition: jscript.h:377
HRESULT jsdisp_call(jsdisp_t *, DISPID, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1134
static jsdisp_t * jsdisp_addref(jsdisp_t *jsdisp)
Definition: jscript.h:259
SCRIPTSTATE state
Definition: jscript.h:408
#define VDISP_DISPEX
Definition: jscript.h:146
const builtin_prop_t * props
Definition: jscript.h:219
GLbitfield flags
Definition: glext.h:7161
HINSTANCE jscript_hinstance DECLSPEC_HIDDEN
Definition: jscript.h:588
jsdisp_t * object_constr
Definition: jscript.h:452
HRESULT jsdisp_define_data_property(jsdisp_t *, const WCHAR *, unsigned, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1794
IActiveScript * active_script
Definition: jscript.h:409
DWORD prop_cnt
Definition: jscript.h:233
HRESULT disp_call_value(script_ctx_t *, IDispatch *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1249
int ret
HRESULT jsdisp_get_id(jsdisp_t *, const WCHAR *, DWORD, DISPID *) DECLSPEC_HIDDEN
Definition: dispex.c:1088
#define InterlockedDecrement
Definition: armddk.h:52
void jsdisp_free(jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:997
HRESULT create_regexp_var(script_ctx_t *, jsval_t, jsval_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:674
DWORD offset
Definition: jscript.h:61
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: _list.h:228
jsclass_t class
Definition: jscript.h:216
HRESULT throw_regexp_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:428
heap_pool_t tmp_heap
Definition: jscript.h:423
HRESULT jsdisp_delete_idx(jsdisp_t *, DWORD) DECLSPEC_HIDDEN
Definition: dispex.c:1515
jsdisp_t * as_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:929
DWORD flags
Definition: jscript.h:360
static BOOL is_dispex(vdisp_t *vdisp)
Definition: jscript.h:159
HRESULT Function_value(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:517
void heap_pool_init(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:69
jsval_t * stack
Definition: jscript.h:427
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:242
dispex_prop_t * props
Definition: jscript.h:234
HRESULT create_dispex(script_ctx_t *, const builtin_info_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: dispex.c:978
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:56
HRESULT create_date_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: date.c:2531
struct stdole::EXCEPINFO EXCEPINFO
static VARIANTARG static DISPID
Definition: ordinal.c:49
script_ctx_t * ctx
Definition: jscript.h:379
jsdisp_t * function_constr
Definition: jscript.h:438
#define InterlockedIncrement
Definition: armddk.h:53
hint_t
Definition: jscript.h:333
void ** blocks
Definition: jscript.h:58
BOOL html_mode
Definition: jscript.h:417
jsclass_t
Definition: jscript.h:116
LPWSTR name
Definition: jscript.h:361
HRESULT jsdisp_call_name(jsdisp_t *, const WCHAR *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1145
HRESULT create_string_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1750
HRESULT init_dispex_from_constr(jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1051
IActiveScriptSite * site
Definition: jscript.h:413
Definition: lex.c:839
HRESULT throw_uri_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:443
unsigned short VARTYPE
Definition: compat.h:1895
SCRIPTPROP_ABBREVIATE_GLOBALNAME_RESOLUTION enum tagSCRIPTSTATE SCRIPTSTATE
IDispatch * disp
Definition: jscript.h:359
jsdisp_t * date_constr
Definition: jscript.h:441
IInternetHostSecurityManager * secmgr
Definition: jscript.h:414
DWORD last_block
Definition: jscript.h:60
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:265
jsdisp_t * global
Definition: jscript.h:437
DWORD last_match_length
Definition: jscript.h:435
static void script_addref(script_ctx_t *ctx)
Definition: jscript.h:461
HRESULT to_string(script_ctx_t *, jsval_t, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:749
static void unlock_module(void)
Definition: jscript.h:595
HRESULT init_function_constr(script_ctx_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: function.c:853
IUnknown * create_ax_site(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jscript.c:324
cc_var_t * vars
Definition: jscript.h:369
DWORD buf_size
Definition: jscript.h:232
void * heap_pool_grow(heap_pool_t *, void *, DWORD, DWORD) DECLSPEC_HIDDEN
Definition: jsutils.c:128
void heap_pool_free(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:167
HRESULT(* builtin_getter_t)(script_ctx_t *, jsdisp_t *, jsval_t *)
Definition: jscript.h:202
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:1468
HRESULT to_object(script_ctx_t *, jsval_t, IDispatch **) DECLSPEC_HIDDEN
Definition: jsutils.c:808
HRESULT throw_type_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:438
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:597
unsigned length
Definition: jscript.h:402
jsdisp_t * prototype
Definition: jscript.h:237
named_item_t * named_items
Definition: jscript.h:412
#define VDISP_JSDISP
Definition: jscript.h:147
builtin_setter_t setter
Definition: jscript.h:212
jsval_t value
Definition: jscript.h:388
EXCEPINFO ei
Definition: jscript.h:396
jsdisp_t * eval_error_constr
Definition: jscript.h:444
WCHAR * LPWSTR
Definition: xmlstorage.h:184
union vdisp_t::@420 u
heap_pool_t * heap_pool_mark(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:180
#define FACILITY_JSCRIPT
Definition: jscript.h:528
static LPWSTR heap_strdupW(LPCWSTR str)
Definition: jscript.h:73
static BOOL is_int32(double d)
Definition: jscript.h:518
HRESULT create_vbarray(script_ctx_t *, SAFEARRAY *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:347
jsdisp_t * uri_error_constr
Definition: jscript.h:450
DWORD block_cnt
Definition: jscript.h:59
BOOL explicit_value
Definition: jscript.h:387
jsexcept_t ei
Definition: jscript.h:421
HRESULT to_flat_string(script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **) DECLSPEC_HIDDEN
Definition: jsutils.c:790
BOOL explicit_getter
Definition: jscript.h:389
static BOOL is_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:154
#define SUCCEEDED(hr)
Definition: intsafe.h:57
HRESULT(* builtin_invoke_t)(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *)
Definition: jscript.h:201
jsdisp_t * setter
Definition: jscript.h:392
const char * debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN
Definition: jsutils.c:33
unsigned stack_size
Definition: jscript.h:428
HRESULT disp_propget(script_ctx_t *, IDispatch *, DISPID, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1479
HRESULT disp_delete(IDispatch *, DISPID, BOOL *) DECLSPEC_HIDDEN
Definition: dispex.c:1532
HRESULT to_primitive(script_ctx_t *, jsval_t, jsval_t *, hint_t) DECLSPEC_HIDDEN
Definition: jsutils.c:396
void heap_pool_clear(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:144