ReactOS 0.4.17-dev-357-ga8f14ff
error.c File Reference
#include <math.h>
#include <assert.h>
#include <wchar.h>
#include "jscript.h"
#include "engine.h"
#include "wine/debug.h"
Include dependency graph for error.c:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
static HRESULT Error_toString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Error_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT alloc_error (script_ctx_t *ctx, jsdisp_t *prototype, jsdisp_t *constr, jsdisp_t **ret)
 
static HRESULT create_error (script_ctx_t *ctx, jsdisp_t *constr, UINT number, jsstr_t *msg, jsdisp_t **ret)
 
static HRESULT error_constr (script_ctx_t *ctx, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r, jsdisp_t *constr)
 
static HRESULT ErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT EvalErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT RangeErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT ReferenceErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT RegExpErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT SyntaxErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT TypeErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT URIErrorConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
HRESULT init_error_constr (script_ctx_t *ctx, jsdisp_t *object_prototype)
 
static jsstr_tformat_error_message (HRESULT error, const WCHAR *arg)
 
HRESULT throw_error (script_ctx_t *ctx, HRESULT error, const WCHAR *str)
 
void handle_dispatch_exception (script_ctx_t *ctx, EXCEPINFO *ei)
 
void set_error_location (jsexcept_t *ei, bytecode_t *code, unsigned loc, unsigned source_id, jsstr_t *line)
 
jsdisp_tcreate_builtin_error (script_ctx_t *ctx)
 

Variables

static const builtin_prop_t Error_props []
 
static const builtin_info_t Error_info
 
static const builtin_info_t ErrorInst_info
 

Function Documentation

◆ alloc_error()

static HRESULT alloc_error ( script_ctx_t ctx,
jsdisp_t prototype,
jsdisp_t constr,
jsdisp_t **  ret 
)
static

Definition at line 157 of file error.c.

159{
160 jsdisp_t *err;
162
163 err = calloc(1, sizeof(*err));
164 if(!err)
165 return E_OUTOFMEMORY;
166
167 if(prototype)
168 hres = init_dispex(err, ctx, &Error_info, prototype);
169 else
171 constr ? constr : ctx->error_constr);
172 if(FAILED(hres)) {
173 free(err);
174 return hres;
175 }
176
177 *ret = err;
178 return S_OK;
179}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
static const builtin_info_t Error_info
Definition: error.c:145
static const builtin_info_t ErrorInst_info
Definition: error.c:152
return ret
Definition: mutex.c:146
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *constr)
Definition: dispex.c:2512
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:2454
HRESULT hres
Definition: protocol.c:465
#define err(...)
#define calloc
Definition: rosglue.h:14

Referenced by create_error(), and init_error_constr().

◆ create_builtin_error()

jsdisp_t * create_builtin_error ( script_ctx_t ctx)

Definition at line 448 of file error.c.

449{
450 jsdisp_t *constr = ctx->error_constr, *r;
451 jsexcept_t *ei = ctx->ei;
453
454 assert(FAILED(ei->error) && ei->error != DISP_E_EXCEPTION);
455
456 if(is_jscript_error(ei->error)) {
457 switch(ei->error) {
458 case JS_E_SYNTAX:
472 case JS_E_DISABLED_CC:
473 case JS_E_EXPECTED_AT:
475 constr = ctx->syntax_error_constr;
476 break;
477
479 case JS_E_INVALIDARG:
483 case JS_E_MISSING_ARG:
504 case JS_E_WRONG_THIS:
509 constr = ctx->type_error_constr;
510 break;
511
518 constr = ctx->range_error_constr;
519 break;
520
522 constr = ctx->reference_error_constr;
523 break;
524
526 constr = ctx->regexp_error_constr;
527 break;
528
531 constr = ctx->uri_error_constr;
532 break;
533 }
534 }
535
536 hres = create_error(ctx, constr, ei->error, ei->message ? ei->message : jsstr_empty(), &r);
537 return SUCCEEDED(hres) ? r : NULL;
538}
#define NULL
Definition: types.h:112
static HRESULT create_error(script_ctx_t *ctx, jsdisp_t *constr, UINT number, jsstr_t *msg, jsdisp_t **ret)
Definition: error.c:181
#define assert(_expr)
Definition: assert.h:32
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define JS_E_DISABLED_CC
Definition: jscript.h:550
#define JS_E_MISSING_ARG
Definition: jscript.h:534
#define JS_E_INVALID_CHAR
Definition: jscript.h:542
#define JS_E_OBJECT_NOT_COLLECTION
Definition: jscript.h:535
#define JS_E_EXPECTED_CCEND
Definition: jscript.h:549
#define JS_E_ENUMERATOR_EXPECTED
Definition: jscript.h:562
#define JS_E_SYNTAX
Definition: jscript.h:536
#define JS_E_ILLEGAL_ASSIGN
Definition: jscript.h:556
#define JS_E_BOOLEAN_EXPECTED
Definition: jscript.h:558
#define JS_E_JSCRIPT_EXPECTED
Definition: jscript.h:561
#define JS_E_EXPECTED_IDENTIFIER
Definition: jscript.h:540
#define JS_E_PRECISION_OUT_OF_RANGE
Definition: jscript.h:570
#define JS_E_OBJECT_REQUIRED
Definition: jscript.h:530
#define JS_E_OBJECT_EXPECTED
Definition: jscript.h:555
#define JS_E_MISSING_RBRACKET
Definition: jscript.h:539
#define JS_E_CANNOT_CREATE_FOR_NONEXTENSIBLE
Definition: jscript.h:574
#define JS_E_SUBSCRIPT_OUT_OF_RANGE
Definition: jscript.h:528
#define JS_E_INVALID_BREAK
Definition: jscript.h:545
#define JS_E_MISPLACED_RETURN
Definition: jscript.h:544
#define JS_E_LABEL_REDEFINED
Definition: jscript.h:547
#define JS_E_ARRAYBUFFER_EXPECTED
Definition: jscript.h:584
#define JS_E_DATAVIEW_INVALID_OFFSET
Definition: jscript.h:581
#define JS_E_LABEL_NOT_FOUND
Definition: jscript.h:548
#define JS_E_INVALID_CONTINUE
Definition: jscript.h:546
#define JS_E_UNTERMINATED_STRING
Definition: jscript.h:543
#define JS_E_DATAVIEW_NO_ARGUMENT
Definition: jscript.h:579
#define JS_E_CYCLIC_PROTO_VALUE
Definition: jscript.h:573
#define JS_E_EXPECTED_ASSIGN
Definition: jscript.h:541
#define JS_E_FUNCTION_EXPECTED
Definition: jscript.h:552
#define JS_E_NOT_DATAVIEW
Definition: jscript.h:578
#define JS_E_INVALID_URI_CHAR
Definition: jscript.h:568
#define JS_E_INVALID_WRITABLE_PROP_DESC
Definition: jscript.h:586
#define JS_E_INVALID_URI_CODING
Definition: jscript.h:567
#define JS_E_MISSING_SEMICOLON
Definition: jscript.h:537
#define JS_E_KEY_NOT_OBJECT
Definition: jscript.h:583
#define JS_E_DATAVIEW_INVALID_ACCESS
Definition: jscript.h:580
#define JS_E_NONWRITABLE_MODIFIED
Definition: jscript.h:577
#define JS_E_VBARRAY_EXPECTED
Definition: jscript.h:559
#define JS_E_ARRAY_EXPECTED
Definition: jscript.h:572
#define JS_E_UNDEFINED_VARIABLE
Definition: jscript.h:557
#define JS_E_MISSING_LBRACKET
Definition: jscript.h:538
#define JS_E_NUMBER_EXPECTED
Definition: jscript.h:554
static BOOL is_jscript_error(HRESULT hres)
Definition: jscript.h:588
#define JS_E_REGEXP_SYNTAX
Definition: jscript.h:564
#define JS_E_NONCONFIGURABLE_REDEFINED
Definition: jscript.h:576
#define JS_E_INVALID_PROPERTY
Definition: jscript.h:532
#define JS_E_UNEXPECTED_QUANTIFIER
Definition: jscript.h:565
#define JS_E_INVALID_DELETE
Definition: jscript.h:560
#define JS_E_WRONG_THIS
Definition: jscript.h:582
#define JS_E_TO_PRIMITIVE
Definition: jscript.h:526
#define JS_E_DATE_EXPECTED
Definition: jscript.h:553
#define JS_E_INVALIDARG
Definition: jscript.h:527
#define JS_E_REGEXP_EXPECTED
Definition: jscript.h:563
#define JS_E_INVALID_ACTION
Definition: jscript.h:533
#define JS_E_EXPECTED_AT
Definition: jscript.h:551
#define JS_E_PROP_DESC_MISMATCH
Definition: jscript.h:585
#define JS_E_FRACTION_DIGITS_OUT_OF_RANGE
Definition: jscript.h:569
#define JS_E_INVALID_LENGTH
Definition: jscript.h:571
#define JS_E_OBJECT_NONEXTENSIBLE
Definition: jscript.h:575
jsstr_t * jsstr_empty(void)
Definition: jsstr.c:291
jsstr_t * message
Definition: engine.h:260
HRESULT error
Definition: engine.h:254
#define DISP_E_EXCEPTION
Definition: winerror.h:3621

Referenced by unwind_exception().

◆ create_error()

static HRESULT create_error ( script_ctx_t ctx,
jsdisp_t constr,
UINT  number,
jsstr_t msg,
jsdisp_t **  ret 
)
static

Definition at line 181 of file error.c.

183{
184 jsdisp_t *err;
186
187 hres = alloc_error(ctx, NULL, constr, &err);
188 if(FAILED(hres))
189 return hres;
190
193 if(FAILED(hres)) {
195 return hres;
196 }
197
201 if(SUCCEEDED(hres))
204 if(FAILED(hres)) {
206 return hres;
207 }
208
209 *ret = err;
210 return S_OK;
211}
#define msg(x)
Definition: auth_time.c:54
static HRESULT alloc_error(script_ctx_t *ctx, jsdisp_t *prototype, jsdisp_t *constr, jsdisp_t **ret)
Definition: error.c:157
#define L(x)
Definition: resources.c:13
HRESULT jsdisp_define_data_property(jsdisp_t *obj, const WCHAR *name, unsigned flags, jsval_t value)
Definition: dispex.c:3349
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
const unsigned int PROPF_WRITABLE
Definition: jsdisp.idl:37
const unsigned int PROPF_ENUMERABLE
Definition: jsdisp.idl:36
const unsigned int PROPF_CONFIGURABLE
Definition: jsdisp.idl:38
static jsval_t jsval_string(jsstr_t *str)
Definition: jsval.h:109
static jsval_t jsval_number(double n)
Definition: jsval.h:153
static unsigned int number
Definition: dsound.c:1479
int32_t INT
Definition: typedefs.h:58

Referenced by create_builtin_error(), error_constr(), and test_file_access().

◆ error_constr()

static HRESULT error_constr ( script_ctx_t ctx,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r,
jsdisp_t constr 
)
static

Definition at line 213 of file error.c.

214 {
215 jsdisp_t *err;
216 UINT num = 0;
217 jsstr_t *msg = NULL;
219
220 if(argc) {
221 double n;
222
223 hres = to_number(ctx, argv[0], &n);
224 if(FAILED(hres)) /* FIXME: really? */
225 n = NAN;
226 if(isnan(n))
227 hres = to_string(ctx, argv[0], &msg);
228 if(FAILED(hres))
229 return hres;
230 num = n;
231 }
232
233 if(!msg) {
234 if(argc > 1) {
235 hres = to_string(ctx, argv[1], &msg);
236 if(FAILED(hres))
237 return hres;
238 }else {
239 msg = jsstr_empty();
240 }
241 }
242
243 switch(flags) {
244 case INVOKE_FUNC:
245 case DISPATCH_CONSTRUCT:
246 hres = create_error(ctx, constr, num, msg, &err);
248 if(FAILED(hres))
249 return hres;
250
251 if(r)
252 *r = jsval_obj(err);
253 else
255 return S_OK;
256
257 default:
258 if(msg)
260 FIXME("unimplemented flags %x\n", flags);
261 return E_NOTIMPL;
262 }
263}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99
MonoAssembly int argc
Definition: metahost.c:107
#define isnan(x)
Definition: math.h:360
#define NAN
Definition: math.h:273
GLdouble n
Definition: glext.h:7729
GLbitfield flags
Definition: glext.h:7161
GLuint GLuint num
Definition: glext.h:9618
static HRESULT to_string(VARIANT *src, BSTR *dst)
Definition: host.c:46
HRESULT to_number(script_ctx_t *, jsval_t, double *)
Definition: jsutils.c:630
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
#define argv
Definition: mplay32.c:18
unsigned int UINT
Definition: ndis.h:50
Definition: jsstr.h:36

Referenced by ErrorConstr_value(), EvalErrorConstr_value(), RangeErrorConstr_value(), ReferenceErrorConstr_value(), RegExpErrorConstr_value(), SyntaxErrorConstr_value(), TypeErrorConstr_value(), and URIErrorConstr_value().

◆ Error_toString()

static HRESULT Error_toString ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 36 of file error.c.

38{
39 jsstr_t *name = NULL, *msg = NULL, *ret = NULL;
40 jsdisp_t *jsthis = NULL;
41 jsval_t v;
43
44 TRACE("\n");
45
46 if(is_object_instance(vthis))
47 jsthis = to_jsdisp(get_object(vthis));
48 else if(ctx->version >= SCRIPTLANGUAGEVERSION_ES5)
50
51 if(!jsthis || ctx->version < 2) {
52 if(r) {
53 jsstr_t *str;
54
55 str = jsstr_alloc(L"[object Error]");
56 if(!str)
57 return E_OUTOFMEMORY;
58 *r = jsval_string(str);
59 }
60 return S_OK;
61 }
62
63 hres = jsdisp_propget_name(jsthis, L"name", &v);
64 if(FAILED(hres))
65 return hres;
66
67 if(!is_undefined(v)) {
68 hres = to_string(ctx, v, &name);
70 if(FAILED(hres))
71 return hres;
72 }
73
74 hres = jsdisp_propget_name(jsthis, L"message", &v);
75 if(SUCCEEDED(hres)) {
76 if(!is_undefined(v)) {
77 hres = to_string(ctx, v, &msg);
79 }
80 }
81
82 if(SUCCEEDED(hres)) {
83 unsigned name_len = name ? jsstr_length(name) : 0;
84 unsigned msg_len = msg ? jsstr_length(msg) : 0;
85
86 if(name_len && msg_len) {
87 WCHAR *ptr;
88
89 ret = jsstr_alloc_buf(name_len + msg_len + 2, &ptr);
90 if(ret) {
92 ptr[name_len] = ':';
93 ptr[name_len+1] = ' ';
94 jsstr_flush(msg, ptr+name_len+2);
95 }else {
97 }
98 }else if(name_len) {
99 ret = name;
100 name = NULL;
101 }else if(msg_len) {
102 ret = msg;
103 msg = NULL;
104 }else {
105 ret = jsstr_alloc(L"[object Error]");
106 }
107 }
108
109 if(msg)
111 if(name)
113 if(FAILED(hres))
114 return hres;
115 if(!ret)
116 return E_OUTOFMEMORY;
117
118 if(r)
119 *r = jsval_string(ret);
120 else
122 return S_OK;
123}
const GLdouble * v
Definition: gl.h:2040
HRESULT jsdisp_propget_name(jsdisp_t *obj, const WCHAR *name, jsval_t *val)
Definition: dispex.c:2946
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
#define SCRIPTLANGUAGEVERSION_ES5
Definition: jscript.h:53
jsstr_t * jsstr_alloc_buf(unsigned len, WCHAR **buf)
Definition: jsstr.c:69
static unsigned jsstr_length(jsstr_t *str)
Definition: jsstr.h:55
static unsigned jsstr_flush(jsstr_t *str, WCHAR *buf)
Definition: jsstr.h:145
static jsstr_t * jsstr_alloc(const WCHAR *str)
Definition: jsstr.h:100
void jsval_release(jsval_t val)
Definition: jsutils.c:186
static BOOL is_undefined(jsval_t v)
Definition: jsval.h:180
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:175
static PVOID ptr
Definition: dispmode.c:27
short WCHAR
Definition: pedump.c:58
const WCHAR * str
#define TRACE(s)
Definition: solgame.cpp:4
Definition: jsval.h:54
Definition: name.c:39

◆ Error_value()

static HRESULT Error_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 125 of file error.c.

127{
128 TRACE("\n");
129
130 switch(flags) {
131 case INVOKE_FUNC:
133 default:
134 FIXME("unimplemented flags %x\n", flags);
135 return E_NOTIMPL;
136 }
137
138 return S_OK;
139}

◆ ErrorConstr_value()

static HRESULT ErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 265 of file error.c.

267{
268 TRACE("\n");
269 return error_constr(ctx, flags, argc, argv, r, ctx->error_constr);
270}
static HRESULT error_constr(script_ctx_t *ctx, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r, jsdisp_t *constr)
Definition: error.c:213

Referenced by init_error_constr().

◆ EvalErrorConstr_value()

static HRESULT EvalErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 272 of file error.c.

274{
275 TRACE("\n");
276 return error_constr(ctx, flags, argc, argv, r, ctx->eval_error_constr);
277}

Referenced by init_error_constr().

◆ format_error_message()

static jsstr_t * format_error_message ( HRESULT  error,
const WCHAR arg 
)
static

Definition at line 364 of file error.c.

365{
366 size_t len, arg_len = 0;
367 const WCHAR *res, *pos;
368 WCHAR *buf, *p;
369 jsstr_t *r;
370
372 return jsstr_empty();
373
375
376 pos = wmemchr(res, '|', len);
377 if(pos && arg)
378 arg_len = lstrlenW(arg);
379 r = jsstr_alloc_buf(len + arg_len - (pos ? 1 : 0), &buf);
380 if(!r)
381 return jsstr_empty();
382
383 p = buf;
384 if(pos > res) {
385 memcpy(p, res, (pos - res) * sizeof(WCHAR));
386 p += pos - res;
387 }
388 pos = pos ? pos + 1 : res;
389 if(arg_len) {
390 memcpy(p, arg, arg_len * sizeof(WCHAR));
391 p += arg_len;
392 }
393 if(pos != res + len)
394 memcpy(p, pos, (res + len - pos) * sizeof(WCHAR));
395 return r;
396}
#define lstrlenW
Definition: compat.h:750
static wchar_t * wmemchr(const wchar_t *s, wchar_t c, size_t n)
Definition: wchar.h:48
GLuint res
Definition: glext.h:9613
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
HINSTANCE jscript_hinstance
Definition: jscript_main.c:40
#define error(str)
Definition: mkdosfs.c:1605
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define LoadStringW
Definition: utils.h:64
#define HRESULT_CODE(hr)
Definition: winerror.h:188

Referenced by set_error_location(), and throw_error().

◆ handle_dispatch_exception()

void handle_dispatch_exception ( script_ctx_t ctx,
EXCEPINFO *  ei 
)

Definition at line 409 of file error.c.

410{
411 TRACE("%08lx %s %s\n", ei->scode, debugstr_w(ei->bstrSource), debugstr_w(ei->bstrDescription));
412
413 reset_ei(ctx->ei);
414 if(ei->pfnDeferredFillIn)
415 ei->pfnDeferredFillIn(ei);
416 ctx->ei->error = (SUCCEEDED(ei->scode) || ei->scode == DISP_E_EXCEPTION) ? E_FAIL : ei->scode;
417 if(ei->bstrSource)
418 ctx->ei->source = jsstr_alloc_len(ei->bstrSource, SysStringLen(ei->bstrSource));
419 if(ei->bstrDescription)
420 ctx->ei->message = jsstr_alloc_len(ei->bstrDescription, SysStringLen(ei->bstrDescription));
421 SysFreeString(ei->bstrSource);
422 SysFreeString(ei->bstrDescription);
423 SysFreeString(ei->bstrHelpFile);
424}
#define E_FAIL
Definition: ddrawi.h:102
void reset_ei(jsexcept_t *)
Definition: jscript.c:314
jsstr_t * jsstr_alloc_len(const WCHAR *buf, unsigned len)
Definition: jsstr.c:86
#define debugstr_w
Definition: kernel32.h:32
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:196
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271

Referenced by disp_invoke(), HostConstructor_call(), HostFunction_call(), HostObject_prop_get(), and HostObject_prop_put().

◆ init_error_constr()

HRESULT init_error_constr ( script_ctx_t ctx,
jsdisp_t object_prototype 
)

Definition at line 321 of file error.c.

322{
323 static const WCHAR *names[] = {L"Error", L"EvalError", L"RangeError",
324 L"ReferenceError", L"RegExpError", L"SyntaxError", L"TypeError", L"URIError"};
325 jsdisp_t **constr_addr[] = {&ctx->error_constr, &ctx->eval_error_constr,
326 &ctx->range_error_constr, &ctx->reference_error_constr, &ctx->regexp_error_constr,
327 &ctx->syntax_error_constr, &ctx->type_error_constr,
328 &ctx->uri_error_constr};
332
333 jsdisp_t *err;
334 unsigned int i;
335 jsstr_t *str;
337
338 for(i=0; i < ARRAY_SIZE(names); i++) {
339 hres = alloc_error(ctx, i==0 ? object_prototype : NULL, NULL, &err);
340 if(FAILED(hres))
341 return hres;
342
344 if(!str) {
346 return E_OUTOFMEMORY;
347 }
348
352 if(SUCCEEDED(hres))
353 hres = create_builtin_constructor(ctx, constr_val[i], names[i], NULL,
354 PROPF_CONSTR|1, err, constr_addr[i]);
355
357 if(FAILED(hres))
358 return hres;
359 }
360
361 return S_OK;
362}
#define ARRAY_SIZE(A)
Definition: main.h:20
static HRESULT RangeErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:279
static HRESULT TypeErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:307
static HRESULT EvalErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:272
static HRESULT SyntaxErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:300
static HRESULT ReferenceErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:286
static HRESULT RegExpErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:293
static HRESULT URIErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:314
static HRESULT ErrorConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:265
HRESULT create_builtin_constructor(script_ctx_t *ctx, builtin_invoke_t value_proc, const WCHAR *name, const builtin_info_t *builtin_info, DWORD flags, jsdisp_t *prototype, jsdisp_t **ret)
Definition: function.c:809
GLuint GLuint * names
Definition: glext.h:11545
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HRESULT(* builtin_invoke_t)(script_ctx_t *, jsval_t, WORD, unsigned, jsval_t *, jsval_t *)
Definition: jscript.h:129
const unsigned int PROPF_CONSTR
Definition: jsdisp.idl:34

Referenced by init_constructors().

◆ RangeErrorConstr_value()

static HRESULT RangeErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 279 of file error.c.

281{
282 TRACE("\n");
283 return error_constr(ctx, flags, argc, argv, r, ctx->range_error_constr);
284}

Referenced by init_error_constr().

◆ ReferenceErrorConstr_value()

static HRESULT ReferenceErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 286 of file error.c.

288{
289 TRACE("\n");
290 return error_constr(ctx, flags, argc, argv, r, ctx->reference_error_constr);
291}

Referenced by init_error_constr().

◆ RegExpErrorConstr_value()

static HRESULT RegExpErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 293 of file error.c.

295{
296 TRACE("\n");
297 return error_constr(ctx, flags, argc, argv, r, ctx->regexp_error_constr);
298}

Referenced by init_error_constr().

◆ set_error_location()

void set_error_location ( jsexcept_t ei,
bytecode_t code,
unsigned  loc,
unsigned  source_id,
jsstr_t line 
)

Definition at line 426 of file error.c.

427{
428 if(is_jscript_error(ei->error)) {
429 if(!ei->source) {
430 const WCHAR *res;
431 size_t len;
432
435 }
436 if(!ei->message)
438 }
439
440 TRACE("source %s in %s\n", debugstr_w(code->source + loc), debugstr_w(code->source));
441
443 ei->loc = loc;
444 if(line)
445 ei->line = jsstr_addref(line);
446}
static jsstr_t * format_error_message(HRESULT error, const WCHAR *arg)
Definition: error.c:364
static bytecode_t * bytecode_addref(bytecode_t *code)
Definition: engine.h:221
static jsstr_t * jsstr_addref(jsstr_t *str)
Definition: jsstr.h:113
static int source_id
Definition: solundo.cpp:15
unsigned loc
Definition: engine.h:264
bytecode_t * code
Definition: engine.h:263
jsstr_t * line
Definition: engine.h:261
jsstr_t * source
Definition: engine.h:259
Definition: inflate.c:139
Definition: parser.c:49

Referenced by compile_script(), and unwind_exception().

◆ SyntaxErrorConstr_value()

static HRESULT SyntaxErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 300 of file error.c.

302{
303 TRACE("\n");
304 return error_constr(ctx, flags, argc, argv, r, ctx->syntax_error_constr);
305}

Referenced by init_error_constr().

◆ throw_error()

◆ TypeErrorConstr_value()

static HRESULT TypeErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 307 of file error.c.

309{
310 TRACE("\n");
311 return error_constr(ctx, flags, argc, argv, r, ctx->type_error_constr);
312}

Referenced by init_error_constr().

◆ URIErrorConstr_value()

static HRESULT URIErrorConstr_value ( script_ctx_t ctx,
jsval_t  vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 314 of file error.c.

316{
317 TRACE("\n");
318 return error_constr(ctx, flags, argc, argv, r, ctx->uri_error_constr);
319}

Referenced by init_error_constr().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

Variable Documentation

◆ Error_info

const builtin_info_t Error_info
static
Initial value:
= {
.class = JSCLASS_ERROR,
.call = Error_value,
.props_cnt = ARRAY_SIZE(Error_props),
.props = Error_props,
}
static const builtin_prop_t Error_props[]
Definition: error.c:141
static HRESULT Error_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:125
@ JSCLASS_ERROR
Definition: jscript.h:108

Definition at line 145 of file error.c.

Referenced by alloc_error().

◆ Error_props

const builtin_prop_t Error_props[]
static
Initial value:
= {
}
static HRESULT Error_toString(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: error.c:36
const unsigned int PROPF_METHOD
Definition: jsdisp.idl:33

Definition at line 141 of file error.c.

◆ ErrorInst_info

const builtin_info_t ErrorInst_info
static
Initial value:
= {
.class = JSCLASS_ERROR,
.call = Error_value,
}

Definition at line 152 of file error.c.

Referenced by alloc_error().