ReactOS  0.4.13-dev-242-g611e6d7
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 {
132 } jsclass_t;
133 
135 
136 typedef struct {
137  union {
139  IDispatchEx *dispex;
141  } u;
143 } vdisp_t;
144 
145 #define VDISP_DISPEX 0x0001
146 #define VDISP_JSDISP 0x0002
147 
148 static inline void vdisp_release(vdisp_t *vdisp)
149 {
150  IDispatch_Release(vdisp->u.disp);
151 }
152 
153 static inline BOOL is_jsdisp(vdisp_t *vdisp)
154 {
155  return (vdisp->flags & VDISP_JSDISP) != 0;
156 }
157 
158 static inline BOOL is_dispex(vdisp_t *vdisp)
159 {
160  return (vdisp->flags & VDISP_DISPEX) != 0;
161 }
162 
163 static inline void set_jsdisp(vdisp_t *vdisp, jsdisp_t *jsdisp)
164 {
165  vdisp->u.jsdisp = jsdisp;
166  vdisp->flags = VDISP_JSDISP | VDISP_DISPEX;
167  IDispatch_AddRef(vdisp->u.disp);
168 }
169 
170 static inline void set_disp(vdisp_t *vdisp, IDispatch *disp)
171 {
172  IDispatchEx *dispex;
173  jsdisp_t *jsdisp;
174  HRESULT hres;
175 
176  jsdisp = iface_to_jsdisp(disp);
177  if(jsdisp) {
178  vdisp->u.jsdisp = jsdisp;
179  vdisp->flags = VDISP_JSDISP | VDISP_DISPEX;
180  return;
181  }
182 
183  hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
184  if(SUCCEEDED(hres)) {
185  vdisp->u.dispex = dispex;
186  vdisp->flags = VDISP_DISPEX;
187  return;
188  }
189 
190  IDispatch_AddRef(disp);
191  vdisp->u.disp = disp;
192  vdisp->flags = 0;
193 }
194 
195 static inline jsdisp_t *get_jsdisp(vdisp_t *vdisp)
196 {
197  return is_jsdisp(vdisp) ? vdisp->u.jsdisp : NULL;
198 }
199 
203 
205 
206 typedef struct {
207  const WCHAR *name;
213 
214 typedef struct {
215  jsclass_t class;
219  void (*destructor)(jsdisp_t*);
220  void (*on_put)(jsdisp_t*,const WCHAR*);
221  unsigned (*idx_length)(jsdisp_t*);
222  HRESULT (*idx_get)(jsdisp_t*,unsigned,jsval_t*);
223  HRESULT (*idx_put)(jsdisp_t*,unsigned,jsval_t);
225 
226 struct jsdisp_t {
227  IDispatchEx IDispatchEx_iface;
228 
230 
235 
237 
239 };
240 
241 static inline IDispatch *to_disp(jsdisp_t *jsdisp)
242 {
243  return (IDispatch*)&jsdisp->IDispatchEx_iface;
244 }
245 
249 
250 #ifndef TRACE_REFCNT
251 
252 /*
253  * We do a lot of refcount calls during script execution, so having an inline
254  * version is a nice perf win. Define TRACE_REFCNT macro when debugging
255  * refcount bugs to have traces. Also, since jsdisp_t is not thread safe anyways,
256  * there is no point in using atomic operations.
257  */
258 static inline jsdisp_t *jsdisp_addref(jsdisp_t *jsdisp)
259 {
260  jsdisp->ref++;
261  return jsdisp;
262 }
263 
264 static inline void jsdisp_release(jsdisp_t *jsdisp)
265 {
266  if(!--jsdisp->ref)
267  jsdisp_free(jsdisp);
268 }
269 
270 #else
271 
274 
275 #endif
276 
280 
301 
307 
310 #define DEFAULT_FUNCTION_VALUE {NULL, Function_value,0, Function_get_value}
311 
320 
331 
332 typedef enum {
336 } hint_t;
337 
347 
349 
351 
353 
356 
357 typedef struct named_item_t {
361 
363 } named_item_t;
364 
365 typedef struct _cc_var_t cc_var_t;
366 
367 typedef struct {
369 } cc_ctx_t;
370 
372 
373 typedef struct {
375 
377 
379 } JSCaller;
380 
381 #include "jsval.h"
382 
384  unsigned flags;
385  unsigned mask;
392 };
393 
394 typedef struct {
397 } jsexcept_t;
398 
399 typedef struct {
400  unsigned index;
401  unsigned length;
403 
406 
409 
421 
423 
425 
427  unsigned stack_size;
428  unsigned stack_top;
430 
435 
454 };
455 
458 
459 static inline void script_addref(script_ctx_t *ctx)
460 {
461  ctx->ref++;
462 }
463 
467 
478 
481 
482 #define REM_CHECK_GLOBAL 0x0001
483 #define REM_RESET_INDEX 0x0002
484 #define REM_NO_CTX_UPDATE 0x0004
485 #define REM_ALLOC_RESULT 0x0008
486 #define REM_NO_PARENS 0x0010
487 struct match_state_t;
491 
494 
496 
497 static inline BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
498 {
499  return jsdisp->builtin_info->class == class;
500 }
501 
502 static inline BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
503 {
504  return is_jsdisp(vdisp) && is_class(vdisp->u.jsdisp, class);
505 }
506 
507 #ifndef INT32_MIN
508 #define INT32_MIN (-2147483647-1)
509 #endif
510 
511 #ifndef INT32_MAX
512 #define INT32_MAX (2147483647)
513 #endif
514 
515 static inline BOOL is_int32(double d)
516 {
517  return INT32_MIN <= d && d <= INT32_MAX && (double)(int)d == d;
518 }
519 
521 {
522  return ((ctx->version & 0xff) << 28) | flags;
523 }
524 
525 #define FACILITY_JSCRIPT 10
526 
527 #define MAKE_JSERROR(code) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_JSCRIPT, code)
528 
529 #define JS_E_TO_PRIMITIVE MAKE_JSERROR(IDS_TO_PRIMITIVE)
530 #define JS_E_INVALIDARG MAKE_JSERROR(IDS_INVALID_CALL_ARG)
531 #define JS_E_SUBSCRIPT_OUT_OF_RANGE MAKE_JSERROR(IDS_SUBSCRIPT_OUT_OF_RANGE)
532 #define JS_E_OBJECT_REQUIRED MAKE_JSERROR(IDS_OBJECT_REQUIRED)
533 #define JS_E_CANNOT_CREATE_OBJ MAKE_JSERROR(IDS_CREATE_OBJ_ERROR)
534 #define JS_E_INVALID_PROPERTY MAKE_JSERROR(IDS_NO_PROPERTY)
535 #define JS_E_INVALID_ACTION MAKE_JSERROR(IDS_UNSUPPORTED_ACTION)
536 #define JS_E_MISSING_ARG MAKE_JSERROR(IDS_ARG_NOT_OPT)
537 #define JS_E_SYNTAX MAKE_JSERROR(IDS_SYNTAX_ERROR)
538 #define JS_E_MISSING_SEMICOLON MAKE_JSERROR(IDS_SEMICOLON)
539 #define JS_E_MISSING_LBRACKET MAKE_JSERROR(IDS_LBRACKET)
540 #define JS_E_MISSING_RBRACKET MAKE_JSERROR(IDS_RBRACKET)
541 #define JS_E_EXPECTED_IDENTIFIER MAKE_JSERROR(IDS_EXPECTED_IDENTIFIER)
542 #define JS_E_EXPECTED_ASSIGN MAKE_JSERROR(IDS_EXPECTED_ASSIGN)
543 #define JS_E_INVALID_CHAR MAKE_JSERROR(IDS_INVALID_CHAR)
544 #define JS_E_UNTERMINATED_STRING MAKE_JSERROR(IDS_UNTERMINATED_STR)
545 #define JS_E_MISPLACED_RETURN MAKE_JSERROR(IDS_MISPLACED_RETURN)
546 #define JS_E_INVALID_BREAK MAKE_JSERROR(IDS_INVALID_BREAK)
547 #define JS_E_INVALID_CONTINUE MAKE_JSERROR(IDS_INVALID_CONTINUE)
548 #define JS_E_LABEL_REDEFINED MAKE_JSERROR(IDS_LABEL_REDEFINED)
549 #define JS_E_LABEL_NOT_FOUND MAKE_JSERROR(IDS_LABEL_NOT_FOUND)
550 #define JS_E_EXPECTED_CCEND MAKE_JSERROR(IDS_EXPECTED_CCEND)
551 #define JS_E_DISABLED_CC MAKE_JSERROR(IDS_DISABLED_CC)
552 #define JS_E_EXPECTED_AT MAKE_JSERROR(IDS_EXPECTED_AT)
553 #define JS_E_FUNCTION_EXPECTED MAKE_JSERROR(IDS_NOT_FUNC)
554 #define JS_E_DATE_EXPECTED MAKE_JSERROR(IDS_NOT_DATE)
555 #define JS_E_NUMBER_EXPECTED MAKE_JSERROR(IDS_NOT_NUM)
556 #define JS_E_OBJECT_EXPECTED MAKE_JSERROR(IDS_OBJECT_EXPECTED)
557 #define JS_E_ILLEGAL_ASSIGN MAKE_JSERROR(IDS_ILLEGAL_ASSIGN)
558 #define JS_E_UNDEFINED_VARIABLE MAKE_JSERROR(IDS_UNDEFINED)
559 #define JS_E_BOOLEAN_EXPECTED MAKE_JSERROR(IDS_NOT_BOOL)
560 #define JS_E_VBARRAY_EXPECTED MAKE_JSERROR(IDS_NOT_VBARRAY)
561 #define JS_E_INVALID_DELETE MAKE_JSERROR(IDS_INVALID_DELETE)
562 #define JS_E_JSCRIPT_EXPECTED MAKE_JSERROR(IDS_JSCRIPT_EXPECTED)
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 }
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:439
disp
Definition: i386-dis.c:3181
#define HRESULT
Definition: msvc.h:9
script_ctx_t * ctx
Definition: jscript.h:234
jsdisp_t * vbarray_constr
Definition: jscript.h:453
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:431
jsdisp_t * reference_error_constr
Definition: jscript.h:444
#define REFIID
Definition: guiddef.h:113
HRESULT disp_call(script_ctx_t *, IDispatch *, DISPID, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1157
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:217
const WCHAR * name
Definition: jscript.h:207
jsdisp_t * array_constr
Definition: jscript.h:438
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:170
static void vdisp_release(vdisp_t *vdisp)
Definition: jscript.h:148
static void lock_module(void)
Definition: jscript.h:586
jsdisp_t * to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:935
jsdisp_t * type_error_constr
Definition: jscript.h:447
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:443
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:508
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:210
HRESULT jsdisp_propput_name(jsdisp_t *, const WCHAR *, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1365
unsigned flags
Definition: jscript.h:384
const builtin_info_t * builtin_info
Definition: jscript.h:238
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:452
DWORD flags
Definition: jscript.h:142
struct _call_frame_t * call_ctx
Definition: jscript.h:410
HRESULT(* builtin_setter_t)(script_ctx_t *, jsdisp_t *, jsval_t)
Definition: jscript.h:202
#define INT32_MAX
Definition: jscript.h:512
union vdisp_t::@418 u
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:362
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:389
cc_ctx_t * cc
Definition: jscript.h:418
HRESULT throw_range_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:418
LONG ref
Definition: jscript.h:229
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:424
unsigned index
Definition: jscript.h:400
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:385
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:326
HRESULT jsdisp_propget_name(jsdisp_t *, LPCWSTR, jsval_t *) DECLSPEC_HIDDEN
builtin_invoke_t invoke
Definition: jscript.h:208
jsdisp_t * syntax_error_constr
Definition: jscript.h:446
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:188
jsdisp_t * error_constr
Definition: jscript.h:441
jsdisp_t * regexp_error_constr
Definition: jscript.h:445
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:601
DWORD flags
Definition: jscript.h:209
unsigned int UINT32
IDispatchEx IDispatchEx_iface
Definition: jscript.h:227
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:497
#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:429
HRESULT throw_eval_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
match_result_t match_parens[9]
Definition: jscript.h:432
jsdisp_t * number_constr
Definition: jscript.h:449
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:396
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:415
BOOL explicit_setter
Definition: jscript.h:390
jsdisp_t * jsdisp
Definition: jscript.h:140
IServiceProvider IServiceProvider_iface
Definition: jscript.h:374
jsdisp_t * regexp_constr
Definition: jscript.h:451
#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:520
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:419
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:195
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:163
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:138
DWORD safeopt
Definition: jscript.h:414
__wchar_t WCHAR
Definition: xmlstorage.h:180
IDispatchEx * dispex
Definition: jscript.h:139
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:502
builtin_prop_t value_prop
Definition: jscript.h:216
HRESULT create_array(script_ctx_t *, DWORD, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1310
unsigned stack_top
Definition: jscript.h:428
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:433
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:376
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:258
SCRIPTSTATE state
Definition: jscript.h:407
#define VDISP_DISPEX
Definition: jscript.h:145
const builtin_prop_t * props
Definition: jscript.h:218
GLbitfield flags
Definition: glext.h:7161
HINSTANCE jscript_hinstance DECLSPEC_HIDDEN
Definition: jscript.h:584
jsdisp_t * object_constr
Definition: jscript.h:450
HRESULT jsdisp_define_data_property(jsdisp_t *, const WCHAR *, unsigned, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1794
IActiveScript * active_script
Definition: jscript.h:408
DWORD prop_cnt
Definition: jscript.h:232
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:215
HRESULT throw_regexp_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:428
heap_pool_t tmp_heap
Definition: jscript.h:422
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:359
static BOOL is_dispex(vdisp_t *vdisp)
Definition: jscript.h:158
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:426
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:241
dispex_prop_t * props
Definition: jscript.h:233
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:378
jsdisp_t * function_constr
Definition: jscript.h:437
#define InterlockedIncrement
Definition: armddk.h:53
hint_t
Definition: jscript.h:332
void ** blocks
Definition: jscript.h:58
BOOL html_mode
Definition: jscript.h:416
jsclass_t
Definition: jscript.h:116
LPWSTR name
Definition: jscript.h:360
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:412
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:358
jsdisp_t * date_constr
Definition: jscript.h:440
IInternetHostSecurityManager * secmgr
Definition: jscript.h:413
DWORD last_block
Definition: jscript.h:60
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:264
jsdisp_t * global
Definition: jscript.h:436
DWORD last_match_length
Definition: jscript.h:434
static void script_addref(script_ctx_t *ctx)
Definition: jscript.h:459
HRESULT to_string(script_ctx_t *, jsval_t, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:749
static void unlock_module(void)
Definition: jscript.h:591
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:368
DWORD buf_size
Definition: jscript.h:231
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:201
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:401
jsdisp_t * prototype
Definition: jscript.h:236
named_item_t * named_items
Definition: jscript.h:411
#define VDISP_JSDISP
Definition: jscript.h:146
builtin_setter_t setter
Definition: jscript.h:211
jsval_t value
Definition: jscript.h:387
EXCEPINFO ei
Definition: jscript.h:395
jsdisp_t * eval_error_constr
Definition: jscript.h:442
WCHAR * LPWSTR
Definition: xmlstorage.h:184
heap_pool_t * heap_pool_mark(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:180
#define FACILITY_JSCRIPT
Definition: jscript.h:525
static LPWSTR heap_strdupW(LPCWSTR str)
Definition: jscript.h:73
static BOOL is_int32(double d)
Definition: jscript.h:515
HRESULT create_vbarray(script_ctx_t *, SAFEARRAY *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:347
jsdisp_t * uri_error_constr
Definition: jscript.h:448
DWORD block_cnt
Definition: jscript.h:59
BOOL explicit_value
Definition: jscript.h:386
jsexcept_t ei
Definition: jscript.h:420
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:388
static BOOL is_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:153
#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:200
jsdisp_t * setter
Definition: jscript.h:391
const char * debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN
Definition: jsutils.c:33
unsigned stack_size
Definition: jscript.h:427
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