ReactOS 0.4.17-dev-357-ga8f14ff
vbscript.c
Go to the documentation of this file.
1/*
2 * Copyright 2011 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
20#include <assert.h>
21
22#include "vbscript.h"
23#include "objsafe.h"
24
25#include "wine/debug.h"
26
28
29#ifdef _WIN64
30
31#define CTXARG_T DWORDLONG
32#define IActiveScriptDebugVtbl IActiveScriptDebug64Vtbl
33#define IActiveScriptParseVtbl IActiveScriptParse64Vtbl
34#define IActiveScriptParseProcedure2Vtbl IActiveScriptParseProcedure2_64Vtbl
35
36#else
37
38#define CTXARG_T DWORD
39#define IActiveScriptDebugVtbl IActiveScriptDebug32Vtbl
40#define IActiveScriptParseVtbl IActiveScriptParse32Vtbl
41#define IActiveScriptParseProcedure2Vtbl IActiveScriptParseProcedure2_32Vtbl
42
43#endif
44
45struct VBScript {
47 IActiveScriptDebug IActiveScriptDebug_iface;
48 IActiveScriptParse IActiveScriptParse_iface;
49 IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_iface;
51
53
58};
59
60typedef struct {
63 EXCEPINFO ei;
65 unsigned line;
66 unsigned character;
68
70{
71 size_t size = (lstrlenW(str) + 1) * sizeof(WCHAR);
73 if (ret) memcpy(ret, str, size);
74 return ret;
75}
76
78{
79 if(This->state == state)
80 return;
81
82 This->state = state;
83 if(This->ctx->site)
84 IActiveScriptSite_OnStateChange(This->ctx->site, state);
85}
86
88{
89 return This->state == SCRIPTSTATE_STARTED
90 || This->state == SCRIPTSTATE_CONNECTED
91 || This->state == SCRIPTSTATE_DISCONNECTED;
92}
93
95{
96 ScriptDisp *obj = ctx->script_obj;
97 function_t *func_iter, **new_funcs;
98 dynamic_var_t *var, **new_vars;
99 IServiceProvider *prev_caller;
100 size_t cnt, i;
102
103 if(code->named_item) {
104 if(!code->named_item->script_obj) {
105 hres = create_script_disp(ctx, &code->named_item->script_obj);
106 if(FAILED(hres)) return hres;
107 }
108 obj = code->named_item->script_obj;
109 }
110
111 cnt = obj->global_vars_cnt + code->main_code.var_cnt;
112 if (cnt > obj->global_vars_size)
113 {
114 if (obj->global_vars)
115 new_vars = realloc(obj->global_vars, cnt * sizeof(*new_vars));
116 else
117 new_vars = malloc(cnt * sizeof(*new_vars));
118 if (!new_vars)
119 return E_OUTOFMEMORY;
120 obj->global_vars = new_vars;
121 obj->global_vars_size = cnt;
122 }
123
124 cnt = obj->global_funcs_cnt;
125 for (func_iter = code->funcs; func_iter; func_iter = func_iter->next)
126 cnt++;
127 if (cnt > obj->global_funcs_size)
128 {
129 if (obj->global_funcs)
130 new_funcs = realloc(obj->global_funcs, cnt * sizeof(*new_funcs));
131 else
132 new_funcs = malloc(cnt * sizeof(*new_funcs));
133 if (!new_funcs)
134 return E_OUTOFMEMORY;
135 obj->global_funcs = new_funcs;
136 obj->global_funcs_size = cnt;
137 }
138
139 for (i = 0; i < code->main_code.var_cnt; i++)
140 {
141 if (!(var = heap_pool_alloc(&obj->heap, sizeof(*var))))
142 return E_OUTOFMEMORY;
143
144 var->name = heap_pool_strdup(&obj->heap, code->main_code.vars[i].name);
145 if (!var->name)
146 return E_OUTOFMEMORY;
147 V_VT(&var->v) = VT_EMPTY;
148 var->is_const = FALSE;
149 var->array = NULL;
150
151 obj->global_vars[obj->global_vars_cnt + i] = var;
152 }
153
154 obj->global_vars_cnt += code->main_code.var_cnt;
155
156 for (func_iter = code->funcs; func_iter; func_iter = func_iter->next)
157 {
158 for (i = 0; i < obj->global_funcs_cnt; i++)
159 {
160 if (!wcsicmp(obj->global_funcs[i]->name, func_iter->name))
161 {
162 /* global function already exists, replace it */
163 obj->global_funcs[i] = func_iter;
164 break;
165 }
166 }
167 if (i == obj->global_funcs_cnt)
168 obj->global_funcs[obj->global_funcs_cnt++] = func_iter;
169 }
170
171 if (code->classes)
172 {
173 class_desc_t *class = code->classes;
174
175 while (1)
176 {
177 class->ctx = ctx;
178 if (!class->next)
179 break;
180 class = class->next;
181 }
182
183 class->next = obj->classes;
184 obj->classes = code->classes;
185 code->last_class = class;
186 }
187
188 code->pending_exec = FALSE;
189
190 prev_caller = ctx->vbcaller->caller;
191 ctx->vbcaller->caller = SP_CALLER_UNINITIALIZED;
192 hres = exec_script(ctx, TRUE, &code->main_code, NULL, NULL, res);
193 ctx->vbcaller->caller = prev_caller;
194 return hres;
195}
196
198{
199 vbscode_t *iter;
200
201 LIST_FOR_EACH_ENTRY(iter, &ctx->code_list, vbscode_t, entry) {
202 if(iter->pending_exec)
203 exec_global_code(ctx, iter, NULL);
204 }
205}
206
208{
209 IUnknown *unk;
211
212 hres = IActiveScriptSite_GetItemInfo(site, item->name, SCRIPTINFO_IUNKNOWN, &unk, NULL);
213 if(FAILED(hres)) {
214 WARN("GetItemInfo failed: %08lx\n", hres);
215 return hres;
216 }
217
218 hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&item->disp);
219 IUnknown_Release(unk);
220 if(FAILED(hres)) {
221 WARN("object does not implement IDispatch\n");
222 return hres;
223 }
224
225 return S_OK;
226}
227
229{
232
233 LIST_FOR_EACH_ENTRY(item, &ctx->named_items, named_item_t, entry) {
234 if((item->flags & flags) == flags && !wcsicmp(item->name, name)) {
235 if(!item->script_obj && !(item->flags & SCRIPTITEM_GLOBALMEMBERS)) {
236 hres = create_script_disp(ctx, &item->script_obj);
237 if(FAILED(hres)) return NULL;
238 }
239
240 if(!item->disp && (flags || !(item->flags & SCRIPTITEM_CODEONLY))) {
242 if(FAILED(hres)) continue;
243 }
244
245 return item;
246 }
247 }
248
249 return NULL;
250}
251
253{
254 if(!item->script_obj) return;
255
256 item->script_obj->ctx = NULL;
257 IDispatchEx_Release(&item->script_obj->IDispatchEx_iface);
258 item->script_obj = NULL;
259}
260
262{
263 if(--item->ref) return;
264
265 free(item->name);
266 free(item);
267}
268
270{
271 named_item_t *item, *item_next;
272 vbscode_t *code, *code_next;
273
275 clear_ei(&ctx->ei);
276
277 LIST_FOR_EACH_ENTRY_SAFE(code, code_next, &ctx->code_list, vbscode_t, entry)
278 {
279 if(code->is_persistent)
280 {
281 code->pending_exec = TRUE;
282 if(code->last_class) code->last_class->next = NULL;
283 if(code->named_item) release_named_item_script_obj(code->named_item);
284 }
285 else
286 {
287 list_remove(&code->entry);
289 }
290 }
291
292 LIST_FOR_EACH_ENTRY_SAFE(item, item_next, &ctx->named_items, named_item_t, entry)
293 {
294 if(item->disp)
295 {
296 IDispatch_Release(item->disp);
297 item->disp = NULL;
298 }
300 if(!(item->flags & SCRIPTITEM_ISPERSISTENT))
301 {
302 list_remove(&item->entry);
304 }
305 }
306
307 if(ctx->secmgr) {
308 IInternetHostSecurityManager_Release(ctx->secmgr);
309 ctx->secmgr = NULL;
310 }
311
312 if(ctx->site) {
313 IActiveScriptSite_Release(ctx->site);
314 ctx->site = NULL;
315 }
316
317 if(ctx->script_obj) {
318 ScriptDisp *script_obj = ctx->script_obj;
319
320 ctx->script_obj = NULL;
321 script_obj->ctx = NULL;
322 IDispatchEx_Release(&script_obj->IDispatchEx_iface);
323 }
324}
325
327{
328 while(!list_empty(&ctx->code_list)) {
329 vbscode_t *iter = LIST_ENTRY(list_head(&ctx->code_list), vbscode_t, entry);
330
331 list_remove(&iter->entry);
332 release_vbscode(iter);
333 }
334}
335
337{
338 while(!list_empty(&ctx->named_items)) {
339 named_item_t *iter = LIST_ENTRY(list_head(&ctx->named_items), named_item_t, entry);
340 list_remove(&iter->entry);
341 release_named_item(iter);
342 }
343}
344
346{
347 switch(This->state) {
351 return;
352 /* FALLTHROUGH */
356 /* FALLTHROUGH */
361 break;
362 release_script(This->ctx);
363 This->thread_id = 0;
367 }
368 break;
370 break;
372 }
373}
374
376{
378}
379
381{
383
384 if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IServiceProvider, riid)) {
385 *ppv = &This->IServiceProvider_iface;
386 }else {
387 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
388 *ppv = NULL;
389 return E_NOINTERFACE;
390 }
391
392 IUnknown_AddRef((IUnknown*)*ppv);
393 return S_OK;
394}
395
397{
400
401 TRACE("(%p) ref=%ld\n", This, ref);
402
403 return ref;
404}
405
407{
410
411 TRACE("(%p) ref=%ld\n", This, ref);
412
413 if(!ref)
414 free(This);
415
416 return ref;
417}
418
420 REFIID riid, void **ppv)
421{
423
424 if(IsEqualGUID(guidService, &IID_IActiveScriptSite)) {
425 TRACE("(%p)->(IID_IActiveScriptSite)\n", This);
426 if(This->ctx->site)
427 return IActiveScriptSite_QueryInterface(This->ctx->site, riid, ppv);
428 *ppv = NULL;
429 return E_NOINTERFACE;
430 }
431
432 if(IsEqualGUID(guidService, &SID_GetCaller)) {
433 TRACE("(%p)->(SID_GetCaller)\n", This);
434 *ppv = NULL;
435 if(!This->caller)
436 return S_OK;
437 return (This->caller == SP_CALLER_UNINITIALIZED) ? E_NOINTERFACE : IServiceProvider_QueryInterface(This->caller, riid, ppv);
438 }
439
440 FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
441
442 *ppv = NULL;
443 return E_NOINTERFACE;
444}
445
446static const IServiceProviderVtbl ServiceProviderVtbl = {
451};
452
453static struct vbcaller *create_vbcaller(void)
454{
455 struct vbcaller *ret;
456
457 ret = malloc(sizeof(*ret));
458 if(ret) {
459 ret->IServiceProvider_iface.lpVtbl = &ServiceProviderVtbl;
460 ret->ref = 1;
462 }
463 return ret;
464}
465
467{
468 return CONTAINING_RECORD(iface, VBScriptError, IActiveScriptError_iface);
469}
470
472{
474
476 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
477 *ppv = &This->IActiveScriptError_iface;
478 }else if(IsEqualGUID(riid, &IID_IActiveScriptError)) {
479 TRACE("(%p)->(IID_IActiveScriptError %p)\n", This, ppv);
480 *ppv = &This->IActiveScriptError_iface;
481 }else {
482 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
483 *ppv = NULL;
484 return E_NOINTERFACE;
485 }
486
487 IUnknown_AddRef((IUnknown*)*ppv);
488 return S_OK;
489}
490
492{
495
496 TRACE("(%p) ref=%ld\n", This, ref);
497
498 return ref;
499}
500
502{
505
506 TRACE("(%p) ref=%ld\n", This, ref);
507
508 if(!ref)
509 free(This);
510
511 return ref;
512}
513
515{
517
518 TRACE("(%p)->(%p)\n", This, excepinfo);
519
520 *excepinfo = This->ei;
521 excepinfo->bstrSource = SysAllocString(This->ei.bstrSource);
522 excepinfo->bstrDescription = SysAllocString(This->ei.bstrDescription);
523 excepinfo->bstrHelpFile = SysAllocString(This->ei.bstrHelpFile);
524 return S_OK;
525}
526
528{
530
531 TRACE("(%p)->(%p %p %p)\n", This, source_context, line, character);
532
533 if(source_context)
534 *source_context = This->cookie;
535 if(line)
536 *line = This->line;
537 if(character)
538 *character = This->character;
539 return S_OK;
540}
541
543{
545 FIXME("(%p)->(%p)\n", This, source);
546 return E_NOTIMPL;
547}
548
549static const IActiveScriptErrorVtbl VBScriptErrorVtbl = {
556};
557
559{
561 const WCHAR *p, *nl;
563
564 if(!(error = malloc(sizeof(*error))))
565 return E_OUTOFMEMORY;
566 error->IActiveScriptError_iface.lpVtbl = &VBScriptErrorVtbl;
567
568 error->ref = 1;
569 error->ei = ctx->ei;
570 memset(&ctx->ei, 0, sizeof(ctx->ei));
571 result = error->ei.scode;
572
573 p = code->source;
574 error->cookie = code->cookie;
575 error->line = code->start_line;
576 for(nl = p = code->source; p < code->source + loc; p++) {
577 if(*p != '\n') continue;
578 error->line++;
579 nl = p + 1;
580 }
581 error->character = code->source + loc - nl;
582
583 hres = IActiveScriptSite_OnScriptError(ctx->site, &error->IActiveScriptError_iface);
584 IActiveScriptError_Release(&error->IActiveScriptError_iface);
585 return hres == S_OK ? SCRIPT_E_REPORTED : result;
586}
587
589{
590 return CONTAINING_RECORD(iface, VBScript, IActiveScript_iface);
591}
592
594{
596
598 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
599 *ppv = &This->IActiveScript_iface;
600 }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
601 TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
602 *ppv = &This->IActiveScript_iface;
603 }else if(IsEqualGUID(riid, &IID_IActiveScriptDebug)) {
604 TRACE("(%p)->(IID_IActiveScriptDebug %p)\n", This, ppv);
605 *ppv = &This->IActiveScriptDebug_iface;
606 }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
607 TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
608 *ppv = &This->IActiveScriptParse_iface;
609 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure2)) {
610 TRACE("(%p)->(IID_IActiveScriptParseProcedure2 %p)\n", This, ppv);
611 *ppv = &This->IActiveScriptParseProcedure2_iface;
612 }else if(IsEqualGUID(riid, &IID_IObjectSafety)) {
613 TRACE("(%p)->(IID_IObjectSafety %p)\n", This, ppv);
614 *ppv = &This->IObjectSafety_iface;
615 }else {
616 WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
617 *ppv = NULL;
618 return E_NOINTERFACE;
619 }
620
621 IUnknown_AddRef((IUnknown*)*ppv);
622 return S_OK;
623}
624
626{
629
630 TRACE("(%p) ref=%ld\n", This, ref);
631
632 return ref;
633}
634
636{
639
640 TRACE("(%p) ref=%ld\n", iface, ref);
641
642 if(!ref) {
645 IServiceProvider_Release(&This->ctx->vbcaller->IServiceProvider_iface);
646 free(This->ctx);
647 free(This);
648 }
649
650 return ref;
651}
652
654{
659
660 TRACE("(%p)->(%p)\n", This, pass);
661
662 if(!pass)
663 return E_POINTER;
664
665 if(This->ctx->site)
666 return E_UNEXPECTED;
667
669 return E_UNEXPECTED;
670
671 /* Retrieve new dispatches for persistent named items */
672 LIST_FOR_EACH_ENTRY(item, &This->ctx->named_items, named_item_t, entry)
673 {
674 if(!item->disp)
675 {
677 if(FAILED(hres)) return hres;
678 }
679
680 /* For some reason, CODEONLY flag is lost in re-initialized scripts */
681 item->flags &= ~SCRIPTITEM_CODEONLY;
682 }
683
684 hres = create_script_disp(This->ctx, &This->ctx->script_obj);
685 if(FAILED(hres))
686 return hres;
687
688 This->ctx->site = pass;
689 IActiveScriptSite_AddRef(This->ctx->site);
690
691 IActiveScriptSite_GetLCID(This->ctx->site, &lcid);
692 This->ctx->lcid = IsValidLocale(lcid, 0) ? lcid : GetUserDefaultLCID();
693 GetLocaleInfoW(lcid, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, (WCHAR *)&This->ctx->codepage,
694 sizeof(This->ctx->codepage)/sizeof(WCHAR));
695 if (!This->ctx->codepage)
696 This->ctx->codepage = CP_UTF8;
697
698 if(This->is_initialized)
700 return S_OK;
701}
702
704 void **ppvObject)
705{
707 FIXME("(%p)->()\n", This);
708 return E_NOTIMPL;
709}
710
712{
714
715 TRACE("(%p)->(%d)\n", This, ss);
716
717 if(This->thread_id && GetCurrentThreadId() != This->thread_id)
718 return E_UNEXPECTED;
719
721 if(This->state == SCRIPTSTATE_CLOSED)
722 return E_UNEXPECTED;
723
725 return S_OK;
726 }
727
728 if(!This->is_initialized || (!This->ctx->site && ss != SCRIPTSTATE_CLOSED))
729 return E_UNEXPECTED;
730
731 switch(ss) {
733 case SCRIPTSTATE_CONNECTED: /* FIXME */
734 if(This->state == SCRIPTSTATE_CLOSED)
735 return E_UNEXPECTED;
736
738 break;
741 return S_OK;
744 return S_OK;
746 FIXME("unimplemented SCRIPTSTATE_DISCONNECTED\n");
747 return S_OK;
748 default:
749 FIXME("unimplemented state %d\n", ss);
750 return E_NOTIMPL;
751 }
752
754 return S_OK;
755}
756
758{
760
761 TRACE("(%p)->(%p)\n", This, pssState);
762
763 if(!pssState)
764 return E_POINTER;
765
766 if(This->thread_id && This->thread_id != GetCurrentThreadId())
767 return E_UNEXPECTED;
768
769 *pssState = This->state;
770 return S_OK;
771}
772
774{
776
777 TRACE("(%p)->()\n", This);
778
779 if(This->thread_id && This->thread_id != GetCurrentThreadId())
780 return E_UNEXPECTED;
781
783 return S_OK;
784}
785
787{
790 IDispatch *disp = NULL;
792
793 TRACE("(%p)->(%s %lx)\n", This, debugstr_w(pstrName), dwFlags);
794
795 if(This->thread_id != GetCurrentThreadId() || !This->ctx->site)
796 return E_UNEXPECTED;
797
798 if(dwFlags & SCRIPTITEM_GLOBALMEMBERS) {
799 IUnknown *unk;
800
801 hres = IActiveScriptSite_GetItemInfo(This->ctx->site, pstrName, SCRIPTINFO_IUNKNOWN, &unk, NULL);
802 if(FAILED(hres)) {
803 WARN("GetItemInfo failed: %08lx\n", hres);
804 return hres;
805 }
806
807 hres = IUnknown_QueryInterface(unk, &IID_IDispatch, (void**)&disp);
808 IUnknown_Release(unk);
809 if(FAILED(hres)) {
810 WARN("object does not implement IDispatch\n");
811 return hres;
812 }
813 }
814
815 item = malloc(sizeof(*item));
816 if(!item) {
817 if(disp)
818 IDispatch_Release(disp);
819 return E_OUTOFMEMORY;
820 }
821
822 item->ref = 1;
823 item->disp = disp;
824 item->flags = dwFlags;
825 item->script_obj = NULL;
826 item->name = wcsdup(pstrName);
827 if(!item->name) {
828 if(disp)
829 IDispatch_Release(disp);
830 free(item);
831 return E_OUTOFMEMORY;
832 }
833
834 list_add_tail(&This->ctx->named_items, &item->entry);
835 return S_OK;
836}
837
839 DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
840{
842 FIXME("(%p)->(%s %ld %ld %ld)\n", This, debugstr_guid(rguidTypeLib), dwMajor, dwMinor, dwFlags);
843 return E_NOTIMPL;
844}
845
846static HRESULT WINAPI VBScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName, IDispatch **ppdisp)
847{
849 ScriptDisp *script_obj;
850
851 TRACE("(%p)->(%s %p)\n", This, debugstr_w(pstrItemName), ppdisp);
852
853 if(!ppdisp)
854 return E_POINTER;
855
856 if(This->thread_id != GetCurrentThreadId() || !This->ctx->script_obj) {
857 *ppdisp = NULL;
858 return E_UNEXPECTED;
859 }
860
861 script_obj = This->ctx->script_obj;
862 if(pstrItemName) {
863 named_item_t *item = lookup_named_item(This->ctx, pstrItemName, 0);
864 if(!item) return E_INVALIDARG;
865 if(item->script_obj) script_obj = item->script_obj;
866 }
867
868 *ppdisp = (IDispatch*)&script_obj->IDispatchEx_iface;
869 IDispatch_AddRef(*ppdisp);
870 return S_OK;
871}
872
874 SCRIPTTHREADID *pstridThread)
875{
877 FIXME("(%p)->()\n", This);
878 return E_NOTIMPL;
879}
880
882 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
883{
885 FIXME("(%p)->()\n", This);
886 return E_NOTIMPL;
887}
888
890 SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
891{
893 FIXME("(%p)->()\n", This);
894 return E_NOTIMPL;
895}
896
898 SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
899{
901 FIXME("(%p)->()\n", This);
902 return E_NOTIMPL;
903}
904
906{
908 FIXME("(%p)->()\n", This);
909 return E_NOTIMPL;
910}
911
912static const IActiveScriptVtbl VBScriptVtbl = {
929};
930
931static inline VBScript *impl_from_IActiveScriptDebug(IActiveScriptDebug *iface)
932{
933 return CONTAINING_RECORD(iface, VBScript, IActiveScriptDebug_iface);
934}
935
936static HRESULT WINAPI VBScriptDebug_QueryInterface(IActiveScriptDebug *iface, REFIID riid, void **ppv)
937{
939 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
940}
941
942static ULONG WINAPI VBScriptDebug_AddRef(IActiveScriptDebug *iface)
943{
945 return IActiveScript_AddRef(&This->IActiveScript_iface);
946}
947
948static ULONG WINAPI VBScriptDebug_Release(IActiveScriptDebug *iface)
949{
951 return IActiveScript_Release(&This->IActiveScript_iface);
952}
953
954static HRESULT WINAPI VBScriptDebug_GetScriptTextAttributes(IActiveScriptDebug *iface,
955 LPCOLESTR code, ULONG len, LPCOLESTR delimiter, DWORD flags, SOURCE_TEXT_ATTR *attr)
956{
958 FIXME("(%p)->(%s %lu %s %#lx %p)\n", This, debugstr_w(code), len,
960 return E_NOTIMPL;
961}
962
964 LPCOLESTR code, ULONG len, LPCOLESTR delimiter, DWORD flags, SOURCE_TEXT_ATTR *attr)
965{
967 FIXME("(%p)->(%s %lu %s %#lx %p)\n", This, debugstr_w(code), len,
969 return E_NOTIMPL;
970}
971
974{
976 FIXME("(%p)->(%s %lu %lu %p)\n", This, wine_dbgstr_longlong(source), offset, len, ret);
977 return E_NOTIMPL;
978}
979
987};
988
989static inline VBScript *impl_from_IActiveScriptParse(IActiveScriptParse *iface)
990{
991 return CONTAINING_RECORD(iface, VBScript, IActiveScriptParse_iface);
992}
993
994static HRESULT WINAPI VBScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
995{
997 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
998}
999
1000static ULONG WINAPI VBScriptParse_AddRef(IActiveScriptParse *iface)
1001{
1003 return IActiveScript_AddRef(&This->IActiveScript_iface);
1004}
1005
1006static ULONG WINAPI VBScriptParse_Release(IActiveScriptParse *iface)
1007{
1009 return IActiveScript_Release(&This->IActiveScript_iface);
1010}
1011
1012static HRESULT WINAPI VBScriptParse_InitNew(IActiveScriptParse *iface)
1013{
1015
1016 TRACE("(%p)\n", This);
1017
1018 if(This->is_initialized)
1019 return E_UNEXPECTED;
1020 This->is_initialized = TRUE;
1021
1022 if(This->ctx->site)
1024 return S_OK;
1025}
1026
1027static HRESULT WINAPI VBScriptParse_AddScriptlet(IActiveScriptParse *iface,
1028 LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName,
1029 LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter,
1030 CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags,
1031 BSTR *pbstrName, EXCEPINFO *pexcepinfo)
1032{
1034 FIXME("(%p)->(%s %s %s %s %s %s %s %lu %lx %p %p)\n", This, debugstr_w(pstrDefaultName),
1035 debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
1036 debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), wine_dbgstr_longlong(dwSourceContextCookie),
1037 ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
1038 return E_NOTIMPL;
1039}
1040
1041static HRESULT WINAPI VBScriptParse_ParseScriptText(IActiveScriptParse *iface,
1042 LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
1043 LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine,
1044 DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
1045{
1047 vbscode_t *code;
1048 HRESULT hres;
1049
1050 TRACE("(%p)->(%s %s %p %s %s %lu %lx %p %p)\n", This, debugstr_w(pstrCode),
1051 debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
1052 wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLine, dwFlags, pvarResult, pexcepinfo);
1053
1054 if(This->thread_id != GetCurrentThreadId() || This->state == SCRIPTSTATE_CLOSED)
1055 return E_UNEXPECTED;
1056
1057 hres = compile_script(This->ctx, pstrCode, pstrItemName, pstrDelimiter, dwSourceContextCookie,
1058 ulStartingLine, dwFlags, &code);
1059 if(FAILED(hres))
1060 return hres;
1061
1062 if(!(dwFlags & SCRIPTTEXT_ISEXPRESSION) && !is_started(This)) {
1063 code->pending_exec = TRUE;
1064 return S_OK;
1065 }
1066
1067 return exec_global_code(This->ctx, code, pvarResult);
1068}
1069
1077};
1078
1079static inline VBScript *impl_from_IActiveScriptParseProcedure2(IActiveScriptParseProcedure2 *iface)
1080{
1081 return CONTAINING_RECORD(iface, VBScript, IActiveScriptParseProcedure2_iface);
1082}
1083
1084static HRESULT WINAPI VBScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
1085{
1087 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1088}
1089
1090static ULONG WINAPI VBScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
1091{
1093 return IActiveScript_AddRef(&This->IActiveScript_iface);
1094}
1095
1096static ULONG WINAPI VBScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
1097{
1099 return IActiveScript_Release(&This->IActiveScript_iface);
1100}
1101
1102static HRESULT WINAPI VBScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface,
1103 LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName,
1104 LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter,
1105 CTXARG_T dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
1106{
1109 vbdisp_t *vbdisp;
1110 HRESULT hres;
1111
1112 TRACE("(%p)->(%s %s %s %s %p %s %s %lu %lx %p)\n", This, debugstr_w(pstrCode), debugstr_w(pstrFormalParams),
1113 debugstr_w(pstrProcedureName), debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
1114 wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLineNumber, dwFlags, ppdisp);
1115
1116 if(This->thread_id != GetCurrentThreadId() || This->state == SCRIPTSTATE_CLOSED)
1117 return E_UNEXPECTED;
1118
1119 hres = compile_procedure(This->ctx, pstrCode, pstrItemName, pstrDelimiter, dwSourceContextCookie,
1120 ulStartingLineNumber, dwFlags, &desc);
1121 if(FAILED(hres))
1122 return hres;
1123
1124 hres = create_vbdisp(desc, &vbdisp);
1125 if(FAILED(hres))
1126 return hres;
1127
1128 *ppdisp = (IDispatch*)&vbdisp->IDispatchEx_iface;
1129 return S_OK;
1130}
1131
1137};
1138
1140{
1141 return CONTAINING_RECORD(iface, VBScript, IObjectSafety_iface);
1142}
1143
1145{
1147 return IActiveScript_QueryInterface(&This->IActiveScript_iface, riid, ppv);
1148}
1149
1151{
1153 return IActiveScript_AddRef(&This->IActiveScript_iface);
1154}
1155
1157{
1159 return IActiveScript_Release(&This->IActiveScript_iface);
1160}
1161
1162#define SUPPORTED_OPTIONS (INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_DISPEX|INTERFACE_USES_SECURITY_MANAGER)
1163
1165 DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
1166{
1168
1169 TRACE("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
1170
1171 if(!pdwSupportedOptions || !pdwEnabledOptions)
1172 return E_POINTER;
1173
1174 *pdwSupportedOptions = SUPPORTED_OPTIONS;
1175 *pdwEnabledOptions = This->ctx->safeopt;
1176 return S_OK;
1177}
1178
1180 DWORD dwOptionSetMask, DWORD dwEnabledOptions)
1181{
1183
1184 TRACE("(%p)->(%s %lx %lx)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
1185
1186 if(dwOptionSetMask & ~SUPPORTED_OPTIONS)
1187 return E_FAIL;
1188
1189 This->ctx->safeopt = (dwEnabledOptions & dwOptionSetMask) | (This->ctx->safeopt & ~dwOptionSetMask) | INTERFACE_USES_DISPEX;
1190 return S_OK;
1191}
1192
1193static const IObjectSafetyVtbl VBScriptSafetyVtbl = {
1199};
1200
1202{
1203 struct vbcaller *vbcaller;
1205 VBScript *ret;
1206 HRESULT hres;
1207
1208 TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
1209
1210 ret = calloc(1, sizeof(*ret));
1211 if(!ret)
1212 return E_OUTOFMEMORY;
1213
1214 if(!(vbcaller = create_vbcaller())) {
1215 free(ret);
1216 return E_OUTOFMEMORY;
1217 }
1218
1219 ret->IActiveScript_iface.lpVtbl = &VBScriptVtbl;
1220 ret->IActiveScriptDebug_iface.lpVtbl = &VBScriptDebugVtbl;
1221 ret->IActiveScriptParse_iface.lpVtbl = &VBScriptParseVtbl;
1222 ret->IActiveScriptParseProcedure2_iface.lpVtbl = &VBScriptParseProcedureVtbl;
1223 ret->IObjectSafety_iface.lpVtbl = &VBScriptSafetyVtbl;
1224
1225 ret->ref = 1;
1227
1228 ctx = ret->ctx = calloc(1, sizeof(*ctx));
1229 if(!ctx) {
1230 IServiceProvider_Release(&vbcaller->IServiceProvider_iface);
1231 free(ret);
1232 return E_OUTOFMEMORY;
1233 }
1234
1235 vbcaller->ctx = ctx;
1236 ctx->vbcaller = vbcaller;
1237 ctx->safeopt = INTERFACE_USES_DISPEX;
1238 list_init(&ctx->objects);
1239 list_init(&ctx->code_list);
1240 list_init(&ctx->named_items);
1241
1242 hres = init_global(ctx);
1243 if(FAILED(hres)) {
1244 IActiveScript_Release(&ret->IActiveScript_iface);
1245 return hres;
1246 }
1247
1248 hres = IActiveScript_QueryInterface(&ret->IActiveScript_iface, riid, ppv);
1249 IActiveScript_Release(&ret->IActiveScript_iface);
1250 return hres;
1251}
1252
1253typedef struct {
1255
1256 LONG ref;
1257
1259} AXSite;
1260
1262{
1263 return CONTAINING_RECORD(iface, AXSite, IServiceProvider_iface);
1264}
1265
1267{
1269
1271 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
1272 *ppv = &This->IServiceProvider_iface;
1273 }else if(IsEqualGUID(&IID_IServiceProvider, riid)) {
1274 TRACE("(%p)->(IID_IServiceProvider %p)\n", This, ppv);
1275 *ppv = &This->IServiceProvider_iface;
1276 }else {
1277 TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
1278 *ppv = NULL;
1279 return E_NOINTERFACE;
1280 }
1281
1282 IUnknown_AddRef((IUnknown*)*ppv);
1283 return S_OK;
1284}
1285
1287{
1290
1291 TRACE("(%p) ref=%ld\n", This, ref);
1292
1293 return ref;
1294}
1295
1297{
1300
1301 TRACE("(%p) ref=%ld\n", This, ref);
1302
1303 if(!ref)
1304 free(This);
1305
1306 return ref;
1307}
1308
1310 REFGUID guidService, REFIID riid, void **ppv)
1311{
1313
1314 TRACE("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
1315
1316 return IServiceProvider_QueryService(This->sp, guidService, riid, ppv);
1317}
1318
1319static IServiceProviderVtbl AXSiteVtbl = {
1324};
1325
1327{
1329 AXSite *ret;
1330 HRESULT hres;
1331
1332 hres = IActiveScriptSite_QueryInterface(ctx->site, &IID_IServiceProvider, (void**)&sp);
1333 if(FAILED(hres)) {
1334 ERR("Could not get IServiceProvider iface: %08lx\n", hres);
1335 return NULL;
1336 }
1337
1338 ret = malloc(sizeof(*ret));
1339 if(!ret) {
1340 IServiceProvider_Release(sp);
1341 return NULL;
1342 }
1343
1344 ret->IServiceProvider_iface.lpVtbl = &AXSiteVtbl;
1345 ret->ref = 1;
1346 ret->sp = sp;
1347
1348 return (IUnknown*)&ret->IServiceProvider_iface;
1349}
WORD SOURCE_TEXT_ATTR
Definition: activdbg.idl:83
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
const WCHAR * class
Definition: main.c:68
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
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
#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 realloc
Definition: debug_ros.c:6
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static BOOL CALLBACK collect_objects(LPCDIDEVICEOBJECTINSTANCEW lpddo, LPVOID pvRef)
Definition: config.c:57
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
OLECHAR * BSTR
Definition: compat.h:2293
@ VT_EMPTY
Definition: compat.h:2295
#define wcsicmp
Definition: compat.h:15
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
Definition: locale.c:2925
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
LCID lcid
Definition: locale.c:5660
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
static HRESULT WINAPI VBScriptError_QueryInterface(IActiveScriptError *iface, REFIID riid, void **ppv)
Definition: vbscript.c:471
static void release_named_item_script_obj(named_item_t *item)
Definition: vbscript.c:252
static HRESULT WINAPI VBScriptDebug_GetScriptletTextAttributes(IActiveScriptDebug *iface, LPCOLESTR code, ULONG len, LPCOLESTR delimiter, DWORD flags, SOURCE_TEXT_ATTR *attr)
Definition: vbscript.c:963
static HRESULT WINAPI VBScriptParseProcedure_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: vbscript.c:1102
static ULONG WINAPI vbcaller_Release(IServiceProvider *iface)
Definition: vbscript.c:406
static HRESULT WINAPI VBScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
Definition: vbscript.c:905
static ULONG WINAPI VBScriptDebug_AddRef(IActiveScriptDebug *iface)
Definition: vbscript.c:942
static HRESULT WINAPI VBScriptParse_ParseScriptText(IActiveScriptParse *iface, LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter, CTXARG_T dwSourceContextCookie, ULONG ulStartingLine, DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
Definition: vbscript.c:1041
static HRESULT WINAPI VBScriptSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
Definition: vbscript.c:1144
static HRESULT WINAPI VBScriptDebug_EnumCodeContextsOfPosition(IActiveScriptDebug *iface, CTXARG_T source, ULONG offset, ULONG len, IEnumDebugCodeContexts **ret)
Definition: vbscript.c:972
static HRESULT WINAPI VBScriptError_GetExceptionInfo(IActiveScriptError *iface, EXCEPINFO *excepinfo)
Definition: vbscript.c:514
static HRESULT WINAPI VBScript_GetCurrentScriptThreadID(IActiveScript *iface, SCRIPTTHREADID *pstridThread)
Definition: vbscript.c:873
static HRESULT WINAPI VBScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
Definition: vbscript.c:711
static void exec_queued_code(script_ctx_t *ctx)
Definition: vbscript.c:197
#define SUPPORTED_OPTIONS
Definition: vbscript.c:1162
static HRESULT WINAPI VBScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
Definition: vbscript.c:757
static HRESULT exec_global_code(script_ctx_t *ctx, vbscode_t *code, VARIANT *res)
Definition: vbscript.c:94
static HRESULT WINAPI VBScriptDebug_QueryInterface(IActiveScriptDebug *iface, REFIID riid, void **ppv)
Definition: vbscript.c:936
static HRESULT WINAPI VBScriptSafety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
Definition: vbscript.c:1164
static ULONG WINAPI VBScriptParse_Release(IActiveScriptParse *iface)
Definition: vbscript.c:1006
void release_named_item(named_item_t *item)
Definition: vbscript.c:261
static HRESULT WINAPI VBScriptError_GetSourceLineText(IActiveScriptError *iface, BSTR *source)
Definition: vbscript.c:542
static HRESULT WINAPI VBScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
Definition: vbscript.c:593
#define IActiveScriptParseProcedure2Vtbl
Definition: vbscript.c:41
static ULONG WINAPI VBScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
Definition: vbscript.c:1090
static HRESULT WINAPI VBScript_SetScriptSite(IActiveScript *iface, IActiveScriptSite *pass)
Definition: vbscript.c:653
static const IActiveScriptParseProcedure2Vtbl VBScriptParseProcedureVtbl
Definition: vbscript.c:1132
static HRESULT WINAPI VBScript_GetScriptSite(IActiveScript *iface, REFIID riid, void **ppvObject)
Definition: vbscript.c:703
static const IActiveScriptDebugVtbl VBScriptDebugVtbl
Definition: vbscript.c:980
static ULONG WINAPI VBScriptError_AddRef(IActiveScriptError *iface)
Definition: vbscript.c:491
static HRESULT WINAPI VBScript_InterruptScriptThread(IActiveScript *iface, SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
Definition: vbscript.c:897
static HRESULT WINAPI VBScript_Close(IActiveScript *iface)
Definition: vbscript.c:773
static HRESULT WINAPI VBScript_GetScriptThreadState(IActiveScript *iface, SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
Definition: vbscript.c:889
static void release_code_list(script_ctx_t *ctx)
Definition: vbscript.c:326
static ULONG WINAPI AXSite_Release(IServiceProvider *iface)
Definition: vbscript.c:1296
static HRESULT WINAPI VBScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName, IDispatch **ppdisp)
Definition: vbscript.c:846
static IServiceProviderVtbl AXSiteVtbl
Definition: vbscript.c:1319
static HRESULT WINAPI vbcaller_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: vbscript.c:419
#define IActiveScriptDebugVtbl
Definition: vbscript.c:39
#define IActiveScriptParseVtbl
Definition: vbscript.c:40
static HRESULT WINAPI VBScriptDebug_GetScriptTextAttributes(IActiveScriptDebug *iface, LPCOLESTR code, ULONG len, LPCOLESTR delimiter, DWORD flags, SOURCE_TEXT_ATTR *attr)
Definition: vbscript.c:954
static HRESULT WINAPI VBScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
Definition: vbscript.c:994
IUnknown * create_ax_site(script_ctx_t *ctx)
Definition: vbscript.c:1326
static const IObjectSafetyVtbl VBScriptSafetyVtbl
Definition: vbscript.c:1193
static ULONG WINAPI vbcaller_AddRef(IServiceProvider *iface)
Definition: vbscript.c:396
static ULONG WINAPI VBScriptDebug_Release(IActiveScriptDebug *iface)
Definition: vbscript.c:948
static void decrease_state(VBScript *This, SCRIPTSTATE state)
Definition: vbscript.c:345
static AXSite * impl_from_IServiceProvider(IServiceProvider *iface)
Definition: vbscript.c:1261
static HRESULT WINAPI VBScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)
Definition: vbscript.c:786
static VBScript * impl_from_IActiveScriptParse(IActiveScriptParse *iface)
Definition: vbscript.c:989
static WCHAR * heap_pool_strdup(heap_pool_t *heap, const WCHAR *str)
Definition: vbscript.c:69
static ULONG WINAPI VBScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
Definition: vbscript.c:1096
static ULONG WINAPI VBScriptSafety_Release(IObjectSafety *iface)
Definition: vbscript.c:1156
static HRESULT WINAPI VBScriptParse_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: vbscript.c:1027
static ULONG WINAPI AXSite_AddRef(IServiceProvider *iface)
Definition: vbscript.c:1286
static ULONG WINAPI VBScriptSafety_AddRef(IObjectSafety *iface)
Definition: vbscript.c:1150
static struct vbcaller * create_vbcaller(void)
Definition: vbscript.c:453
static HRESULT WINAPI VBScriptParse_InitNew(IActiveScriptParse *iface)
Definition: vbscript.c:1012
static HRESULT WINAPI VBScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib, DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
Definition: vbscript.c:838
#define CTXARG_T
Definition: vbscript.c:38
static HRESULT WINAPI VBScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
Definition: vbscript.c:1084
static const IActiveScriptParseVtbl VBScriptParseVtbl
Definition: vbscript.c:1070
static BOOL is_started(VBScript *This)
Definition: vbscript.c:87
static VBScript * impl_from_IActiveScriptParseProcedure2(IActiveScriptParseProcedure2 *iface)
Definition: vbscript.c:1079
static ULONG WINAPI VBScript_Release(IActiveScript *iface)
Definition: vbscript.c:635
static ULONG WINAPI VBScriptParse_AddRef(IActiveScriptParse *iface)
Definition: vbscript.c:1000
static VBScript * impl_from_IActiveScript(IActiveScript *iface)
Definition: vbscript.c:588
static struct vbcaller * vbcaller_from_IServiceProvider(IServiceProvider *iface)
Definition: vbscript.c:375
static void release_named_item_list(script_ctx_t *ctx)
Definition: vbscript.c:336
static HRESULT retrieve_named_item_disp(IActiveScriptSite *site, named_item_t *item)
Definition: vbscript.c:207
static HRESULT WINAPI VBScript_GetScriptThreadID(IActiveScript *iface, DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
Definition: vbscript.c:881
static ULONG WINAPI VBScript_AddRef(IActiveScript *iface)
Definition: vbscript.c:625
static VBScript * impl_from_IActiveScriptDebug(IActiveScriptDebug *iface)
Definition: vbscript.c:931
static void change_state(VBScript *This, SCRIPTSTATE state)
Definition: vbscript.c:77
static ULONG WINAPI VBScriptError_Release(IActiveScriptError *iface)
Definition: vbscript.c:501
static HRESULT WINAPI VBScriptSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions)
Definition: vbscript.c:1179
static HRESULT WINAPI AXSite_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: vbscript.c:1266
static const IServiceProviderVtbl ServiceProviderVtbl
Definition: vbscript.c:446
HRESULT report_script_error(script_ctx_t *ctx, const vbscode_t *code, unsigned loc)
Definition: vbscript.c:558
static HRESULT WINAPI VBScriptError_GetSourcePosition(IActiveScriptError *iface, DWORD *source_context, ULONG *line, LONG *character)
Definition: vbscript.c:527
static const IActiveScriptVtbl VBScriptVtbl
Definition: vbscript.c:912
static const IActiveScriptErrorVtbl VBScriptErrorVtbl
Definition: vbscript.c:549
static HRESULT WINAPI AXSite_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, void **ppv)
Definition: vbscript.c:1309
static void release_script(script_ctx_t *ctx)
Definition: vbscript.c:269
static HRESULT WINAPI vbcaller_QueryInterface(IServiceProvider *iface, REFIID riid, void **ppv)
Definition: vbscript.c:380
HRESULT WINAPI VBScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter, REFIID riid, void **ppv)
Definition: vbscript.c:1201
static VBScriptError * impl_from_IActiveScriptError(IActiveScriptError *iface)
Definition: vbscript.c:466
named_item_t * lookup_named_item(script_ctx_t *ctx, const WCHAR *name, unsigned flags)
Definition: vbscript.c:228
static VBScript * impl_from_IObjectSafety(IObjectSafety *iface)
Definition: vbscript.c:1139
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
GLbitfield flags
Definition: glext.h:7161
GLuint64EXT * result
Definition: glext.h:11304
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HRESULT exec_script(HTMLInnerWindow *, const WCHAR *, const WCHAR *, VARIANT *) DECLSPEC_HIDDEN
Definition: script.c:1245
#define ss
Definition: i386-dis.c:441
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define InterlockedCompareExchange
Definition: interlocked.h:119
void clear_ei(EXCEPINFO *ei)
Definition: interp.c:288
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
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
HRESULT init_global(script_ctx_t *ctx)
Definition: global.c:1091
#define SP_CALLER_UNINITIALIZED
Definition: jscript.h:349
void * heap_pool_alloc(heap_pool_t *, DWORD) __WINE_ALLOC_SIZE(2)
Definition: jsutils.c:72
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
#define error(str)
Definition: mkdosfs.c:1605
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1204
const char * var
Definition: shader.c:5666
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
const char * delimiter
Definition: string.c:1779
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define LOCALE_USER_DEFAULT
#define DEFAULT_UNREACHABLE
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
#define V_VT(A)
Definition: oleauto.h:211
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
static unsigned __int64 next
Definition: rand_nt.c:6
#define calloc
Definition: rosglue.h:14
const WCHAR * str
DWORD LCID
Definition: nls.h:13
#define CP_UTF8
Definition: nls.h:20
#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
script_ctx_t * ctx
Definition: vbscript.h:138
IDispatchEx IDispatchEx_iface
Definition: vbscript.h:125
DWORD_PTR cookie
Definition: vbscript.c:64
unsigned character
Definition: vbscript.c:66
unsigned line
Definition: vbscript.c:65
EXCEPINFO ei
Definition: vbscript.c:63
IActiveScriptError IActiveScriptError_iface
Definition: vbscript.c:61
LONG thread_id
Definition: vbscript.c:56
IActiveScriptParseProcedure2 IActiveScriptParseProcedure2_iface
Definition: vbscript.c:49
script_ctx_t * ctx
Definition: vbscript.c:55
BOOL is_initialized
Definition: vbscript.c:57
SCRIPTSTATE state
Definition: vbscript.c:54
IActiveScriptDebug IActiveScriptDebug_iface
Definition: vbscript.c:47
LONG ref
Definition: vbscript.c:52
IActiveScriptParse IActiveScriptParse_iface
Definition: vbscript.c:48
IActiveScript IActiveScript_iface
Definition: vbscript.c:46
IObjectSafety IObjectSafety_iface
Definition: vbscript.c:50
Definition: scsiwmi.h:51
const WCHAR * name
Definition: vbscript.h:346
function_t * next
Definition: vbscript.h:356
IDispatchEx IDispatchEx_iface
Definition: vbscript.h:105
BOOL pending_exec
Definition: vbscript.h:369
struct list entry
Definition: vbscript.h:383
Definition: cookie.c:202
Definition: inflate.c:139
Definition: heap.c:86
Definition: parser.c:49
Definition: list.h:15
Definition: name.c:39
struct list entry
Definition: jscript.h:156
Definition: send.c:48
IServiceProvider IServiceProvider_iface
Definition: vbscript.h:188
script_ctx_t * ctx
Definition: vbscript.h:192
LONG ref
Definition: vbscript.h:190
#define LIST_ENTRY(type)
Definition: queue.h:175
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
pass
Definition: typegen.h:25
HRESULT create_vbdisp(const class_desc_t *desc, vbdisp_t **ret)
Definition: vbdisp.c:507
HRESULT create_script_disp(script_ctx_t *ctx, ScriptDisp **ret)
Definition: vbdisp.c:1545
HRESULT compile_procedure(script_ctx_t *script, const WCHAR *src, const WCHAR *item_name, const WCHAR *delimiter, DWORD_PTR cookie, unsigned start_line, DWORD flags, class_desc_t **ret)
Definition: compile.c:2078
void release_vbscode(vbscode_t *code)
Definition: compile.c:1915
void detach_global_objects(script_ctx_t *ctx)
Definition: global.c:3602
_In_ size_t cnt
Definition: wcstombs.cpp:43
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 E_POINTER
Definition: winerror.h:3480
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:48