ReactOS  0.4.14-dev-49-gfb4591c
global.c
Go to the documentation of this file.
1 /*
2  * Copyright 2008 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 #include "config.h"
20 #include "wine/port.h"
21 
22 #include <math.h>
23 #include <limits.h>
24 
25 #include "jscript.h"
26 #include "engine.h"
27 
28 #include "wine/debug.h"
29 
31 
32 static const WCHAR NaNW[] = {'N','a','N',0};
33 static const WCHAR InfinityW[] = {'I','n','f','i','n','i','t','y',0};
34 static const WCHAR ArrayW[] = {'A','r','r','a','y',0};
35 static const WCHAR BooleanW[] = {'B','o','o','l','e','a','n',0};
36 static const WCHAR DateW[] = {'D','a','t','e',0};
37 static const WCHAR ErrorW[] = {'E','r','r','o','r',0};
38 static const WCHAR EvalErrorW[] = {'E','v','a','l','E','r','r','o','r',0};
39 static const WCHAR RangeErrorW[] = {'R','a','n','g','e','E','r','r','o','r',0};
40 static const WCHAR ReferenceErrorW[] = {'R','e','f','e','r','e','n','c','e','E','r','r','o','r',0};
41 static const WCHAR SyntaxErrorW[] = {'S','y','n','t','a','x','E','r','r','o','r',0};
42 static const WCHAR TypeErrorW[] = {'T','y','p','e','E','r','r','o','r',0};
43 static const WCHAR URIErrorW[] = {'U','R','I','E','r','r','o','r',0};
44 static const WCHAR FunctionW[] = {'F','u','n','c','t','i','o','n',0};
45 static const WCHAR NumberW[] = {'N','u','m','b','e','r',0};
46 static const WCHAR ObjectW[] = {'O','b','j','e','c','t',0};
47 static const WCHAR StringW[] = {'S','t','r','i','n','g',0};
48 static const WCHAR RegExpW[] = {'R','e','g','E','x','p',0};
49 static const WCHAR RegExpErrorW[] = {'R','e','g','E','x','p','E','r','r','o','r',0};
50 static const WCHAR ActiveXObjectW[] = {'A','c','t','i','v','e','X','O','b','j','e','c','t',0};
51 static const WCHAR VBArrayW[] = {'V','B','A','r','r','a','y',0};
52 static const WCHAR EnumeratorW[] = {'E','n','u','m','e','r','a','t','o','r',0};
53 static const WCHAR escapeW[] = {'e','s','c','a','p','e',0};
54 static const WCHAR evalW[] = {'e','v','a','l',0};
55 static const WCHAR isNaNW[] = {'i','s','N','a','N',0};
56 static const WCHAR isFiniteW[] = {'i','s','F','i','n','i','t','e',0};
57 static const WCHAR parseIntW[] = {'p','a','r','s','e','I','n','t',0};
58 static const WCHAR parseFloatW[] = {'p','a','r','s','e','F','l','o','a','t',0};
59 static const WCHAR unescapeW[] = {'u','n','e','s','c','a','p','e',0};
60 static const WCHAR _GetObjectW[] = {'G','e','t','O','b','j','e','c','t',0};
61 static const WCHAR ScriptEngineW[] = {'S','c','r','i','p','t','E','n','g','i','n','e',0};
63  {'S','c','r','i','p','t','E','n','g','i','n','e','M','a','j','o','r','V','e','r','s','i','o','n',0};
65  {'S','c','r','i','p','t','E','n','g','i','n','e','M','i','n','o','r','V','e','r','s','i','o','n',0};
67  {'S','c','r','i','p','t','E','n','g','i','n','e','B','u','i','l','d','V','e','r','s','i','o','n',0};
68 static const WCHAR CollectGarbageW[] = {'C','o','l','l','e','c','t','G','a','r','b','a','g','e',0};
69 static const WCHAR MathW[] = {'M','a','t','h',0};
70 static const WCHAR JSONW[] = {'J','S','O','N',0};
71 static const WCHAR encodeURIW[] = {'e','n','c','o','d','e','U','R','I',0};
72 static const WCHAR decodeURIW[] = {'d','e','c','o','d','e','U','R','I',0};
73 static const WCHAR encodeURIComponentW[] = {'e','n','c','o','d','e','U','R','I','C','o','m','p','o','n','e','n','t',0};
74 static const WCHAR decodeURIComponentW[] = {'d','e','c','o','d','e','U','R','I','C','o','m','p','o','n','e','n','t',0};
75 
76 static const WCHAR undefinedW[] = {'u','n','d','e','f','i','n','e','d',0};
77 
78 static int uri_char_table[] = {
79  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 00-0f */
80  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 10-1f */
81  0,2,0,0,1,0,1,2,2,2,2,1,1,2,2,1, /* 20-2f */
82  2,2,2,2,2,2,2,2,2,2,1,1,0,1,0,1, /* 30-3f */
83  1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 40-4f */
84  2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,2, /* 50-5f */
85  0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* 60-6f */
86  2,2,2,2,2,2,2,2,2,2,2,0,0,0,2,0, /* 70-7f */
87 };
88 
89 /* 1 - reserved */
90 /* 2 - unescaped */
91 
92 static inline BOOL is_uri_reserved(WCHAR c)
93 {
94  return c < 128 && uri_char_table[c] == 1;
95 }
96 
97 static inline BOOL is_uri_unescaped(WCHAR c)
98 {
99  return c < 128 && uri_char_table[c] == 2;
100 }
101 
102 /* Check that the character is one of the 69 non-blank characters as defined by ECMA-262 B.2.1 */
103 static inline BOOL is_ecma_nonblank(const WCHAR c)
104 {
105  return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') ||
106  c == '@' || c == '*' || c == '_' || c == '+' || c == '-' || c == '.' || c == '/');
107 }
108 
109 static WCHAR int_to_char(int i)
110 {
111  if(i < 10)
112  return '0'+i;
113  return 'A'+i-10;
114 }
115 
117  jsval_t *r)
118 {
119  jsstr_t *ret_str, *str;
120  const WCHAR *ptr, *buf;
121  DWORD len = 0;
122  WCHAR *ret;
123  HRESULT hres;
124 
125  TRACE("\n");
126 
127  if(!argc) {
128  if(r)
130  return S_OK;
131  }
132 
133  hres = to_flat_string(ctx, argv[0], &str, &buf);
134  if(FAILED(hres))
135  return hres;
136 
137  for(ptr = buf; *ptr; ptr++) {
138  if(*ptr > 0xff)
139  len += 6;
140  else if(is_ecma_nonblank(*ptr))
141  len++;
142  else
143  len += 3;
144  }
145 
146  ret_str = jsstr_alloc_buf(len, &ret);
147  if(!ret_str) {
149  return E_OUTOFMEMORY;
150  }
151 
152  len = 0;
153  for(ptr = buf; *ptr; ptr++) {
154  if(*ptr > 0xff) {
155  ret[len++] = '%';
156  ret[len++] = 'u';
157  ret[len++] = int_to_char(*ptr >> 12);
158  ret[len++] = int_to_char((*ptr >> 8) & 0xf);
159  ret[len++] = int_to_char((*ptr >> 4) & 0xf);
160  ret[len++] = int_to_char(*ptr & 0xf);
161  }
162  else if(is_ecma_nonblank(*ptr))
163  ret[len++] = *ptr;
164  else {
165  ret[len++] = '%';
166  ret[len++] = int_to_char(*ptr >> 4);
167  ret[len++] = int_to_char(*ptr & 0xf);
168  }
169  }
170 
172 
173  if(r)
174  *r = jsval_string(ret_str);
175  else
176  jsstr_release(ret_str);
177  return S_OK;
178 }
179 
180 /* ECMA-262 3rd Edition 15.1.2.1 */
182  jsval_t *r)
183 {
184  call_frame_t *frame;
185  DWORD exec_flags = EXEC_EVAL;
186  bytecode_t *code;
187  const WCHAR *src;
188  HRESULT hres;
189 
190  TRACE("\n");
191 
192  if(!argc) {
193  if(r)
194  *r = jsval_undefined();
195  return S_OK;
196  }
197 
198  if(!is_string(argv[0])) {
199  if(r)
200  return jsval_copy(argv[0], r);
201  return S_OK;
202  }
203 
204  if(!(frame = ctx->call_ctx)) {
205  FIXME("No active exec_ctx\n");
206  return E_UNEXPECTED;
207  }
208 
210  if(!src)
211  return E_OUTOFMEMORY;
212 
213  TRACE("parsing %s\n", debugstr_jsval(argv[0]));
214  hres = compile_script(ctx, src, NULL, NULL, TRUE, FALSE, &code);
215  if(FAILED(hres)) {
216  WARN("parse (%s) failed: %08x\n", debugstr_jsval(argv[0]), hres);
217  return throw_syntax_error(ctx, hres, NULL);
218  }
219 
220  if(frame->flags & EXEC_GLOBAL)
221  exec_flags |= EXEC_GLOBAL;
223  exec_flags |= EXEC_RETURN_TO_INTERP;
224  hres = exec_source(ctx, exec_flags, code, &code->global_code, frame->scope,
225  frame->this_obj, NULL, frame->variable_obj, 0, NULL, r);
227  return hres;
228 }
229 
231  jsval_t *r)
232 {
233  BOOL ret = TRUE;
234  double n;
235  HRESULT hres;
236 
237  TRACE("\n");
238 
239  if(argc) {
240  hres = to_number(ctx, argv[0], &n);
241  if(FAILED(hres))
242  return hres;
243 
244  if(!isnan(n))
245  ret = FALSE;
246  }
247 
248  if(r)
249  *r = jsval_bool(ret);
250  return S_OK;
251 }
252 
254  jsval_t *r)
255 {
256  BOOL ret = FALSE;
257  HRESULT hres;
258 
259  TRACE("\n");
260 
261  if(argc) {
262  double n;
263 
264  hres = to_number(ctx, argv[0], &n);
265  if(FAILED(hres))
266  return hres;
267 
268  ret = is_finite(n);
269  }
270 
271  if(r)
272  *r = jsval_bool(ret);
273  return S_OK;
274 }
275 
277 {
278  if('0' <= c && c <= '9')
279  return c - '0';
280  if('a' <= c && c <= 'z')
281  return c - 'a' + 10;
282  if('A' <= c && c <= 'Z')
283  return c - 'A' + 10;
284  return 100;
285 }
286 
288  jsval_t *r)
289 {
290  BOOL neg = FALSE, empty = TRUE;
291  const WCHAR *ptr;
292  DOUBLE ret = 0.0;
293  INT radix=0, i;
294  jsstr_t *str;
295  HRESULT hres;
296 
297  if(!argc) {
298  if(r)
299  *r = jsval_number(NAN);
300  return S_OK;
301  }
302 
303  if(argc >= 2) {
304  hres = to_int32(ctx, argv[1], &radix);
305  if(FAILED(hres))
306  return hres;
307 
308  if(radix && (radix < 2 || radix > 36)) {
309  WARN("radix %d out of range\n", radix);
310  if(r)
311  *r = jsval_number(NAN);
312  return S_OK;
313  }
314  }
315 
316  hres = to_flat_string(ctx, argv[0], &str, &ptr);
317  if(FAILED(hres))
318  return hres;
319 
320  while(isspaceW(*ptr))
321  ptr++;
322 
323  switch(*ptr) {
324  case '+':
325  ptr++;
326  break;
327  case '-':
328  neg = TRUE;
329  ptr++;
330  break;
331  }
332 
333  if(!radix) {
334  if(*ptr == '0') {
335  if(ptr[1] == 'x' || ptr[1] == 'X') {
336  radix = 16;
337  ptr += 2;
338  }else {
339  radix = 8;
340  ptr++;
341  empty = FALSE;
342  }
343  }else {
344  radix = 10;
345  }
346  }
347 
348  i = char_to_int(*ptr++);
349  if(i < radix) {
350  do {
351  ret = ret*radix + i;
352  i = char_to_int(*ptr++);
353  }while(i < radix);
354  }else if(empty) {
355  ret = NAN;
356  }
357 
359 
360  if(neg)
361  ret = -ret;
362 
363  if(r)
364  *r = jsval_number(ret);
365  return S_OK;
366 }
367 
369  jsval_t *r)
370 {
371  LONGLONG d = 0, hlp;
372  jsstr_t *val_str;
373  int exp = 0;
374  const WCHAR *str;
375  BOOL ret_nan = TRUE, positive = TRUE;
376  HRESULT hres;
377 
378  if(!argc) {
379  if(r)
380  *r = jsval_number(NAN);
381  return S_OK;
382  }
383 
384  hres = to_flat_string(ctx, argv[0], &val_str, &str);
385  if(FAILED(hres))
386  return hres;
387 
388  while(isspaceW(*str)) str++;
389 
390  if(*str == '+')
391  str++;
392  else if(*str == '-') {
393  positive = FALSE;
394  str++;
395  }
396 
397  if(isdigitW(*str))
398  ret_nan = FALSE;
399 
400  while(isdigitW(*str)) {
401  hlp = d*10 + *(str++) - '0';
402  if(d>MAXLONGLONG/10 || hlp<0) {
403  exp++;
404  break;
405  }
406  else
407  d = hlp;
408  }
409  while(isdigitW(*str)) {
410  exp++;
411  str++;
412  }
413 
414  if(*str == '.') str++;
415 
416  if(isdigitW(*str))
417  ret_nan = FALSE;
418 
419  while(isdigitW(*str)) {
420  hlp = d*10 + *(str++) - '0';
421  if(d>MAXLONGLONG/10 || hlp<0)
422  break;
423 
424  d = hlp;
425  exp--;
426  }
427  while(isdigitW(*str))
428  str++;
429 
430  if(*str && !ret_nan && (*str=='e' || *str=='E')) {
431  int sign = 1, e = 0;
432 
433  str++;
434  if(*str == '+')
435  str++;
436  else if(*str == '-') {
437  sign = -1;
438  str++;
439  }
440 
441  while(isdigitW(*str)) {
442  if(e>INT_MAX/10 || (e = e*10 + *str++ - '0')<0)
443  e = INT_MAX;
444  }
445  e *= sign;
446 
447  if(exp<0 && e<0 && exp+e>0) exp = INT_MIN;
448  else if(exp>0 && e>0 && exp+e<0) exp = INT_MAX;
449  else exp += e;
450  }
451 
452  jsstr_release(val_str);
453 
454  if(ret_nan) {
455  if(r)
456  *r = jsval_number(NAN);
457  return S_OK;
458  }
459 
460  if(!positive)
461  d = -d;
462  if(r)
463  *r = jsval_number(exp>0 ? d*pow(10, exp) : d/pow(10, -exp));
464  return S_OK;
465 }
466 
467 static inline int hex_to_int(const WCHAR wch) {
468  if(toupperW(wch)>='A' && toupperW(wch)<='F') return toupperW(wch)-'A'+10;
469  if(isdigitW(wch)) return wch-'0';
470  return -1;
471 }
472 
474  jsval_t *r)
475 {
476  jsstr_t *ret_str, *str;
477  const WCHAR *ptr, *buf;
478  DWORD len = 0;
479  WCHAR *ret;
480  HRESULT hres;
481 
482  TRACE("\n");
483 
484  if(!argc) {
485  if(r)
487  return S_OK;
488  }
489 
490  hres = to_flat_string(ctx, argv[0], &str, &buf);
491  if(FAILED(hres))
492  return hres;
493 
494  for(ptr = buf; *ptr; ptr++) {
495  if(*ptr == '%') {
496  if(hex_to_int(*(ptr+1))!=-1 && hex_to_int(*(ptr+2))!=-1)
497  ptr += 2;
498  else if(*(ptr+1)=='u' && hex_to_int(*(ptr+2))!=-1 && hex_to_int(*(ptr+3))!=-1
499  && hex_to_int(*(ptr+4))!=-1 && hex_to_int(*(ptr+5))!=-1)
500  ptr += 5;
501  }
502 
503  len++;
504  }
505 
506  ret_str = jsstr_alloc_buf(len, &ret);
507  if(!ret_str) {
509  return E_OUTOFMEMORY;
510  }
511 
512  len = 0;
513  for(ptr = buf; *ptr; ptr++) {
514  if(*ptr == '%') {
515  if(hex_to_int(*(ptr+1))!=-1 && hex_to_int(*(ptr+2))!=-1) {
516  ret[len] = (hex_to_int(*(ptr+1))<<4) + hex_to_int(*(ptr+2));
517  ptr += 2;
518  }
519  else if(*(ptr+1)=='u' && hex_to_int(*(ptr+2))!=-1 && hex_to_int(*(ptr+3))!=-1
520  && hex_to_int(*(ptr+4))!=-1 && hex_to_int(*(ptr+5))!=-1) {
521  ret[len] = (hex_to_int(*(ptr+2))<<12) + (hex_to_int(*(ptr+3))<<8)
522  + (hex_to_int(*(ptr+4))<<4) + hex_to_int(*(ptr+5));
523  ptr += 5;
524  }
525  else
526  ret[len] = *ptr;
527  }
528  else
529  ret[len] = *ptr;
530 
531  len++;
532  }
533 
535 
536  if(r)
537  *r = jsval_string(ret_str);
538  else
539  jsstr_release(ret_str);
540  return S_OK;
541 }
542 
544  jsval_t *r)
545 {
546  FIXME("\n");
547  return E_NOTIMPL;
548 }
549 
551  jsval_t *r)
552 {
553  static const WCHAR JScriptW[] = {'J','S','c','r','i','p','t',0};
554 
555  TRACE("\n");
556 
557  if(r) {
558  jsstr_t *ret;
559 
560  ret = jsstr_alloc(JScriptW);
561  if(!ret)
562  return E_OUTOFMEMORY;
563 
564  *r = jsval_string(ret);
565  }
566 
567  return S_OK;
568 }
569 
571  jsval_t *r)
572 {
573  TRACE("\n");
574 
575  if(r)
577  return S_OK;
578 }
579 
581  jsval_t *r)
582 {
583  TRACE("\n");
584 
585  if(r)
587  return S_OK;
588 }
589 
591  jsval_t *r)
592 {
593  TRACE("\n");
594 
595  if(r)
597  return S_OK;
598 }
599 
601  jsval_t *r)
602 {
603  static int once = 0;
604  if (!once++)
605  FIXME(": stub\n");
606  return S_OK;
607 }
608 
610  jsval_t *r)
611 {
612  const WCHAR *ptr, *uri;
613  jsstr_t *str, *ret;
614  DWORD len = 0, i;
615  char buf[4];
616  WCHAR *rptr;
617  HRESULT hres;
618 
619  TRACE("\n");
620 
621  if(!argc) {
622  if(r)
624  return S_OK;
625  }
626 
627  hres = to_flat_string(ctx, argv[0], &str, &uri);
628  if(FAILED(hres))
629  return hres;
630 
631  for(ptr = uri; *ptr; ptr++) {
632  if(is_uri_unescaped(*ptr) || is_uri_reserved(*ptr) || *ptr == '#') {
633  len++;
634  }else {
635  i = WideCharToMultiByte(CP_UTF8, 0, ptr, 1, NULL, 0, NULL, NULL)*3;
636  if(!i) {
639  }
640 
641  len += i;
642  }
643  }
644 
645  ret = jsstr_alloc_buf(len, &rptr);
646  if(!ret) {
648  return E_OUTOFMEMORY;
649  }
650 
651  for(ptr = uri; *ptr; ptr++) {
652  if(is_uri_unescaped(*ptr) || is_uri_reserved(*ptr) || *ptr == '#') {
653  *rptr++ = *ptr;
654  }else {
655  len = WideCharToMultiByte(CP_UTF8, 0, ptr, 1, buf, sizeof(buf), NULL, NULL);
656  for(i=0; i<len; i++) {
657  *rptr++ = '%';
658  *rptr++ = int_to_char((BYTE)buf[i] >> 4);
659  *rptr++ = int_to_char(buf[i] & 0x0f);
660  }
661  }
662  }
663 
664  TRACE("%s -> %s\n", debugstr_jsstr(str), debugstr_jsstr(ret));
666 
667  if(r)
668  *r = jsval_string(ret);
669  else
671  return S_OK;
672 }
673 
675  jsval_t *r)
676 {
677  const WCHAR *ptr, *uri;
678  jsstr_t *str, *ret_str;
679  unsigned len = 0;
680  int i, val, res;
681  WCHAR *ret;
682  char buf[4];
683  WCHAR out;
684  HRESULT hres;
685 
686  TRACE("\n");
687 
688  if(!argc) {
689  if(r)
691  return S_OK;
692  }
693 
694  hres = to_flat_string(ctx, argv[0], &str, &uri);
695  if(FAILED(hres))
696  return hres;
697 
698  for(ptr = uri; *ptr; ptr++) {
699  if(*ptr != '%') {
700  len++;
701  }else {
702  res = 0;
703  for(i=0; i<4; i++) {
704  if(ptr[i*3]!='%' || hex_to_int(ptr[i*3+1])==-1 || (val=hex_to_int(ptr[i*3+2]))==-1)
705  break;
706  val += hex_to_int(ptr[i*3+1])<<4;
707  buf[i] = val;
708 
709  res = MultiByteToWideChar(CP_UTF8, 0, buf, i+1, &out, 1);
710  if(res)
711  break;
712  }
713 
714  if(!res) {
717  }
718 
719  ptr += i*3+2;
720  len++;
721  }
722  }
723 
724  ret_str = jsstr_alloc_buf(len, &ret);
725  if(!ret_str) {
727  return E_OUTOFMEMORY;
728  }
729 
730  for(ptr = uri; *ptr; ptr++) {
731  if(*ptr != '%') {
732  *ret++ = *ptr;
733  }else {
734  for(i=0; i<4; i++) {
735  if(ptr[i*3]!='%' || hex_to_int(ptr[i*3+1])==-1 || (val=hex_to_int(ptr[i*3+2]))==-1)
736  break;
737  val += hex_to_int(ptr[i*3+1])<<4;
738  buf[i] = val;
739 
740  res = MultiByteToWideChar(CP_UTF8, 0, buf, i+1, ret, 1);
741  if(res)
742  break;
743  }
744 
745  ptr += i*3+2;
746  ret++;
747  }
748  }
749 
750  TRACE("%s -> %s\n", debugstr_jsstr(str), debugstr_jsstr(ret_str));
752 
753  if(r)
754  *r = jsval_string(ret_str);
755  else
756  jsstr_release(ret_str);
757  return S_OK;
758 }
759 
761  jsval_t *r)
762 {
763  jsstr_t *str, *ret_str;
764  char buf[4];
765  const WCHAR *ptr, *uri;
766  DWORD len = 0, size, i;
767  WCHAR *ret;
768  HRESULT hres;
769 
770  TRACE("\n");
771 
772  if(!argc) {
773  if(r)
775  return S_OK;
776  }
777 
778  hres = to_flat_string(ctx, argv[0], &str, &uri);
779  if(FAILED(hres))
780  return hres;
781 
782  for(ptr = uri; *ptr; ptr++) {
783  if(is_uri_unescaped(*ptr))
784  len++;
785  else {
786  size = WideCharToMultiByte(CP_UTF8, 0, ptr, 1, NULL, 0, NULL, NULL);
787  if(!size) {
790  }
791  len += size*3;
792  }
793  }
794 
795  ret_str = jsstr_alloc_buf(len, &ret);
796  if(!ret_str) {
798  return E_OUTOFMEMORY;
799  }
800 
801  for(ptr = uri; *ptr; ptr++) {
802  if(is_uri_unescaped(*ptr)) {
803  *ret++ = *ptr;
804  }else {
805  size = WideCharToMultiByte(CP_UTF8, 0, ptr, 1, buf, sizeof(buf), NULL, NULL);
806  for(i=0; i<size; i++) {
807  *ret++ = '%';
808  *ret++ = int_to_char((BYTE)buf[i] >> 4);
809  *ret++ = int_to_char(buf[i] & 0x0f);
810  }
811  }
812  }
813 
815 
816  if(r)
817  *r = jsval_string(ret_str);
818  else
819  jsstr_release(ret_str);
820  return S_OK;
821 }
822 
823 /* ECMA-262 3rd Edition 15.1.3.2 */
825  jsval_t *r)
826 {
827  const WCHAR *ptr, *uri;
828  jsstr_t *str, *ret;
829  WCHAR *out_ptr;
830  DWORD len = 0;
831  HRESULT hres;
832 
833  TRACE("\n");
834 
835  if(!argc) {
836  if(r)
838  return S_OK;
839  }
840 
841  hres = to_flat_string(ctx, argv[0], &str, &uri);
842  if(FAILED(hres))
843  return hres;
844 
845  ptr = uri;
846  while(*ptr) {
847  if(*ptr == '%') {
848  char octets[4];
849  unsigned char mask = 0x80;
850  int i, size, num_bytes = 0;
851  if(hex_to_int(*(ptr+1)) < 0 || hex_to_int(*(ptr+2)) < 0) {
852  FIXME("Throw URIError: Invalid hex sequence\n");
854  return E_FAIL;
855  }
856  octets[0] = (hex_to_int(*(ptr+1)) << 4) + hex_to_int(*(ptr+2));
857  ptr += 3;
858  while(octets[0] & mask) {
859  mask = mask >> 1;
860  ++num_bytes;
861  }
862  if(num_bytes == 1 || num_bytes > 4) {
863  FIXME("Throw URIError: Invalid initial UTF character\n");
865  return E_FAIL;
866  }
867  for(i = 1; i < num_bytes; ++i) {
868  if(*ptr != '%'){
869  FIXME("Throw URIError: Incomplete UTF sequence\n");
871  return E_FAIL;
872  }
873  if(hex_to_int(*(ptr+1)) < 0 || hex_to_int(*(ptr+2)) < 0) {
874  FIXME("Throw URIError: Invalid hex sequence\n");
876  return E_FAIL;
877  }
878  octets[i] = (hex_to_int(*(ptr+1)) << 4) + hex_to_int(*(ptr+2));
879  ptr += 3;
880  }
882  num_bytes ? num_bytes : 1, NULL, 0);
883  if(size == 0) {
884  FIXME("Throw URIError: Invalid UTF sequence\n");
886  return E_FAIL;
887  }
888  len += size;
889  }else {
890  ++ptr;
891  ++len;
892  }
893  }
894 
895  ret = jsstr_alloc_buf(len, &out_ptr);
896  if(!ret) {
898  return E_OUTOFMEMORY;
899  }
900 
901  ptr = uri;
902  while(*ptr) {
903  if(*ptr == '%') {
904  char octets[4];
905  unsigned char mask = 0x80;
906  int i, size, num_bytes = 0;
907  octets[0] = (hex_to_int(*(ptr+1)) << 4) + hex_to_int(*(ptr+2));
908  ptr += 3;
909  while(octets[0] & mask) {
910  mask = mask >> 1;
911  ++num_bytes;
912  }
913  for(i = 1; i < num_bytes; ++i) {
914  octets[i] = (hex_to_int(*(ptr+1)) << 4) + hex_to_int(*(ptr+2));
915  ptr += 3;
916  }
918  num_bytes ? num_bytes : 1, out_ptr, len);
919  len -= size;
920  out_ptr += size;
921  }else {
922  *out_ptr++ = *ptr++;
923  --len;
924  }
925  }
926 
928 
929  if(r)
930  *r = jsval_string(ret);
931  else
933  return S_OK;
934 }
935 
936 static const builtin_prop_t JSGlobal_props[] = {
954 };
955 
958  {NULL, NULL, 0},
961  NULL,
962  NULL
963 };
964 
965 static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
966 {
967  HRESULT hres;
968 
969  hres = init_function_constr(ctx, object_prototype);
970  if(FAILED(hres))
971  return hres;
972 
974  jsval_obj(ctx->function_constr));
975  if(FAILED(hres))
976  return hres;
977 
978  hres = create_object_constr(ctx, object_prototype, &ctx->object_constr);
979  if(FAILED(hres))
980  return hres;
981 
983  jsval_obj(ctx->object_constr));
984  if(FAILED(hres))
985  return hres;
986 
987  hres = create_array_constr(ctx, object_prototype, &ctx->array_constr);
988  if(FAILED(hres))
989  return hres;
990 
992  jsval_obj(ctx->array_constr));
993  if(FAILED(hres))
994  return hres;
995 
996  hres = create_bool_constr(ctx, object_prototype, &ctx->bool_constr);
997  if(FAILED(hres))
998  return hres;
999 
1001  jsval_obj(ctx->bool_constr));
1002  if(FAILED(hres))
1003  return hres;
1004 
1005  hres = create_date_constr(ctx, object_prototype, &ctx->date_constr);
1006  if(FAILED(hres))
1007  return hres;
1008 
1010  jsval_obj(ctx->date_constr));
1011  if(FAILED(hres))
1012  return hres;
1013 
1014  hres = create_enumerator_constr(ctx, object_prototype, &ctx->enumerator_constr);
1015  if(FAILED(hres))
1016  return hres;
1017 
1020  if(FAILED(hres))
1021  return hres;
1022 
1023  hres = init_error_constr(ctx, object_prototype);
1024  if(FAILED(hres))
1025  return hres;
1026 
1028  jsval_obj(ctx->error_constr));
1029  if(FAILED(hres))
1030  return hres;
1031 
1034  if(FAILED(hres))
1035  return hres;
1036 
1039  if(FAILED(hres))
1040  return hres;
1041 
1044  if(FAILED(hres))
1045  return hres;
1046 
1049  if(FAILED(hres))
1050  return hres;
1051 
1054  if(FAILED(hres))
1055  return hres;
1056 
1059  if(FAILED(hres))
1060  return hres;
1061 
1063  jsval_obj(ctx->uri_error_constr));
1064  if(FAILED(hres))
1065  return hres;
1066 
1067  hres = create_number_constr(ctx, object_prototype, &ctx->number_constr);
1068  if(FAILED(hres))
1069  return hres;
1070 
1072  jsval_obj(ctx->number_constr));
1073  if(FAILED(hres))
1074  return hres;
1075 
1076  hres = create_regexp_constr(ctx, object_prototype, &ctx->regexp_constr);
1077  if(FAILED(hres))
1078  return hres;
1079 
1081  jsval_obj(ctx->regexp_constr));
1082  if(FAILED(hres))
1083  return hres;
1084 
1085  hres = create_string_constr(ctx, object_prototype, &ctx->string_constr);
1086  if(FAILED(hres))
1087  return hres;
1088 
1090  jsval_obj(ctx->string_constr));
1091  if(FAILED(hres))
1092  return hres;
1093 
1094  hres = create_vbarray_constr(ctx, object_prototype, &ctx->vbarray_constr);
1095  if(FAILED(hres))
1096  return hres;
1097 
1099  jsval_obj(ctx->vbarray_constr));
1100  if(FAILED(hres))
1101  return hres;
1102 
1103  return S_OK;
1104 }
1105 
1107 {
1108  unsigned const_flags = ctx->version >= SCRIPTLANGUAGEVERSION_ES5 ? 0 : PROPF_WRITABLE;
1109  jsdisp_t *math, *object_prototype, *constr;
1110  HRESULT hres;
1111 
1112  if(ctx->global)
1113  return S_OK;
1114 
1115  hres = create_dispex(ctx, &JSGlobal_info, NULL, &ctx->global);
1116  if(FAILED(hres))
1117  return hres;
1118 
1119  hres = create_object_prototype(ctx, &object_prototype);
1120  if(FAILED(hres))
1121  return hres;
1122 
1123  hres = init_constructors(ctx, object_prototype);
1124  jsdisp_release(object_prototype);
1125  if(FAILED(hres))
1126  return hres;
1127 
1128  hres = create_math(ctx, &math);
1129  if(FAILED(hres))
1130  return hres;
1131 
1133  jsdisp_release(math);
1134  if(FAILED(hres))
1135  return hres;
1136 
1137  if(ctx->version >= 2) {
1138  jsdisp_t *json;
1139 
1140  hres = create_json(ctx, &json);
1141  if(FAILED(hres))
1142  return hres;
1143 
1145  jsdisp_release(json);
1146  if(FAILED(hres))
1147  return hres;
1148  }
1149 
1150  hres = create_activex_constr(ctx, &constr);
1151  if(FAILED(hres))
1152  return hres;
1153 
1155  jsval_obj(constr));
1156  jsdisp_release(constr);
1157  if(FAILED(hres))
1158  return hres;
1159 
1161  if(FAILED(hres))
1162  return hres;
1163 
1164  hres = jsdisp_define_data_property(ctx->global, NaNW, const_flags, jsval_number(NAN));
1165  if(FAILED(hres))
1166  return hres;
1167 
1169  return hres;
1170 }
#define PROPF_WRITABLE
Definition: jscript.h:98
static const WCHAR decodeURIW[]
Definition: global.c:72
static size_t double int int int * sign
Definition: printf.c:64
Definition: jsval.h:54
jsdisp_t * bool_constr
Definition: jscript.h:440
static const WCHAR DateW[]
Definition: global.c:36
static const WCHAR NumberW[]
Definition: global.c:45
static jsstr_t * jsstr_alloc(const WCHAR *str)
Definition: jsstr.h:103
static const WCHAR RangeErrorW[]
Definition: global.c:39
static const WCHAR _GetObjectW[]
Definition: global.c:60
static const WCHAR * jsstr_flatten(jsstr_t *str)
Definition: jsstr.h:139
static int argc
Definition: ServiceArgs.c:12
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
static const WCHAR ScriptEngineW[]
Definition: global.c:61
jsdisp_t * reference_error_constr
Definition: jscript.h:446
#define TRUE
Definition: types.h:120
static const WCHAR EvalErrorW[]
Definition: global.c:38
jsdisp_t * enumerator_constr
Definition: jscript.h:442
#define MB_ERR_INVALID_CHARS
Definition: unicode.h:41
jsdisp_t * array_constr
Definition: jscript.h:439
static const WCHAR escapeW[]
Definition: global.c:53
#define WideCharToMultiByte
Definition: compat.h:101
jsdisp_t * type_error_constr
Definition: jscript.h:449
#define INT_MAX
Definition: limits.h:40
DWORD flags
Definition: engine.h:234
static const WCHAR encodeURIW[]
Definition: global.c:71
jsstr_t * jsstr_undefined(void)
Definition: jsstr.c:293
Definition: jsstr.h:39
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
jsdisp_t * range_error_constr
Definition: jscript.h:445
const char * uri
Definition: sec_mgr.c:1594
static HRESULT JSGlobal_parseInt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:287
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
jsdisp_t * variable_obj
Definition: engine.h:232
static const WCHAR empty[]
Definition: main.c:49
static const WCHAR ObjectW[]
Definition: global.c:46
WINE_UNICODE_INLINE int isspaceW(WCHAR wc)
Definition: unicode.h:165
#define WARN(fmt,...)
Definition: debug.h:111
HRESULT jsdisp_define_data_property(jsdisp_t *obj, const WCHAR *name, unsigned flags, jsval_t value)
Definition: dispex.c:1794
static const WCHAR undefinedW[]
Definition: global.c:76
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
static const WCHAR BooleanW[]
Definition: global.c:35
GLdouble n
Definition: glext.h:7729
static const WCHAR ScriptEngineMinorVersionW[]
Definition: global.c:64
static const WCHAR isNaNW[]
Definition: global.c:55
HRESULT JSGlobal_eval(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:181
struct _call_frame_t * call_ctx
Definition: jscript.h:411
static BOOL is_string(parse_buffer *buf)
Definition: parsing.c:601
static BOOL is_uri_reserved(WCHAR c)
Definition: global.c:92
static const WCHAR unescapeW[]
Definition: global.c:59
#define MAXLONGLONG
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:110
HRESULT create_bool_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
Definition: bool.c:198
#define JSCRIPT_MAJOR_VERSION
Definition: resource.h:23
#define argv
Definition: mplay32.c:18
#define EXEC_RETURN_TO_INTERP
Definition: engine.h:250
#define E_FAIL
Definition: ddrawi.h:102
#define EXEC_EVAL
Definition: engine.h:251
int32_t INT
Definition: typedefs.h:56
scope_chain_t * scope
Definition: engine.h:225
static HRESULT JSGlobal_ScriptEngineBuildVersion(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:590
#define JSCRIPT_BUILD_VERSION
Definition: resource.h:25
HRESULT throw_uri_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:443
static HRESULT JSGlobal_encodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:760
static HRESULT JSGlobal_ScriptEngineMinorVersion(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:580
jsdisp_t * syntax_error_constr
Definition: jscript.h:448
static const WCHAR ScriptEngineBuildVersionW[]
Definition: global.c:66
static const WCHAR CollectGarbageW[]
Definition: global.c:68
static HRESULT JSGlobal_parseFloat(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:368
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
static const WCHAR ScriptEngineMajorVersionW[]
Definition: global.c:62
jsdisp_t * error_constr
Definition: jscript.h:443
GLenum GLint GLuint mask
Definition: glext.h:6028
jsdisp_t * regexp_error_constr
Definition: jscript.h:447
HRESULT to_number(script_ctx_t *, jsval_t, double *) DECLSPEC_HIDDEN
Definition: jsutils.c:601
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define CP_UTF8
Definition: nls.h:20
static HRESULT JSGlobal_unescape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:473
unsigned int BOOL
Definition: ntddk_ex.h:94
static HRESULT JSGlobal_decodeURIComponent(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:824
float pow(float __x, int __y)
Definition: _cmath.h:458
HRESULT jsval_copy(jsval_t v, jsval_t *r)
Definition: jsutils.c:229
static jsstr_t * get_string(jsval_t v)
Definition: jsval.h:229
#define e
Definition: ke_i.h:82
static const WCHAR isFiniteW[]
Definition: global.c:56
HRESULT create_math(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: math.c:531
#define FIXME(fmt,...)
Definition: debug.h:110
static PVOID ptr
Definition: dispmode.c:27
static const WCHAR EnumeratorW[]
Definition: global.c:52
static BOOL is_ecma_nonblank(const WCHAR c)
Definition: global.c:103
jsdisp_t * number_constr
Definition: jscript.h:451
const WCHAR * str
HRESULT create_json(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: json.c:845
static HRESULT JSGlobal_CollectGarbage(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:600
smooth NULL
Definition: ftsmooth.c:416
HRESULT create_vbarray_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: vbarray.c:330
HRESULT throw_syntax_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:433
#define JS_E_INVALID_URI_CHAR
Definition: jscript.h:569
HRESULT create_enumerator_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
Definition: enumerator.c:332
HRESULT to_int32(script_ctx_t *, jsval_t, INT *) DECLSPEC_HIDDEN
Definition: jsutils.c:657
DWORD version
Definition: jscript.h:416
static const WCHAR ErrorW[]
Definition: global.c:37
jsdisp_t * regexp_constr
Definition: jscript.h:453
HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, bytecode_t **ret)
Definition: compile.c:2458
static HRESULT JSGlobal_ScriptEngineMajorVersion(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:570
HRESULT create_object_prototype(script_ctx_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: object.c:592
static jsval_t jsval_string(jsstr_t *str)
Definition: jsval.h:109
static const WCHAR NaNW[]
Definition: global.c:32
static const WCHAR evalW[]
Definition: global.c:54
HRESULT init_error_constr(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: error.c:326
GLuint GLfloat * val
Definition: glext.h:7180
static const WCHAR TypeErrorW[]
Definition: global.c:42
WINE_UNICODE_INLINE WCHAR toupperW(WCHAR ch)
Definition: unicode.h:141
int64_t LONGLONG
Definition: typedefs.h:66
static const builtin_info_t JSGlobal_info
Definition: global.c:956
HRESULT exec_source(script_ctx_t *ctx, DWORD flags, bytecode_t *bytecode, function_code_t *function, scope_chain_t *scope, IDispatch *this_obj, jsdisp_t *function_instance, jsdisp_t *variable_obj, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: engine.c:2952
#define TRACE(s)
Definition: solgame.cpp:4
const char * debugstr_jsstr(jsstr_t *str)
Definition: jsstr.c:37
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: global.c:965
static INT char_to_int(WCHAR c)
Definition: global.c:276
#define d
Definition: ke_i.h:81
static const WCHAR ActiveXObjectW[]
Definition: global.c:50
__wchar_t WCHAR
Definition: xmlstorage.h:180
static const WCHAR SyntaxErrorW[]
Definition: global.c:41
LONG HRESULT
Definition: typedefs.h:77
const GLubyte * c
Definition: glext.h:8905
ed2 num_bytes
Definition: write.c:2846
static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:116
unsigned short WORD
Definition: ntddk_ex.h:93
static FILE * out
Definition: regtests2xml.c:44
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT init_global(script_ctx_t *ctx)
Definition: global.c:1106
#define NAN
Definition: misc.c:46
static const WCHAR ArrayW[]
Definition: global.c:34
static HRESULT JSGlobal_isFinite(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:253
GLbitfield flags
Definition: glext.h:7161
#define SCRIPTLANGUAGEVERSION_ES5
Definition: jscript.h:49
static const WCHAR URIErrorW[]
Definition: global.c:43
jsdisp_t * object_constr
Definition: jscript.h:452
WINE_DEFAULT_DEBUG_CHANNEL(jscript)
static const WCHAR parseFloatW[]
Definition: global.c:58
static const WCHAR ReferenceErrorW[]
Definition: global.c:40
static const WCHAR VBArrayW[]
Definition: global.c:51
int ret
#define EXEC_GLOBAL
Definition: engine.h:248
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: mem.h:68
GLenum src
Definition: glext.h:6340
int code
Definition: i386-dis.c:3591
static HRESULT JSGlobal_encodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:609
static const builtin_prop_t JSGlobal_props[]
Definition: global.c:936
static const WCHAR StringW[]
Definition: global.c:47
#define INT_MIN
Definition: limits.h:39
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
static HRESULT JSGlobal_isNaN(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:230
int isnan(double x)
HRESULT init_function_constr(script_ctx_t *ctx, jsdisp_t *object_prototype)
Definition: function.c:853
static jsval_t jsval_undefined(void)
Definition: jsval.h:137
#define S_OK
Definition: intsafe.h:59
jsdisp_t * function_constr
Definition: jscript.h:438
IDispatch * this_obj
Definition: engine.h:230
static const WCHAR JSONW[]
Definition: global.c:70
#define PROPF_METHOD
Definition: jscript.h:94
#define JSCRIPT_MINOR_VERSION
Definition: resource.h:24
static HRESULT JSGlobal_decodeURI(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:674
static WCHAR int_to_char(int i)
Definition: global.c:109
static HRESULT JSGlobal_GetObject(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:543
#define ARRAY_SIZE(a)
Definition: main.h:24
HRESULT create_date_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
Definition: date.c:2531
#define DISPATCH_JSCRIPT_CALLEREXECSSOURCE
Definition: jscript.h:112
static const WCHAR FunctionW[]
Definition: global.c:44
HRESULT create_string_constr(script_ctx_t *, jsdisp_t *, jsdisp_t **) DECLSPEC_HIDDEN
Definition: string.c:1750
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype, jsdisp_t **dispex)
Definition: dispex.c:978
WINE_UNICODE_INLINE int isdigitW(WCHAR wc)
Definition: unicode.h:170
jsdisp_t * date_constr
Definition: jscript.h:441
static const WCHAR MathW[]
Definition: global.c:69
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:265
static const WCHAR InfinityW[]
Definition: global.c:33
jsdisp_t * global
Definition: jscript.h:437
DWORD exp
Definition: msg.c:15681
#define JS_E_INVALID_URI_CODING
Definition: jscript.h:568
#define MultiByteToWideChar
Definition: compat.h:100
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
HRESULT create_activex_constr(script_ctx_t *ctx, jsdisp_t **ret)
Definition: activex.c:190
#define E_UNEXPECTED
Definition: winerror.h:2456
jsstr_t * jsstr_alloc_buf(unsigned len, WCHAR **buf)
Definition: jsstr.c:69
void release_bytecode(bytecode_t *code)
Definition: compile.c:2223
GLuint res
Definition: glext.h:9613
#define c
Definition: ke_i.h:80
double DOUBLE
Definition: typedefs.h:68
static jsval_t jsval_bool(BOOL b)
Definition: jsval.h:101
static BOOL is_uri_unescaped(WCHAR c)
Definition: global.c:97
HRESULT create_array_constr(script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
Definition: array.c:1293
jsdisp_t * eval_error_constr
Definition: jscript.h:444
static const WCHAR encodeURIComponentW[]
Definition: global.c:73
static int hex_to_int(const WCHAR wch)
Definition: global.c:467
static HRESULT JSGlobal_ScriptEngine(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: global.c:550
static const WCHAR RegExpW[]
Definition: global.c:48
jsdisp_t * uri_error_constr
Definition: jscript.h:450
static int uri_char_table[]
Definition: global.c:78
HRESULT to_flat_string(script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **) DECLSPEC_HIDDEN
Definition: jsutils.c:790
static const WCHAR decodeURIComponentW[]
Definition: global.c:74
#define INFINITY
Definition: misc.c:36
static const WCHAR RegExpErrorW[]
Definition: global.c:49
static jsval_t jsval_number(double n)
Definition: jsval.h:144
const char * debugstr_jsval(const jsval_t) DECLSPEC_HIDDEN
Definition: jsutils.c:33
Definition: unary.h:15
static const WCHAR parseIntW[]
Definition: global.c:57