ReactOS 0.4.17-dev-357-ga8f14ff
jscript.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 <assert.h>
20
21#include "jscript.h"
22#include "engine.h"
23#include "objsafe.h"
24
25#include "wine/debug.h"
26
28
29#ifdef _WIN64
30
31#define CTXARG_T DWORDLONG
32#define IActiveScriptParseVtbl IActiveScriptParse64Vtbl
33#define IActiveScriptParseProcedure2Vtbl IActiveScriptParseProcedure2_64Vtbl
34
35#else
36
37#define CTXARG_T DWORD
38#define IActiveScriptParseVtbl IActiveScriptParse32Vtbl
39#define IActiveScriptParseProcedure2Vtbl IActiveScriptParseProcedure2_32Vtbl
40
41#endif
42
43typedef struct {
45 IActiveScriptParse IActiveScriptParse_iface;
46 IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_iface;
51
53
62
64
65 struct list persistent_code;
66 struct list queued_code;
67} JScript;
68
69typedef struct {
74
76{
77 if(--ctx->ref)
78 return;
79
80 jsval_release(ctx->acc);
81 if(ctx->cc)
82 release_cc(ctx->cc);
83 heap_pool_free(&ctx->tmp_heap);
84 if(ctx->last_match)
85 jsstr_release(ctx->last_match);
86 assert(!ctx->stack_top);
87 free(ctx->stack);
88
89 ctx->jscaller->ctx = NULL;
90 IServiceProvider_Release(&ctx->jscaller->IServiceProvider_iface);
91
92 release_thread_data(ctx->thread_data);
93 free(ctx);
94}
95
97{
98 unsigned i;
99 for(i = 0; i < ARRAY_SIZE(ctx->global_objects); i++) {
100 if(ctx->global_objects[i]) {
101 jsdisp_release(ctx->global_objects[i]);
102 ctx->global_objects[i] = NULL;
103 }
104 }
105}
106
108{
109 if(This->ctx->state == state)
110 return;
111
112 This->ctx->state = state;
113 if(This->site)
114 IActiveScriptSite_OnStateChange(This->site, state);
115}
116
118{
119 return ctx->state == SCRIPTSTATE_STARTED
120 || ctx->state == SCRIPTSTATE_CONNECTED
121 || ctx->state == SCRIPTSTATE_DISCONNECTED;
122}
123
125{
126 static const builtin_info_t disp_info = { .class = JSCLASS_GLOBAL };
127 return create_dispex(ctx, &disp_info, NULL, &item->script_obj);
128}
129
131{
132 if(!item->script_obj) return;
133
134 jsdisp_release(item->script_obj);
135 item->script_obj = NULL;
136}
137
139{
140 IUnknown *unk;
141 HRESULT hr;
142
143 if(!site)
144 return E_UNEXPECTED;
145
146 hr = IActiveScriptSite_GetItemInfo(site, item->name, SCRIPTINFO_IUNKNOWN, &unk, NULL);
147 if(FAILED(hr)) {
148 WARN("GetItemInfo failed: %08lx\n", hr);
149 return hr;
150 }
151
152 hr = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
153 IUnknown_Release(unk);
154 if(FAILED(hr)) {
155 WARN("object does not implement IDispatch\n");
156 return hr;
157 }
158
159 return S_OK;
160}
161
163{
165 HRESULT hr;
166
167 LIST_FOR_EACH_ENTRY(item, &ctx->named_items, named_item_t, entry) {
168 if((item->flags & flags) == flags && !wcscmp(item->name, item_name)) {
169 if(!item->script_obj && !(item->flags & SCRIPTITEM_GLOBALMEMBERS)) {
171 if(FAILED(hr)) return NULL;
172 }
173
174 if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) {
176 if(FAILED(hr)) continue;
177 }
178
179 return item;
180 }
181 }
182
183 return NULL;
184}
185
187{
188 if(--item->ref) return;
189
190 free(item->name);
191 free(item);
192}
193
195{
196 return CONTAINING_RECORD(iface, JScriptError, IActiveScriptError_iface);
197}
198
200{
202
204 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
205 *ppv = &This->IActiveScriptError_iface;
206 }else if(IsEqualGUID(riid, &IID_IActiveScriptError)) {
207 TRACE("(%p)->(IID_IActiveScriptError %p)\n", This, ppv);
208 *ppv = &This->IActiveScriptError_iface;
209 }else {
210 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
211 *ppv = NULL;
212 return E_NOINTERFACE;
213 }
214
215 IUnknown_AddRef((IUnknown*)*ppv);
216 return S_OK;
217}
218
220{
223
224 TRACE("(%p) ref=%ld\n", This, ref);
225
226 return ref;
227}
228
230{
233
234 TRACE("(%p) ref=%ld\n", This, ref);
235
236 if(!ref) {
237 reset_ei(&This->ei);
238 free(This);
239 }
240
241 return ref;
242}
243
245{
247
248 TRACE("(%p)->(%p)\n", This, excepinfo);
249
250 if(!excepinfo)
251 return E_POINTER;
252
253 memset(excepinfo, 0, sizeof(*excepinfo));
254 excepinfo->scode = This->ei.error;
255 if(This->ei.source)
256 jsstr_to_bstr(This->ei.source, &excepinfo->bstrSource);
257 if(This->ei.message)
258 jsstr_to_bstr(This->ei.message, &excepinfo->bstrDescription);
259 return S_OK;
260}
261
263{
265 bytecode_t *code = This->ei.code;
266 unsigned line_pos, char_pos;
267
268 TRACE("(%p)->(%p %p %p)\n", This, source_context, line, character);
269
270 if(!This->ei.code) {
271 FIXME("unknown position\n");
272 return E_FAIL;
273 }
274
275 if(source_context)
276 *source_context = This->ei.code->source_context;
277 if(!line && !character)
278 return S_OK;
279
280 line_pos = get_location_line(code, This->ei.loc, &char_pos);
281 if(line)
282 *line = line_pos;
283 if(character)
284 *character = char_pos;
285 return S_OK;
286}
287
289{
291
292 TRACE("(%p)->(%p)\n", This, source);
293
294 if(!source)
295 return E_POINTER;
296
297 if(!This->ei.line) {
298 *source = NULL;
299 return E_FAIL;
300 }
301
302 return jsstr_to_bstr(This->ei.line, source);
303}
304
305static const IActiveScriptErrorVtbl JScriptErrorVtbl = {
312};
313
315{
316 ei->error = S_OK;
317 if(ei->valid_value) {
318 jsval_release(ei->value);
319 ei->valid_value = FALSE;
320 }
321 if(ei->code) {
323 ei->code = NULL;
324 ei->loc = 0;
325 }
326 if(ei->source) {
328 ei->source = NULL;
329 }
330 if(ei->message) {
332 ei->message = NULL;
333 }
334 if(ei->line) {
335 jsstr_release(ei->line);
336 ei->line = NULL;
337 }
338}
339
341{
342 memset(ei, 0, sizeof(*ei));
343 ei->prev = ctx->ei;
344 ctx->ei = ei;
345 TRACE("ctx %p ei %p prev %p\n", ctx, ei, ei->prev);
346}
347
349{
350 jsexcept_t *ei = ctx->ei;
351 BOOL enter_notified = ei->enter_notified;
353
354 TRACE("ctx %p ei %p prev %p\n", ctx, ei, ei->prev);
355
356 ctx->ei = ei->prev;
357 if(result == DISP_E_EXCEPTION) {
358 result = ei->error;
359 }else {
360 reset_ei(ei);
361 ei->error = result;
362 }
363 if(FAILED(result)) {
364 WARN("%08lx\n", result);
365 if(ctx->site && (error = malloc(sizeof(*error)))) {
367
368 error->IActiveScriptError_iface.lpVtbl = &JScriptErrorVtbl;
369 error->ref = 1;
370 error->ei = *ei;
371 memset(ei, 0, sizeof(*ei));
372
373 hres = IActiveScriptSite_OnScriptError(ctx->site, &error->IActiveScriptError_iface);
374 IActiveScriptError_Release(&error->IActiveScriptError_iface);
375 if(hres == S_OK)
376 result = SCRIPT_E_REPORTED;
377 }
378 }
379 if(enter_notified && ctx->site)
380 IActiveScriptSite_OnLeaveScript(ctx->site);
381 reset_ei(ei);
382 return result;
383}
384
386{
387 while(!list_empty(&This->queued_code))
388 {
389 bytecode_t *iter = LIST_ENTRY(list_head(&This->queued_code), bytecode_t, entry);
390 list_remove(&iter->entry);
391 if (iter->is_persistent)
392 list_add_tail(&This->persistent_code, &iter->entry);
393 else
394 release_bytecode(iter);
395 }
396}
397
399{
400 while(!list_empty(&This->persistent_code))
401 {
402 bytecode_t *iter = LIST_ENTRY(list_head(&This->persistent_code), bytecode_t, entry);
403 list_remove(&iter->entry);
404 release_bytecode(iter);
405 }
406}
407
409{
410 bytecode_t *iter;
411
412 LIST_FOR_EACH_ENTRY(iter, &This->persistent_code, bytecode_t, entry)
413 if(iter->named_item)
415}
416
418{
419 while(!list_empty(&This->ctx->named_items)) {
420 named_item_t *iter = LIST_ENTRY(list_head(&This->ctx->named_items), named_item_t, entry);
421 list_remove(&iter->entry);
422 release_named_item(iter);
423 }
424}
425
427{
428 IServiceProvider *prev_caller = ctx->jscaller->caller;
430
431 ctx->jscaller->caller = SP_CALLER_UNINITIALIZED;
432 hres = exec_source(ctx, EXEC_GLOBAL, code, &code->global_code, NULL, NULL, NULL, 0, NULL, r);
433 ctx->jscaller->caller = prev_caller;
434 return hres;
435}
436
438{
439 bytecode_t *iter;
440 jsexcept_t ei;
441 HRESULT hres = S_OK;
442
443 LIST_FOR_EACH_ENTRY(iter, &This->queued_code, bytecode_t, entry) {
444 enter_script(This->ctx, &ei);
445 hres = exec_global_code(This->ctx, iter, NULL);
446 leave_script(This->ctx, hres);
447 if(FAILED(hres))
448 break;
449 }
450
452}
453
455{
456 named_item_t *item, *item_next;
457
458 if(This->ctx) {
459 switch(This->ctx->state) {
463 return;
464 /* FALLTHROUGH */
468
469 if(This->ctx->state == SCRIPTSTATE_DISCONNECTED)
472 return;
473 /* FALLTHROUGH */
477
478 LIST_FOR_EACH_ENTRY_SAFE(item, item_next, &This->ctx->named_items, named_item_t, entry)
479 {
480 if(item->disp)
481 {
482 IDispatch_Release(item->disp);
483 item->disp = NULL;
484 }
486 if(!(item->flags & SCRIPTITEM_ISPERSISTENT))
487 {
488 list_remove(&item->entry);
490 }
491 }
492
493 if(This->ctx->secmgr) {
494 IInternetHostSecurityManager_Release(This->ctx->secmgr);
495 This->ctx->secmgr = NULL;
496 }
497
498 if(This->ctx->site) {
499 IActiveScriptSite_Release(This->ctx->site);
500 This->ctx->site = NULL;
501 }
502
504 gc_run(This->ctx);
505
506 /* FALLTHROUGH */
509 break;
510 default:
511 assert(0);
512 }
513
515 }else if(state == SCRIPTSTATE_UNINITIALIZED) {
516 if(This->site)
517 IActiveScriptSite_OnStateChange(This->site, state);
518 }else {
519 FIXME("NULL ctx\n");
520 }
521
522 if((state == SCRIPTSTATE_UNINITIALIZED || state == SCRIPTSTATE_CLOSED) && This->thread_data) {
523 release_thread_data(This->thread_data);
524 This->thread_data = NULL;
525 }
526
527 if(This->site) {
528 IActiveScriptSite_Release(This->site);
529 This->site = NULL;
530 }
531}
532
533typedef struct {
535
537
539} AXSite;
540
542{
543 return CONTAINING_RECORD(iface, AXSite, IServiceProvider_iface);
544}
545
547{
549
551 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
552 *ppv = &This->IServiceProvider_iface;
553 }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
554 TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv);
555 *ppv = &This->IServiceProvider_iface;
556 }else {
557 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
558 *ppv = NULL;
559 return E_NOINTERFACE;
560 }
561
562 IUnknown_AddRef((IUnknown*)*ppv);
563 return S_OK;
564}
565
567{
570
571 TRACE("(%p) ref=%ld\n", This, ref);
572
573 return ref;
574}
575
577{
580
581 TRACE("(%p) ref=%ld\n", This, ref);
582
583 if(!ref)
584 {
585 if(This->sp)
586 IServiceProvider_Release(This->sp);
587
588 free(This);
589 }
590
591 return ref;
592}
593
595 REFGUID guidService, REFIID riid, void **ppv)
596{
598
599 TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
600
601 if(!This->sp)
602 return E_NOINTERFACE;
603
604 return IServiceProvider_QueryService(This->sp, guidService, riid, ppv);
605}
606
607static IServiceProviderVtbl AXSiteVtbl = {
612};
613
615{
617 AXSite *ret;
619
620 hres = IActiveScriptSite_QueryInterface(ctx->site, &IID_IServiceProvider, (void**)&sp);
621 if(FAILED(hres)) {
622 TRACE("Could not get IServiceProvider iface: %08lx\n", hres);
623 }
624
625 ret = malloc(sizeof(AXSite));
626 if(!ret) {
627 IServiceProvider_Release(sp);
628 return NULL;
629 }
630
631 ret->IServiceProvider_iface.lpVtbl = &AXSiteVtbl;
632 ret->ref = 1;
633 ret->sp = sp;
634
635 return (IUnknown*)&ret->IServiceProvider_iface;
636}
637
639{
640 return CONTAINING_RECORD(iface, JScript, IActiveScript_iface);
641}
642
644{
646
647 *ppv = NULL;
648
650 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
651 *ppv = &This->IActiveScript_iface;
652 }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
653 TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
654 *ppv = &This->IActiveScript_iface;
655 }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
656 TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
657 *ppv = &This->IActiveScriptParse_iface;
658 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure)) {
659 TRACE("(%p)->(IID_IActiveScriptParseProcedure %p)\n", This, ppv);
660 *ppv = &This->IActiveScriptParseProcedure2_iface;
661 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure2)) {
662 TRACE("(%p)->(IID_IActiveScriptParseProcedure2 %p)\n", This, ppv);
663 *ppv = &This->IActiveScriptParseProcedure2_iface;
664 }else if(IsEqualGUID(riid, &IID_IActiveScriptProperty)) {
665 TRACE("(%p)->(IID_IActiveScriptProperty %p)\n", This, ppv);
666 *ppv = &This->IActiveScriptProperty_iface;
667 }else if(IsEqualGUID(riid, &IID_IObjectSafety)) {
668 TRACE("(%p)->(IID_IObjectSafety %p)\n", This, ppv);
669 *ppv = &This->IObjectSafety_iface;
670 }else if(IsEqualGUID(riid, &IID_IVariantChangeType)) {
671 TRACE("(%p)->(IID_IVariantChangeType %p)\n", This, ppv);
672 *ppv = &This->IVariantChangeType_iface;
673 }else if(IsEqualGUID(riid, &IID_IWineJScript)) {
674 TRACE("(%p)->(IID_IWineJScript %p)\n", This, ppv);
675 *ppv = &This->IWineJScript_iface;
676 }
677
678 if(*ppv) {
679 IUnknown_AddRef((IUnknown*)*ppv);
680 return S_OK;
681 }
682
683 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
684 return E_NOINTERFACE;
685}
686
688{
691
692 TRACE("(%p) ref=%ld\n", This, ref);
693
694 return ref;
695}
696
698{
701
702 TRACE("(%p) ref=%ld\n", iface, ref);
703
704 if(!ref) {
705 if(This->ctx && This->ctx->state != SCRIPTSTATE_CLOSED)
706 IActiveScript_Close(&This->IActiveScript_iface);
707 if(This->ctx) {
708 This->ctx->active_script = NULL;
709 script_release(This->ctx);
710 }
711 if(This->thread_data)
712 release_thread_data(This->thread_data);
713 free(This);
715 }
716
717 return ref;
718}
719
722{
724 struct thread_data *thread_data;
726 LCID lcid;
728
729 TRACE("(%p)->(%p)\n", This, pass);
730
731 if(!pass)
732 return E_POINTER;
733
734 if(This->site)
735 return E_UNEXPECTED;
736
738 return E_OUTOFMEMORY;
739
740 if(InterlockedCompareExchangePointer((void**)&This->thread_data, thread_data, NULL)) {
742 return E_UNEXPECTED;
743 }
744
745 if(!This->ctx) {
746 script_ctx_t *ctx = calloc(1, sizeof(script_ctx_t));
747 if(!ctx)
748 return E_OUTOFMEMORY;
749
750 ctx->ref = 1;
752 ctx->active_script = &This->IActiveScript_iface;
753 ctx->safeopt = This->safeopt;
754 ctx->version = This->version;
755 ctx->html_mode = This->html_mode;
756 ctx->acc = jsval_undefined();
757 list_init(&ctx->named_items);
758 heap_pool_init(&ctx->tmp_heap);
759
761 if(FAILED(hres)) {
762 free(ctx);
763 return hres;
764 }
765
766 thread_data->ref++;
767 ctx->thread_data = thread_data;
768 ctx->last_match = jsstr_empty();
769
770 This->ctx = ctx;
771 }
772
773 /* Retrieve new dispatches for persistent named items */
774 LIST_FOR_EACH_ENTRY(item, &This->ctx->named_items, named_item_t, entry)
775 {
776 if(!item->disp)
777 {
779 if(FAILED(hres)) return hres;
780 }
781
782 /* For some reason, CODEONLY flag is lost in re-initialized scripts */
783 item->flags &= ~SCRIPTITEM_CODEONLY;
784 }
785
786 This->site = pass;
787 IActiveScriptSite_AddRef(This->site);
788
789 hres = IActiveScriptSite_GetLCID(This->site, &lcid);
790 if(hres == S_OK)
791 This->lcid = lcid;
792
793 This->ctx->lcid = This->lcid;
794
795 hres = init_global(This->ctx);
796 if(FAILED(hres))
797 return hres;
798
799 IActiveScriptSite_AddRef(This->site);
800 This->ctx->site = This->site;
801
802 if(This->is_initialized)
804 return S_OK;
805}
806
808 void **ppvObject)
809{
811 FIXME("(%p)->()\n", This);
812 return E_NOTIMPL;
813}
814
816{
818
819 TRACE("(%p)->(%d)\n", This, ss);
820
821 if(This->thread_data && This->thread_data->thread_id != GetCurrentThreadId())
822 return E_UNEXPECTED;
823
825 if(This->ctx && This->ctx->state == SCRIPTSTATE_CLOSED)
826 return E_UNEXPECTED;
827
829 list_move_tail(&This->queued_code, &This->persistent_code);
830 return S_OK;
831 }
832
833 if(!This->is_initialized || !This->ctx)
834 return E_UNEXPECTED;
835
836 switch(ss) {
838 case SCRIPTSTATE_CONNECTED: /* FIXME */
839 if(This->ctx->state == SCRIPTSTATE_UNINITIALIZED || This->ctx->state == SCRIPTSTATE_CLOSED)
840 return E_UNEXPECTED;
841
843 break;
845 FIXME("unimplemented SCRIPTSTATE_INITIALIZED\n");
846 return S_OK;
847 default:
848 FIXME("unimplemented state %d\n", ss);
849 return E_NOTIMPL;
850 }
851
853 return S_OK;
854}
855
857{
859
860 TRACE("(%p)->(%p)\n", This, pssState);
861
862 if(!pssState)
863 return E_POINTER;
864
865 if(This->thread_data && This->thread_data->thread_id != GetCurrentThreadId())
866 return E_UNEXPECTED;
867
868 *pssState = This->ctx ? This->ctx->state : SCRIPTSTATE_UNINITIALIZED;
869 return S_OK;
870}
871
873{
875
876 TRACE("(%p)->()\n", This);
877
878 if(This->thread_data && This->thread_data->thread_id != GetCurrentThreadId())
879 return E_UNEXPECTED;
880
884 return S_OK;
885}
886
888 LPCOLESTR pstrName, DWORD dwFlags)
889{
892 IDispatch *disp = NULL;
894
895 TRACE("(%p)->(%s %lx)\n", This, debugstr_w(pstrName), dwFlags);
896
897 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || !This->ctx || This->ctx->state == SCRIPTSTATE_CLOSED)
898 return E_UNEXPECTED;
899
900 if(dwFlags & SCRIPTITEM_GLOBALMEMBERS) {
901 IUnknown *unk;
902
903 hres = IActiveScriptSite_GetItemInfo(This->site, pstrName, SCRIPTINFO_IUNKNOWN, &unk, NULL);
904 if(FAILED(hres)) {
905 WARN("GetItemInfo failed: %08lx\n", hres);
906 return hres;
907 }
908
909 hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&disp);
910 IUnknown_Release(unk);
911 if(FAILED(hres)) {
912 WARN("object does not implement IDispatch\n");
913 return hres;
914 }
915 }
916
917 item = malloc(sizeof(*item));
918 if(!item) {
919 if(disp)
920 IDispatch_Release(disp);
921 return E_OUTOFMEMORY;
922 }
923
924 item->ref = 1;
925 item->disp = disp;
926 item->flags = dwFlags;
927 item->script_obj = NULL;
928 item->name = wcsdup(pstrName);
929 if(!item->name) {
930 if(disp)
931 IDispatch_Release(disp);
932 free(item);
933 return E_OUTOFMEMORY;
934 }
935
936 list_add_tail(&This->ctx->named_items, &item->entry);
937 return S_OK;
938}
939
941 DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
942{
944 FIXME("(%p)->()\n", This);
945 return E_NOTIMPL;
946}
947
948static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
949 IDispatch **ppdisp)
950{
952 jsdisp_t *script_obj;
953
954 TRACE("(%p)->(%s %p)\n", This, debugstr_w(pstrItemName), ppdisp);
955
956 if(!ppdisp)
957 return E_POINTER;
958
959 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || !This->ctx->global) {
960 *ppdisp = NULL;
961 return E_UNEXPECTED;
962 }
963
964 script_obj = This->ctx->global;
965 if(pstrItemName) {
966 named_item_t *item = lookup_named_item(This->ctx, pstrItemName, 0);
967 if(!item) return E_INVALIDARG;
968 if(item->script_obj) script_obj = item->script_obj;
969 }
970
971 *ppdisp = to_disp(script_obj);
972 IDispatch_AddRef(*ppdisp);
973 return S_OK;
974}
975
977 SCRIPTTHREADID *pstridThread)
978{
980 FIXME("(%p)->()\n", This);
981 return E_NOTIMPL;
982}
983
985 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
986{
988 FIXME("(%p)->()\n", This);
989 return E_NOTIMPL;
990}
991
993 SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
994{
996 FIXME("(%p)->()\n", This);
997 return E_NOTIMPL;
998}
999
1001 SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
1002{
1004 FIXME("(%p)->()\n", This);
1005 return E_NOTIMPL;
1006}
1007
1009{
1011 FIXME("(%p)->()\n", This);
1012 return E_NOTIMPL;
1013}
1014
1015static const IActiveScriptVtbl JScriptVtbl = {
1032};
1033
1034static inline JScript *impl_from_IActiveScriptParse(IActiveScriptParse *iface)
1035{
1036 return CONTAINING_RECORD(iface, JScript, IActiveScriptParse_iface);
1037}
1038
1039static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
1040{
1042 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1043}
1044
1045static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
1046{
1048 return IActiveScript_AddRef(&This->IActiveScript_iface);
1049}
1050
1051static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
1052{
1054 return IActiveScript_Release(&This->IActiveScript_iface);
1055}
1056
1057static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
1058{
1060
1061 TRACE("(%p)\n", This);
1062
1063 if(This->is_initialized)
1064 return E_UNEXPECTED;
1065 This->is_initialized = TRUE;
1066
1067 if(This->site)
1069 return S_OK;
1070}
1071
1072static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface,
1073 LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName,
1074 LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter,
1075 CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags,
1076 BSTR *pbstrName, EXCEPINFO *pexcepinfo)
1077{
1079 FIXME("(%p)->(%s %s %s %s %s %s %s %lu %lx %p %p)\n", This, debugstr_w(pstrDefaultName),
1080 debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
1081 debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), wine_dbgstr_longlong(dwSourceContextCookie),
1082 ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
1083 return E_NOTIMPL;
1084}
1085
1086static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface,
1087 LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
1088 LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine,
1089 DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
1090{
1094 jsexcept_t ei;
1095 HRESULT hres;
1096
1097 TRACE("(%p)->(%s %s %p %s %s %lu %lx %p %p)\n", This, debugstr_w(pstrCode),
1098 debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
1099 wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLine, dwFlags, pvarResult, pexcepinfo);
1100
1101 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED)
1102 return E_UNEXPECTED;
1103
1104 if(pstrItemName) {
1105 item = lookup_named_item(This->ctx, pstrItemName, 0);
1106 if(!item) {
1107 WARN("Unknown context %s\n", debugstr_w(pstrItemName));
1108 return E_INVALIDARG;
1109 }
1110 if(!item->script_obj) item = NULL;
1111 }
1112
1113 enter_script(This->ctx, &ei);
1114 hres = compile_script(This->ctx, pstrCode, dwSourceContextCookie, ulStartingLine, NULL, pstrDelimiter,
1115 (dwFlags & SCRIPTTEXT_ISEXPRESSION) != 0, This->is_encode, item, &code);
1116 if(FAILED(hres))
1117 return leave_script(This->ctx, hres);
1118
1119 if(dwFlags & SCRIPTTEXT_ISEXPRESSION) {
1120 jsval_t r;
1121
1122 hres = exec_global_code(This->ctx, code, &r);
1123 if(SUCCEEDED(hres)) {
1124 if(pvarResult)
1125 hres = jsval_to_variant(r, pvarResult);
1127 }
1128
1129 return leave_script(This->ctx, hres);
1130 }
1131
1132 code->is_persistent = (dwFlags & SCRIPTTEXT_ISPERSISTENT) != 0;
1133
1134 /*
1135 * Although pvarResult is not really used without SCRIPTTEXT_ISEXPRESSION flag, if it's not NULL,
1136 * script is executed immediately, even if it's not in started state yet.
1137 */
1138 if(!pvarResult && !is_started(This->ctx)) {
1139 list_add_tail(&This->queued_code, &code->entry);
1140 }else {
1142 if(code->is_persistent)
1143 list_add_tail(&This->persistent_code, &code->entry);
1144 else
1146 }
1147
1148 if(FAILED(hres = leave_script(This->ctx, hres)))
1149 return hres;
1150
1151 if(pvarResult)
1152 V_VT(pvarResult) = VT_EMPTY;
1153 return S_OK;
1154}
1155
1163};
1164
1165static inline JScript *impl_from_IActiveScriptParseProcedure2(IActiveScriptParseProcedure2 *iface)
1166{
1167 return CONTAINING_RECORD(iface, JScript, IActiveScriptParseProcedure2_iface);
1168}
1169
1170static HRESULT WINAPI JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
1171{
1173 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1174}
1175
1176static ULONG WINAPI JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
1177{
1179 return IActiveScript_AddRef(&This->IActiveScript_iface);
1180}
1181
1182static ULONG WINAPI JScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
1183{
1185 return IActiveScript_Release(&This->IActiveScript_iface);
1186}
1187
1188static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface,
1189 LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName,
1190 LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter,
1191 CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
1192{
1196 jsdisp_t *dispex;
1197 jsexcept_t ei;
1198 HRESULT hres;
1199
1200 TRACE("(%p)->(%s %s %s %s %p %s %s %lu %lx %p)\n", This, debugstr_w(pstrCode), debugstr_w(pstrFormalParams),
1201 debugstr_w(pstrProcedureName), debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
1202 wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLineNumber, dwFlags, ppdisp);
1203
1204 if(!This->thread_data || This->thread_data->thread_id != GetCurrentThreadId() || This->ctx->state == SCRIPTSTATE_CLOSED)
1205 return E_UNEXPECTED;
1206
1207 if(pstrItemName) {
1208 item = lookup_named_item(This->ctx, pstrItemName, 0);
1209 if(!item) {
1210 WARN("Unknown context %s\n", debugstr_w(pstrItemName));
1211 return E_INVALIDARG;
1212 }
1213 if(!item->script_obj) item = NULL;
1214 }
1215
1216 enter_script(This->ctx, &ei);
1217 hres = compile_script(This->ctx, pstrCode, dwSourceContextCookie, ulStartingLineNumber, pstrFormalParams,
1218 pstrDelimiter, FALSE, This->is_encode, item, &code);
1219 if(FAILED(hres))
1220 return leave_script(This->ctx, hres);
1221
1222 hres = create_source_function(This->ctx, code, &code->global_code, NULL, &dispex);
1224
1225 hres = leave_script(This->ctx, hres);
1226 if(FAILED(hres))
1227 return hres;
1228
1229 *ppdisp = to_disp(dispex);
1230 return S_OK;
1231}
1232
1238};
1239
1241{
1242 return CONTAINING_RECORD(iface, JScript, IActiveScriptProperty_iface);
1243}
1244
1246{
1248 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1249}
1250
1252{
1254 return IActiveScript_AddRef(&This->IActiveScript_iface);
1255}
1256
1258{
1260 return IActiveScript_Release(&This->IActiveScript_iface);
1261}
1262
1264 VARIANT *pvarIndex, VARIANT *pvarValue)
1265{
1267 FIXME("(%p)->(%lx %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
1268 return E_NOTIMPL;
1269}
1270
1272 VARIANT *pvarIndex, VARIANT *pvarValue)
1273{
1275
1276 TRACE("(%p)->(%lx %s %s)\n", This, dwProperty, debugstr_variant(pvarIndex), debugstr_variant(pvarValue));
1277
1278 if(pvarIndex)
1279 FIXME("unsupported pvarIndex\n");
1280
1281 switch(dwProperty) {
1282 case SCRIPTPROP_INVOKEVERSIONING:
1283 if(V_VT(pvarValue) != VT_I4 || V_I4(pvarValue) < 0
1284 || (V_I4(pvarValue) > 15 && !(V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML))) {
1285 WARN("invalid value %s\n", debugstr_variant(pvarValue));
1286 return E_INVALIDARG;
1287 }
1288
1289 This->version = V_I4(pvarValue) & 0x1ff;
1290 This->html_mode = (V_I4(pvarValue) & SCRIPTLANGUAGEVERSION_HTML) != 0;
1291 break;
1292 default:
1293 FIXME("Unimplemented property %lx\n", dwProperty);
1294 return E_NOTIMPL;
1295 }
1296
1297 return S_OK;
1298}
1299
1300static const IActiveScriptPropertyVtbl JScriptPropertyVtbl = {
1306};
1307
1309{
1310 return CONTAINING_RECORD(iface, JScript, IObjectSafety_iface);
1311}
1312
1314{
1316 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1317}
1318
1320{
1322 return IActiveScript_AddRef(&This->IActiveScript_iface);
1323}
1324
1326{
1328 return IActiveScript_Release(&This->IActiveScript_iface);
1329}
1330
1331#define SUPPORTED_OPTIONS (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER)
1332
1334 DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
1335{
1337
1338 TRACE("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
1339
1340 if(!pdwSupportedOptions || !pdwEnabledOptions)
1341 return E_POINTER;
1342
1343 *pdwSupportedOptions = SUPPORTED_OPTIONS;
1344 *pdwEnabledOptions = This->safeopt;
1345
1346 return S_OK;
1347}
1348
1350 DWORD dwOptionSetMask, DWORD dwEnabledOptions)
1351{
1353
1354 TRACE("(%p)->(%s %lx %lx)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
1355
1356 if(dwOptionSetMask & ~SUPPORTED_OPTIONS)
1357 return E_FAIL;
1358
1359 This->safeopt = (dwEnabledOptions & dwOptionSetMask) | (This->safeopt & ~dwOptionSetMask) | INTERFACE_USES_DISPEX;
1360 return S_OK;
1361}
1362
1363static const IObjectSafetyVtbl JScriptSafetyVtbl = {
1369};
1370
1372{
1373 return CONTAINING_RECORD(iface, JScript, IVariantChangeType_iface);
1374}
1375
1377{
1379 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1380}
1381
1383{
1385 return IActiveScript_AddRef(&This->IActiveScript_iface);
1386}
1387
1389{
1391 return IActiveScript_Release(&This->IActiveScript_iface);
1392}
1393
1395{
1397 jsexcept_t ei;
1398 VARIANT res;
1399 HRESULT hres;
1400
1401 TRACE("(%p)->(%p %s %lx %s)\n", This, dst, debugstr_variant(src), lcid, debugstr_vt(vt));
1402
1403 if(!This->ctx) {
1404 FIXME("Object uninitialized\n");
1405 return E_UNEXPECTED;
1406 }
1407
1408 enter_script(This->ctx, &ei);
1409 hres = variant_change_type(This->ctx, &res, src, vt);
1410 hres = leave_script(This->ctx, hres);
1411 if(FAILED(hres))
1412 return hres;
1413
1415 if(FAILED(hres)) {
1416 VariantClear(&res);
1417 return hres;
1418 }
1419
1420 *dst = res;
1421 return S_OK;
1422}
1423
1424static const IVariantChangeTypeVtbl VariantChangeTypeVtbl = {
1429};
1430
1432{
1433 return CONTAINING_RECORD(iface, JScript, IWineJScript_iface);
1434}
1435
1437{
1439 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1440}
1441
1443{
1445 return IActiveScript_AddRef(&This->IActiveScript_iface);
1446}
1447
1449{
1451 return IActiveScript_Release(&This->IActiveScript_iface);
1452}
1453
1456{
1458 return init_host_object(This->ctx, host_obj, prototype, flags, ret);
1459}
1460
1462 IWineJSDispatch *prototype, IWineJSDispatch **ret)
1463{
1465 return init_host_constructor(This->ctx, constr, prototype, ret);
1466}
1467
1468static const IWineJScriptVtbl WineJScriptVtbl = {
1474};
1475
1477{
1478 JScript *ret;
1479 HRESULT hres;
1480
1481 ret = calloc(1, sizeof(*ret));
1482 if(!ret)
1483 return E_OUTOFMEMORY;
1484
1485 lock_module();
1486
1487 ret->IActiveScript_iface.lpVtbl = &JScriptVtbl;
1488 ret->IActiveScriptParse_iface.lpVtbl = &JScriptParseVtbl;
1489 ret->IActiveScriptParseProcedure2_iface.lpVtbl = &JScriptParseProcedureVtbl;
1490 ret->IActiveScriptProperty_iface.lpVtbl = &JScriptPropertyVtbl;
1491 ret->IObjectSafety_iface.lpVtbl = &JScriptSafetyVtbl;
1492 ret->IVariantChangeType_iface.lpVtbl = &VariantChangeTypeVtbl;
1493 ret->IWineJScript_iface.lpVtbl = &WineJScriptVtbl;
1494 ret->ref = 1;
1495 ret->safeopt = INTERFACE_USES_DISPEX;
1496 ret->is_encode = is_encode;
1497 list_init(&ret->persistent_code);
1498 list_init(&ret->queued_code);
1499
1500 hres = IActiveScript_QueryInterface(&ret->IActiveScript_iface, riid, ppv);
1501 IActiveScript_Release(&ret->IActiveScript_iface);
1502 return hres;
1503}
enum tagSCRIPTTHREADSTATE SCRIPTTHREADSTATE
DWORD SCRIPTTHREADID
Definition: activscp.idl:86
@ SCRIPTSTATE_INITIALIZED
Definition: activscp.idl:62
@ SCRIPTSTATE_DISCONNECTED
Definition: activscp.idl:60
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
@ SCRIPTSTATE_UNINITIALIZED
Definition: activscp.idl:57
@ SCRIPTSTATE_CLOSED
Definition: activscp.idl:61
@ SCRIPTSTATE_CONNECTED
Definition: activscp.idl:59
enum tagSCRIPTSTATE SCRIPTSTATE
static int state
Definition: maze.c:121
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
Definition: list.h:37
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
OLECHAR * BSTR
Definition: compat.h:2293
unsigned short VARTYPE
Definition: compat.h:2254
@ VT_I4
Definition: compat.h:2298
@ VT_EMPTY
Definition: compat.h:2295
HRESULT init_host_constructor(script_ctx_t *ctx, IWineJSDispatchHost *host_constr, IWineJSDispatch *prototype, IWineJSDispatch **ret)
Definition: function.c:1190
static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl
Definition: jscript.c:1233
static void release_named_item_script_obj(named_item_t *item)
Definition: jscript.c:130
static JScript * impl_from_IObjectSafety(IObjectSafety *iface)
Definition: jscript.c:1308
static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
Definition: jscript.c:1051
static JScript * impl_from_IActiveScriptParse(IActiveScriptParse *iface)
Definition: jscript.c:1034
static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
Definition: jscript.c:1057
static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
Definition: jscript.c:815
static void clear_script_queue(JScript *This)
Definition: jscript.c:385
void reset_ei(jsexcept_t *ei)
Definition: jscript.c:314
static HRESULT WINAPI JScriptError_GetExceptionInfo(IActiveScriptError *iface, EXCEPINFO *excepinfo)
Definition: jscript.c:244
static void change_state(JScript *This, SCRIPTSTATE state)
Definition: jscript.c:107
static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface, SCRIPTTHREADID *pstridThread)
Definition: jscript.c:976
static const IActiveScriptParseVtbl JScriptParseVtbl
Definition: jscript.c:1156
static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
Definition: jscript.c:687
static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface, LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
Definition: jscript.c:1188
static ULONG WINAPI JScript_Release(IActiveScript *iface)
Definition: jscript.c:697
static void script_globals_release(script_ctx_t *ctx)
Definition: jscript.c:96
#define SUPPORTED_OPTIONS
Definition: jscript.c:1331
static ULONG WINAPI JScriptSafety_AddRef(IObjectSafety *iface)
Definition: jscript.c:1319
static ULONG WINAPI JScriptError_Release(IActiveScriptError *iface)
Definition: jscript.c:229
static HRESULT WINAPI JScriptError_GetSourcePosition(IActiveScriptError *iface, DWORD *source_context, ULONG *line, LONG *character)
Definition: jscript.c:262
static ULONG WINAPI JScriptError_AddRef(IActiveScriptError *iface)
Definition: jscript.c:219
static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)
Definition: jscript.c:887
static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty, VARIANT *pvarIndex, VARIANT *pvarValue)
Definition: jscript.c:1271
static ULONG WINAPI WineJScript_Release(IWineJScript *iface)
Definition: jscript.c:1448
static HRESULT WINAPI WineJScript_QueryInterface(IWineJScript *iface, REFIID riid, void **ppv)
Definition: jscript.c:1436
static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface, IActiveScriptSite *pass)
Definition: jscript.c:720
void release_named_item(named_item_t *item)
Definition: jscript.c:186
static HRESULT WINAPI JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
Definition: jscript.c:1170
#define IActiveScriptParseProcedure2Vtbl
Definition: jscript.c:39
static JScriptError * impl_from_IActiveScriptError(IActiveScriptError *iface)
Definition: jscript.c:194
static void release_persistent_script_objs(JScript *This)
Definition: jscript.c:408
static HRESULT WINAPI JScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty, VARIANT *pvarIndex, VARIANT *pvarValue)
Definition: jscript.c:1263
static ULONG WINAPI JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
Definition: jscript.c:1176
static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface, LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, BSTR *pbstrName, EXCEPINFO *pexcepinfo)
Definition: jscript.c:1072
static HRESULT WINAPI JScript_Close(IActiveScript *iface)
Definition: jscript.c:872
static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
Definition: jscript.c:1039
static void decrease_state(JScript *This, SCRIPTSTATE state)
Definition: jscript.c:454
static ULONG WINAPI AXSite_Release(IServiceProvider *iface)
Definition: jscript.c:576
static IServiceProviderVtbl AXSiteVtbl
Definition: jscript.c:607
static JScript * impl_from_IActiveScript(IActiveScript *iface)
Definition: jscript.c:638
#define IActiveScriptParseVtbl
Definition: jscript.c:38
static HRESULT WINAPI VariantChangeType_ChangeType(IVariantChangeType *iface, VARIANT *dst, VARIANT *src, LCID lcid, VARTYPE vt)
Definition: jscript.c:1394
static const IVariantChangeTypeVtbl VariantChangeTypeVtbl
Definition: jscript.c:1424
static ULONG WINAPI JScriptProperty_AddRef(IActiveScriptProperty *iface)
Definition: jscript.c:1251
IUnknown * create_ax_site(script_ctx_t *ctx)
Definition: jscript.c:614
static const IActiveScriptVtbl JScriptVtbl
Definition: jscript.c:1015
static ULONG WINAPI WineJScript_AddRef(IWineJScript *iface)
Definition: jscript.c:1442
static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
Definition: jscript.c:1008
static JScript * impl_from_IWineJScript(IWineJScript *iface)
Definition: jscript.c:1431
static ULONG WINAPI VariantChangeType_Release(IVariantChangeType *iface)
Definition: jscript.c:1388
static AXSite * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: jscript.c:541
static HRESULT WINAPI WineJScript_InitHostObject(IWineJScript *iface, IWineJSDispatchHost *host_obj, IWineJSDispatch *prototype, UINT32 flags, IWineJSDispatch **ret)
Definition: jscript.c:1454
static HRESULT WINAPI JScriptError_GetSourceLineText(IActiveScriptError *iface, BSTR *source)
Definition: jscript.c:288
HRESULT create_jscript_object(BOOL is_encode, REFIID riid, void **ppv)
Definition: jscript.c:1476
static const IActiveScriptErrorVtbl JScriptErrorVtbl
Definition: jscript.c:305
static HRESULT WINAPI JScriptError_QueryInterface(IActiveScriptError *iface, REFIID riid, void **ppv)
Definition: jscript.c:199
static void clear_persistent_code_list(JScript *This)
Definition: jscript.c:398
static JScript * impl_from_IActiveScriptProperty(IActiveScriptProperty *iface)
Definition: jscript.c:1240
static void release_named_item_list(JScript *This)
Definition: jscript.c:417
static HRESULT WINAPI JScriptSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
Definition: jscript.c:1313
static const IWineJScriptVtbl WineJScriptVtbl
Definition: jscript.c:1468
static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface, SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
Definition: jscript.c:992
static HRESULT WINAPI JScriptSafety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
Definition: jscript.c:1333
static HRESULT WINAPI JScriptSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
Definition: jscript.c:1349
static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib, DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
Definition: jscript.c:940
static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
Definition: jscript.c:856
static ULONG WINAPI JScriptSafety_Release(IObjectSafety *iface)
Definition: jscript.c:1325
static ULONG WINAPI AXSite_AddRef(IServiceProvider *iface)
Definition: jscript.c:566
static HRESULT WINAPI JScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv)
Definition: jscript.c:1245
HRESULT create_named_item_script_obj(script_ctx_t *ctx, named_item_t *item)
Definition: jscript.c:124
static HRESULT WINAPI WineJScript_InitHostConstructor(IWineJScript *iface, IWineJSDispatchHost *constr, IWineJSDispatch *prototype, IWineJSDispatch **ret)
Definition: jscript.c:1461
void enter_script(script_ctx_t *ctx, jsexcept_t *ei)
Definition: jscript.c:340
static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
Definition: jscript.c:1045
#define CTXARG_T
Definition: jscript.c:37
static HRESULT exec_global_code(script_ctx_t *ctx, bytecode_t *code, jsval_t *r)
Definition: jscript.c:426
static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName, IDispatch **ppdisp)
Definition: jscript.c:948
static HRESULT retrieve_named_item_disp(IActiveScriptSite *site, named_item_t *item)
Definition: jscript.c:138
static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid, void **ppvObject)
Definition: jscript.c:807
static JScript * impl_from_IVariantChangeType(IVariantChangeType *iface)
Definition: jscript.c:1371
static const IObjectSafetyVtbl JScriptSafetyVtbl
Definition: jscript.c:1363
static ULONG WINAPI JScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
Definition: jscript.c:1182
static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface, SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
Definition: jscript.c:1000
static void exec_queued_code(JScript *This)
Definition: jscript.c:437
static HRESULT WINAPI AXSite_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: jscript.c:546
void script_release(script_ctx_t *ctx)
Definition: jscript.c:75
static const IActiveScriptPropertyVtbl JScriptPropertyVtbl
Definition: jscript.c:1300
static ULONG WINAPI VariantChangeType_AddRef(IVariantChangeType *iface)
Definition: jscript.c:1382
static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine, DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
Definition: jscript.c:1086
static JScript * impl_from_IActiveScriptParseProcedure2(IActiveScriptParseProcedure2 *iface)
Definition: jscript.c:1165
static HRESULT WINAPI VariantChangeType_QueryInterface(IVariantChangeType *iface, REFIID riid, void **ppv)
Definition: jscript.c:1376
static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface, DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
Definition: jscript.c:984
static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
Definition: jscript.c:643
static HRESULT WINAPI AXSite_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: jscript.c:594
static BOOL is_started(script_ctx_t *ctx)
Definition: jscript.c:117
static ULONG WINAPI JScriptProperty_Release(IActiveScriptProperty *iface)
Definition: jscript.c:1257
named_item_t * lookup_named_item(script_ctx_t *ctx, const WCHAR *item_name, unsigned flags)
Definition: jscript.c:162
HRESULT leave_script(script_ctx_t *ctx, HRESULT result)
Definition: jscript.c:348
LCID lcid
Definition: locale.c:5660
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define assert(_expr)
Definition: assert.h:32
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
static const char * debugstr_variant(const VARIANT *var)
Definition: dom.c:505
static void list_move_tail(struct list_head *list, struct list_head *head)
Definition: list.h:122
return ret
Definition: mutex.c:146
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, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: engine.c:3425
#define EXEC_GLOBAL
Definition: engine.h:305
HRESULT create_source_function(script_ctx_t *, bytecode_t *, function_code_t *, scope_chain_t *, jsdisp_t **)
Definition: function.c:953
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLuint res
Definition: glext.h:9613
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
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
IHost host_obj
Definition: host.c:474
#define ss
Definition: i386-dis.c:441
static void lock_module(void)
Definition: ieframe.h:335
static void unlock_module(void)
Definition: ieframe.h:339
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define InterlockedCompareExchangePointer
Definition: interlocked.h:144
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
void release_bytecode(bytecode_t *code)
Definition: compile.c:2459
HRESULT compile_script(script_ctx_t *ctx, const WCHAR *code, UINT64 source_context, unsigned start_line, const WCHAR *args, const WCHAR *delimiter, BOOL from_eval, BOOL use_decode, named_item_t *named_item, bytecode_t **ret)
Definition: compile.c:2725
unsigned get_location_line(bytecode_t *code, unsigned loc, unsigned *char_pos)
Definition: compile.c:2445
HRESULT init_host_object(script_ctx_t *ctx, IWineJSDispatchHost *host_iface, IWineJSDispatch *prototype_iface, UINT32 flags, IWineJSDispatch **ret)
Definition: dispex.c:3557
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
HRESULT create_dispex(script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype, jsdisp_t **dispex)
Definition: dispex.c:2493
HRESULT gc_run(script_ctx_t *ctx)
Definition: dispex.c:928
HRESULT init_global(script_ctx_t *ctx)
Definition: global.c:1091
void release_cc(cc_ctx_t *)
Definition: lex.c:817
void release_thread_data(struct thread_data *)
Definition: jscript_main.c:69
#define SP_CALLER_UNINITIALIZED
Definition: jscript.h:349
void heap_pool_init(heap_pool_t *)
Definition: jsutils.c:66
HRESULT create_jscaller(script_ctx_t *)
Definition: jsutils.c:1109
#define SCRIPTLANGUAGEVERSION_HTML
Definition: jscript.h:48
struct thread_data * get_thread_data(void)
Definition: jscript_main.c:51
void heap_pool_free(heap_pool_t *)
Definition: jsutils.c:164
static IDispatch * to_disp(jsdisp_t *jsdisp)
Definition: jscript.h:222
@ JSCLASS_GLOBAL
Definition: jscript.h:110
HRESULT variant_change_type(script_ctx_t *, VARIANT *, VARIANT *, VARTYPE)
Definition: jsutils.c:922
HRESULT jsstr_to_bstr(jsstr_t *str, BSTR *r)
Definition: jsstr.c:306
jsstr_t * jsstr_empty(void)
Definition: jsstr.c:291
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107
void jsval_release(jsval_t val)
Definition: jsutils.c:186
HRESULT jsval_to_variant(jsval_t val, VARIANT *retv)
Definition: jsutils.c:367
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
#define error(str)
Definition: mkdosfs.c:1605
HRESULT hres
Definition: protocol.c:465
static IActiveScriptSite * site
Definition: script.c:149
static EXCEPINFO excepinfo
Definition: automation.c:47
static const WCHAR sp[]
Definition: suminfo.c:287
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define V_VT(A)
Definition: oleauto.h:211
#define V_I4(A)
Definition: oleauto.h:247
const GUID IID_IDispatch
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
DWORD LCID
Definition: nls.h:13
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
LONG ref
Definition: jscript.c:536
IServiceProvider IServiceProvider_iface
Definition: jscript.c:534
IServiceProvider * sp
Definition: jscript.c:538
jsexcept_t ei
Definition: jscript.c:72
IActiveScriptError IActiveScriptError_iface
Definition: jscript.c:70
LONG ref
Definition: jscript.c:71
IWineJScript IWineJScript_iface
Definition: jscript.c:50
IActiveScriptParse IActiveScriptParse_iface
Definition: jscript.c:45
IActiveScriptProperty IActiveScriptProperty_iface
Definition: jscript.c:47
DWORD version
Definition: jscript.c:58
LCID lcid
Definition: jscript.c:57
IActiveScript IActiveScript_iface
Definition: jscript.c:44
IObjectSafety IObjectSafety_iface
Definition: jscript.c:48
LONG ref
Definition: jscript.c:52
DWORD safeopt
Definition: jscript.c:54
BOOL is_encode
Definition: jscript.c:60
BOOL html_mode
Definition: jscript.c:59
IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_iface
Definition: jscript.c:46
struct thread_data * thread_data
Definition: jscript.c:55
BOOL is_initialized
Definition: jscript.c:61
script_ctx_t * ctx
Definition: jscript.c:56
IActiveScriptSite * site
Definition: jscript.c:63
IVariantChangeType IVariantChangeType_iface
Definition: jscript.c:49
Definition: scsiwmi.h:51
struct list entry
Definition: engine.h:213
named_item_t * named_item
Definition: engine.h:199
BOOL is_persistent
Definition: engine.h:193
unsigned loc
Definition: engine.h:264
BOOL valid_value
Definition: engine.h:256
BOOL enter_notified
Definition: engine.h:266
bytecode_t * code
Definition: engine.h:263
jsstr_t * message
Definition: engine.h:260
jsexcept_t * prev
Definition: engine.h:267
jsstr_t * line
Definition: engine.h:261
HRESULT error
Definition: engine.h:254
jsval_t value
Definition: engine.h:257
jsstr_t * source
Definition: engine.h:259
Definition: jsval.h:54
jsclass_t class
Definition: jscript.h:183
Definition: inflate.c:139
Definition: parser.c:49
Definition: list.h:15
struct list entry
Definition: jscript.h:156
Definition: send.c:48
LONG ref
Definition: jscript.h:136
#define LIST_ENTRY(type)
Definition: queue.h:175
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t UINT32
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
pass
Definition: typegen.h:25
CONTEXT ctx
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_UNEXPECTED
Definition: winerror.h:3528
#define DISP_E_EXCEPTION
Definition: winerror.h:3621
#define E_POINTER
Definition: winerror.h:3480