ReactOS 0.4.16-dev-297-gc569aee
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
54typedef struct _jsval_t jsval_t;
55typedef struct _jsstr_t jsstr_t;
59
60typedef struct {
61 void **blocks;
66 struct list custom_blocks;
68
75
77{
78 LPWSTR ret = NULL;
79
80 if(str) {
81 DWORD size;
82
83 size = (lstrlenW(str)+1)*sizeof(WCHAR);
85 if(ret)
86 memcpy(ret, str, size);
87 }
88
89 return ret;
90}
91
92typedef 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 */
119typedef enum {
137
139
140typedef struct {
141 union {
145 } u;
147} vdisp_t;
148
149#define VDISP_DISPEX 0x0001
150#define VDISP_JSDISP 0x0002
151
152static inline void vdisp_release(vdisp_t *vdisp)
153{
154 IDispatch_Release(vdisp->u.disp);
155}
156
157static inline BOOL is_jsdisp(vdisp_t *vdisp)
158{
159 return (vdisp->flags & VDISP_JSDISP) != 0;
160}
161
162static inline BOOL is_dispex(vdisp_t *vdisp)
163{
164 return (vdisp->flags & VDISP_DISPEX) != 0;
165}
166
167static inline void set_jsdisp(vdisp_t *vdisp, jsdisp_t *jsdisp)
168{
169 vdisp->u.jsdisp = jsdisp;
171 IDispatch_AddRef(vdisp->u.disp);
172}
173
174static inline void set_disp(vdisp_t *vdisp, IDispatch *disp)
175{
176 IDispatchEx *dispex;
177 jsdisp_t *jsdisp;
179
180 jsdisp = iface_to_jsdisp(disp);
181 if(jsdisp) {
182 vdisp->u.jsdisp = jsdisp;
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
199static inline jsdisp_t *get_jsdisp(vdisp_t *vdisp)
200{
201 return is_jsdisp(vdisp) ? vdisp->u.jsdisp : NULL;
202}
203
207
209
210typedef struct {
211 const WCHAR *name;
217
218typedef struct {
223 void (*destructor)(jsdisp_t*);
224 void (*on_put)(jsdisp_t*,const WCHAR*);
225 unsigned (*idx_length)(jsdisp_t*);
229
230struct jsdisp_t {
232
234
239
241
243};
244
245static 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 */
262static inline jsdisp_t *jsdisp_addref(jsdisp_t *jsdisp)
263{
264 jsdisp->ref++;
265 return jsdisp;
266}
267
268static 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
337typedef enum {
342
352
354
356
358
361
362typedef struct named_item_t {
366
369
370typedef struct _cc_var_t cc_var_t;
371
372typedef struct {
374} cc_ctx_t;
375
377
378typedef struct {
380
382
384} JSCaller;
385
386#include "jsval.h"
387
389 unsigned flags;
390 unsigned mask;
397};
398
399typedef struct {
400 EXCEPINFO ei;
402} jsexcept_t;
403
404typedef 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
465static 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
494struct match_state_t;
498
501
503
504static inline BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
505{
506 return jsdisp->builtin_info->class == class;
507}
508
509static inline BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
510{
511 return is_jsdisp(vdisp) && is_class(vdisp->u.jsdisp, class);
512}
513
514static 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
580const char *debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN;
581
583
585
586static inline void lock_module(void)
587{
589}
590
591static inline void unlock_module(void)
592{
594}
unsigned int UINT32
enum tagSCRIPTSTATE SCRIPTSTATE
static void * heap_alloc(size_t len)
Definition: appwiz.h:66
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
Definition: list.h:37
#define NULL
Definition: types.h:112
unsigned short VARTYPE
Definition: compat.h:2254
#define lstrlenW
Definition: compat.h:750
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLsizeiptr size
Definition: glext.h:5919
GLbitfield flags
Definition: glext.h:7161
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
LONG module_ref
Definition: ieframe_main.c:31
#define INT32_MAX
Definition: intsafe.h:151
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define INT32_MIN
Definition: intsafe.h:124
void * heap_pool_alloc(heap_pool_t *, DWORD) __WINE_ALLOC_SIZE(2) DECLSPEC_HIDDEN
Definition: jsutils.c:77
HRESULT throw_regexp_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:430
HRESULT jsdisp_get_id(jsdisp_t *, const WCHAR *, DWORD, DISPID *) DECLSPEC_HIDDEN
Definition: dispex.c:1067
HRESULT jsdisp_next_prop(jsdisp_t *, DISPID, BOOL, DISPID *) DECLSPEC_HIDDEN
Definition: dispex.c:1546
HRESULT create_number(script_ctx_t *, double, jsdisp_t **) DECLSPEC_HIDDEN
Definition: number.c:632
HRESULT init_dispex(jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:919
static BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
Definition: jscript.h:509
HRESULT(* builtin_invoke_t)(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *)
Definition: jscript.h:204
HRESULT create_string(script_ctx_t *, jsstr_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1787
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:731
HRESULT jsdisp_call_name(jsdisp_t *, const WCHAR *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1124
HRESULT create_dispex(script_ctx_t *, const builtin_info_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: dispex.c:957
HRESULT create_jscript_object(BOOL, REFIID, void **) DECLSPEC_HIDDEN
Definition: jscript.c:1072
HRESULT disp_call_value(script_ctx_t *, IDispatch *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1228
void heap_pool_clear(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:146
HRESULT create_regexp_var(script_ctx_t *, jsval_t, jsval_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:674
void jsdisp_free(jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:976
HRESULT init_global(script_ctx_t *) DECLSPEC_HIDDEN
Definition: global.c:1105
void heap_pool_free(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:169
HRESULT throw_type_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:440
HRESULT create_array_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1364
unsigned array_get_length(jsdisp_t *) DECLSPEC_HIDDEN
Definition: array.c:73
static void set_disp(vdisp_t *vdisp, IDispatch *disp)
Definition: jscript.h:174
HRESULT JSGlobal_eval(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: global.c:183
HRESULT create_object_prototype(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:726
HRESULT jsdisp_get_own_property(jsdisp_t *, const WCHAR *, BOOL, property_desc_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1633
hint_t
Definition: jscript.h:337
@ NO_HINT
Definition: jscript.h:338
@ HINT_NUMBER
Definition: jscript.h:340
@ HINT_STRING
Definition: jscript.h:339
HRESULT Function_value(script_ctx_t *, vdisp_t *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:471
HRESULT create_number_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: number.c:613
heap_pool_t * heap_pool_mark(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:182
HRESULT jsdisp_define_data_property(jsdisp_t *, const WCHAR *, unsigned, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1801
HRESULT to_object(script_ctx_t *, jsval_t, IDispatch **) DECLSPEC_HIDDEN
Definition: jsutils.c:816
jsdisp_t * iface_to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:1060
HRESULT throw_range_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:420
HRESULT jsval_strict_equal(jsval_t, jsval_t, BOOL *) DECLSPEC_HIDDEN
Definition: engine.c:531
HRESULT throw_eval_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
static void lock_module(void)
Definition: jscript.h:586
IUnknown * create_ax_site(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jscript.c:324
HRESULT create_bool(script_ctx_t *, BOOL, jsdisp_t **) DECLSPEC_HIDDEN
Definition: bool.c:216
HRESULT(* builtin_setter_t)(script_ctx_t *, jsdisp_t *, jsval_t)
Definition: jscript.h:206
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:268
#define FACILITY_JSCRIPT
Definition: jscript.h:524
#define VDISP_DISPEX
Definition: jscript.h:149
struct named_item_t named_item_t
HRESULT create_array(script_ctx_t *, DWORD, jsdisp_t **) DECLSPEC_HIDDEN
Definition: array.c:1381
jsdisp_t * to_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:914
HRESULT jsdisp_propput(jsdisp_t *, const WCHAR *, DWORD, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1332
HRESULT disp_propput(script_ctx_t *, IDispatch *, DISPID, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1359
HRESULT disp_delete(IDispatch *, DISPID, BOOL *) DECLSPEC_HIDDEN
Definition: dispex.c:1511
HRESULT(* builtin_getter_t)(script_ctx_t *, jsdisp_t *, jsval_t *)
Definition: jscript.h:205
static LPWSTR heap_strdupW(LPCWSTR str)
Definition: jscript.h:76
static void set_jsdisp(vdisp_t *vdisp, jsdisp_t *jsdisp)
Definition: jscript.h:167
HRESULT create_date_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: date.c:2534
HRESULT to_primitive(script_ctx_t *, jsval_t, jsval_t *, hint_t) DECLSPEC_HIDDEN
Definition: jsutils.c:404
HRESULT to_number(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:609
HRESULT create_vbarray_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:330
void * heap_pool_grow(heap_pool_t *, void *, DWORD, DWORD) DECLSPEC_HIDDEN
Definition: jsutils.c:130
HRESULT jsdisp_propget_name(jsdisp_t *, LPCWSTR, jsval_t *) DECLSPEC_HIDDEN
HRESULT to_int32(script_ctx_t *, jsval_t, INT *) DECLSPEC_HIDDEN
Definition: jsutils.c:665
static BOOL is_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:157
static void script_addref(script_ctx_t *ctx)
Definition: jscript.h:465
HRESULT regexp_match_next(script_ctx_t *, jsdisp_t *, DWORD, jsstr_t *, struct match_state_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:125
static void unlock_module(void)
Definition: jscript.h:591
void clear_ei(script_ctx_t *) DECLSPEC_HIDDEN
Definition: engine.c:430
static BOOL is_int32(double d)
Definition: jscript.h:514
HRESULT create_object_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:718
HRESULT decode_source(WCHAR *) DECLSPEC_HIDDEN
Definition: decode.c:111
HRESULT create_vbarray(script_ctx_t *, SAFEARRAY *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:347
HRESULT jsdisp_delete_idx(jsdisp_t *, DWORD) DECLSPEC_HIDDEN
Definition: dispex.c:1494
HRESULT throw_generic_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:415
#define VDISP_JSDISP
Definition: jscript.h:150
HRESULT init_function_constr(script_ctx_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: function.c:1010
HRESULT to_integer(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:648
HRESULT init_error_constr(script_ctx_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: error.c:328
static void vdisp_release(vdisp_t *vdisp)
Definition: jscript.h:152
HRESULT create_math(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: math.c:533
HRESULT parse_regexp_flags(const WCHAR *, DWORD, DWORD *) DECLSPEC_HIDDEN
Definition: jsregexp.c:1022
HRESULT throw_uri_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:445
static BOOL is_dispex(vdisp_t *vdisp)
Definition: jscript.h:162
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
HRESULT jsdisp_call(jsdisp_t *, DISPID, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1113
HRESULT Function_get_value(script_ctx_t *, jsdisp_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:487
HRESULT create_enumerator_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: enumerator.c:332
HRESULT create_json(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: json.c:837
HRESULT to_uint32(script_ctx_t *, jsval_t, UINT32 *) DECLSPEC_HIDDEN
Definition: jsutils.c:686
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
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:245
HRESULT create_bool_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: bool.c:198
HRESULT disp_propget(script_ctx_t *, IDispatch *, DISPID, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1458
static DWORD make_grfdex(script_ctx_t *ctx, DWORD flags)
Definition: jscript.h:519
HRESULT double_to_string(double, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:727
BOOL is_finite(double) DECLSPEC_HIDDEN
Definition: jsutils.c:58
static BOOL is_jscript_error(HRESULT hres)
Definition: jscript.h:575
void script_release(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jscript.c:67
void heap_pool_init(heap_pool_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:71
HRESULT jsdisp_define_property(jsdisp_t *, const WCHAR *, property_desc_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1677
HRESULT throw_reference_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:425
HRESULT jsdisp_propget(jsdisp_t *, DISPID, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1447
HRESULT init_dispex_from_constr(jsdisp_t *, script_ctx_t *, const builtin_info_t *, jsdisp_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1030
HINSTANCE jscript_hinstance DECLSPEC_HIDDEN
Definition: jscript.h:584
HRESULT create_jscaller(script_ctx_t *) DECLSPEC_HIDDEN
Definition: jsutils.c:1047
HRESULT disp_delete_name(script_ctx_t *, IDispatch *, jsstr_t *, BOOL *) DECLSPEC_HIDDEN
Definition: dispex.c:1574
HRESULT throw_syntax_error(script_ctx_t *, HRESULT, const WCHAR *) DECLSPEC_HIDDEN
Definition: error.c:435
jsclass_t
Definition: jscript.h:119
@ JSCLASS_ENUMERATOR
Definition: jscript.h:124
@ JSCLASS_JSON
Definition: jscript.h:135
@ JSCLASS_VBARRAY
Definition: jscript.h:134
@ JSCLASS_ARGUMENTS
Definition: jscript.h:133
@ JSCLASS_FUNCTION
Definition: jscript.h:126
@ JSCLASS_BOOLEAN
Definition: jscript.h:122
@ JSCLASS_STRING
Definition: jscript.h:132
@ JSCLASS_OBJECT
Definition: jscript.h:130
@ JSCLASS_ARRAY
Definition: jscript.h:121
@ JSCLASS_MATH
Definition: jscript.h:128
@ JSCLASS_NONE
Definition: jscript.h:120
@ JSCLASS_DATE
Definition: jscript.h:123
@ JSCLASS_ERROR
Definition: jscript.h:125
@ JSCLASS_GLOBAL
Definition: jscript.h:127
@ JSCLASS_NUMBER
Definition: jscript.h:129
@ JSCLASS_REGEXP
Definition: jscript.h:131
HRESULT jsdisp_propput_name(jsdisp_t *, const WCHAR *, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1344
HRESULT to_string(script_ctx_t *, jsval_t, jsstr_t **) DECLSPEC_HIDDEN
Definition: jsutils.c:757
HRESULT jsdisp_propput_idx(jsdisp_t *, DWORD, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:1349
jsdisp_t * as_jsdisp(IDispatch *) DECLSPEC_HIDDEN
Definition: dispex.c:908
static jsdisp_t * get_jsdisp(vdisp_t *vdisp)
Definition: jscript.h:199
void release_cc(cc_ctx_t *) DECLSPEC_HIDDEN
Definition: lex.c:817
HRESULT disp_call(script_ctx_t *, IDispatch *, DISPID, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1136
HRESULT create_regexp_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:1004
HRESULT regexp_string_match(script_ctx_t *, jsdisp_t *, jsstr_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: jsregexp.c:727
HRESULT Function_invoke(jsdisp_t *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: function.c:264
const char * debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN
Definition: jsutils.c:35
HRESULT create_string_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1769
static jsdisp_t * jsdisp_addref(jsdisp_t *jsdisp)
Definition: jscript.h:262
HRESULT builtin_set_const(script_ctx_t *, jsdisp_t *, jsval_t) DECLSPEC_HIDDEN
Definition: dispex.c:555
BOOL bool_obj_value(jsdisp_t *) DECLSPEC_HIDDEN
Definition: bool.c:52
HRESULT to_boolean(jsval_t, BOOL *) DECLSPEC_HIDDEN
Definition: jsutils.c:472
struct _jsval_t jsval_t
Definition: jscript.h:54
HRESULT to_flat_string(script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **) DECLSPEC_HIDDEN
Definition: jsutils.c:798
HRESULT create_regexp(script_ctx_t *, jsstr_t *, DWORD, jsdisp_t **) DECLSPEC_HIDDEN
Definition: jsregexp.c:644
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
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:504
HRESULT jsdisp_get_idx(jsdisp_t *, DWORD, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1425
HRESULT jsdisp_call_value(jsdisp_t *, IDispatch *, WORD, unsigned, jsval_t *, jsval_t *) DECLSPEC_HIDDEN
Definition: dispex.c:1089
HINSTANCE jscript_hinstance
Definition: jscript_main.c:39
#define d
Definition: ke_i.h:81
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HRESULT hres
Definition: protocol.c:465
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
Definition: string.c:80
static unsigned(__cdecl *hash_bstr)(bstr_t s)
static VARIANTARG static DISPID
Definition: ordinal.c:52
long LONG
Definition: pedump.c:60
#define REFIID
Definition: guiddef.h:118
const WCHAR * str
DWORD LCID
Definition: nls.h:13
#define inline
Definition: compat.h:23
LONG ref
Definition: jscript.h:381
script_ctx_t * ctx
Definition: jscript.h:383
IServiceProvider IServiceProvider_iface
Definition: jscript.h:379
Definition: lex.c:810
Definition: jsstr.h:39
Definition: jsval.h:54
BOOL explicit_setter
Definition: jscript.h:395
jsdisp_t * setter
Definition: jscript.h:396
unsigned flags
Definition: jscript.h:389
BOOL explicit_getter
Definition: jscript.h:393
BOOL explicit_value
Definition: jscript.h:391
unsigned mask
Definition: jscript.h:390
jsdisp_t * getter
Definition: jscript.h:394
jsval_t value
Definition: jscript.h:392
jsval_t acc
Definition: jscript.h:434
DWORD last_match_length
Definition: jscript.h:439
jsdisp_t * array_constr
Definition: jscript.h:443
heap_pool_t tmp_heap
Definition: jscript.h:427
BOOL html_mode
Definition: jscript.h:421
SCRIPTSTATE state
Definition: jscript.h:412
jsdisp_t * error_constr
Definition: jscript.h:447
IActiveScript * active_script
Definition: jscript.h:413
jsdisp_t * syntax_error_constr
Definition: jscript.h:452
jsdisp_t * string_constr
Definition: jscript.h:458
jsdisp_t * object_constr
Definition: jscript.h:456
IActiveScriptSite * site
Definition: jscript.h:417
jsdisp_t * regexp_error_constr
Definition: jscript.h:451
unsigned stack_top
Definition: jscript.h:433
jsval_t * stack
Definition: jscript.h:431
jsdisp_t * regexp_constr
Definition: jscript.h:457
jsdisp_t * range_error_constr
Definition: jscript.h:449
match_result_t match_parens[9]
Definition: jscript.h:437
struct _call_frame_t * call_ctx
Definition: jscript.h:415
JSCaller * jscaller
Definition: jscript.h:424
IDispatch * host_global
Definition: jscript.h:429
jsdisp_t * function_constr
Definition: jscript.h:442
DWORD last_match_index
Definition: jscript.h:438
jsdisp_t * vbarray_constr
Definition: jscript.h:459
jsdisp_t * date_constr
Definition: jscript.h:445
jsdisp_t * type_error_constr
Definition: jscript.h:453
jsdisp_t * enumerator_constr
Definition: jscript.h:446
jsstr_t * last_match
Definition: jscript.h:436
unsigned stack_size
Definition: jscript.h:432
jsdisp_t * global
Definition: jscript.h:441
jsdisp_t * uri_error_constr
Definition: jscript.h:454
named_item_t * named_items
Definition: jscript.h:416
jsdisp_t * bool_constr
Definition: jscript.h:444
jsdisp_t * reference_error_constr
Definition: jscript.h:450
DWORD safeopt
Definition: jscript.h:419
jsexcept_t ei
Definition: jscript.h:425
jsdisp_t * eval_error_constr
Definition: jscript.h:448
cc_ctx_t * cc
Definition: jscript.h:423
IInternetHostSecurityManager * secmgr
Definition: jscript.h:418
DWORD version
Definition: jscript.h:420
jsdisp_t * number_constr
Definition: jscript.h:455
const builtin_prop_t * props
Definition: jscript.h:222
builtin_prop_t value_prop
Definition: jscript.h:220
DWORD props_cnt
Definition: jscript.h:221
jsclass_t class
Definition: jscript.h:219
builtin_getter_t getter
Definition: jscript.h:214
const WCHAR * name
Definition: jscript.h:211
builtin_setter_t setter
Definition: jscript.h:215
DWORD flags
Definition: jscript.h:213
builtin_invoke_t invoke
Definition: jscript.h:212
cc_var_t * vars
Definition: jscript.h:373
DWORD offset
Definition: jscript.h:64
DWORD block_cnt
Definition: jscript.h:62
void ** blocks
Definition: jscript.h:61
BOOL mark
Definition: jscript.h:65
DWORD last_block
Definition: jscript.h:63
IDispatchEx IDispatchEx_iface
Definition: jscript.h:231
const builtin_info_t * builtin_info
Definition: jscript.h:242
DWORD buf_size
Definition: jscript.h:235
jsdisp_t * prototype
Definition: jscript.h:240
DWORD prop_cnt
Definition: jscript.h:236
LONG ref
Definition: jscript.h:233
dispex_prop_t * props
Definition: jscript.h:237
script_ctx_t * ctx
Definition: jscript.h:238
jsval_t val
Definition: jscript.h:401
EXCEPINFO ei
Definition: jscript.h:400
unsigned index
Definition: jscript.h:405
unsigned length
Definition: jscript.h:406
struct named_item_t * next
Definition: jscript.h:367
LPWSTR name
Definition: jscript.h:365
DWORD flags
Definition: jscript.h:364
IDispatch * disp
Definition: jscript.h:363
DWORD flags
Definition: jscript.h:146
IDispatchEx * dispex
Definition: jscript.h:143
union vdisp_t::@441 u
IDispatch * disp
Definition: jscript.h:142
jsdisp_t * jsdisp
Definition: jscript.h:144
int32_t INT
Definition: typedefs.h:58
int ret
#define HRESULT
Definition: msvc.h:7
#define HRESULT_FACILITY(hr)
Definition: winerror.h:79
#define __WINE_ALLOC_SIZE(x)
Definition: winnt_old.h:84
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185