push 3db4586efe3cd427f1c34d11791f637eb13e9e6d
[wine/hacks.git] / dlls / jscript / jscript.c
blob79b55c8e0fbb8d77ac91ef57f56d5e9f533f4483
1 /*
2 * Copyright 2008 Jacek Caban for CodeWeavers
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.
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.
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
19 #include "jscript.h"
20 #include "activscp.h"
21 #include "objsafe.h"
23 #include "wine/debug.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(jscript);
27 typedef struct {
28 const IActiveScriptVtbl *lpIActiveScriptVtbl;
29 const IActiveScriptParseVtbl *lpIActiveScriptParseVtbl;
30 const IActiveScriptParseProcedure2Vtbl *lpIActiveScriptParseProcedure2Vtbl;
31 const IActiveScriptPropertyVtbl *lpIActiveScriptPropertyVtbl;
32 const IObjectSafetyVtbl *lpIObjectSafetyVtbl;
34 LONG ref;
35 } JScript;
37 #define ACTSCRIPT(x) ((IActiveScript*) &(x)->lpIActiveScriptVtbl)
38 #define ASPARSE(x) ((IActiveScriptParse*) &(x)->lpIActiveScriptParseVtbl)
39 #define ASPARSEPROC(x) ((IActiveScriptParseProcedure2*) &(x)->lpIActiveScriptParseProcedure2Vtbl)
40 #define ACTSCPPROP(x) ((IActiveScriptProperty*) &(x)->lpIActiveScriptPropertyVtbl)
41 #define OBJSAFETY(x) ((IObjectSafety*) &(x)->lpIObjectSafetyVtbl)
43 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
45 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
47 JScript *This = ACTSCRIPT_THIS(iface);
49 *ppv = NULL;
51 if(IsEqualGUID(riid, &IID_IUnknown)) {
52 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
53 *ppv = ACTSCRIPT(This);
54 }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
55 TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
56 *ppv = ACTSCRIPT(This);
57 }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
58 TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
59 *ppv = ASPARSE(This);
60 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure)) {
61 TRACE("(%p)->(IID_IActiveScriptParseProcedure %p)\n", This, ppv);
62 *ppv = ASPARSEPROC(This);
63 }else if(IsEqualGUID(riid, &IID_IActiveScriptParseProcedure2)) {
64 TRACE("(%p)->(IID_IActiveScriptParseProcedure2 %p)\n", This, ppv);
65 *ppv = ASPARSEPROC(This);
66 }else if(IsEqualGUID(riid, &IID_IActiveScriptProperty)) {
67 TRACE("(%p)->(IID_IActiveScriptProperty %p)\n", This, ppv);
68 *ppv = ACTSCPPROP(This);
69 }else if(IsEqualGUID(riid, &IID_IObjectSafety)) {
70 TRACE("(%p)->(IID_IObjectSafety %p)\n", This, ppv);
71 *ppv = OBJSAFETY(This);
74 if(*ppv) {
75 IUnknown_AddRef((IUnknown*)*ppv);
76 return S_OK;
79 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
80 return E_NOINTERFACE;
83 static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
85 JScript *This = ACTSCRIPT_THIS(iface);
86 LONG ref = InterlockedIncrement(&This->ref);
88 TRACE("(%p) ref=%d\n", This, ref);
90 return ref;
93 static ULONG WINAPI JScript_Release(IActiveScript *iface)
95 JScript *This = ACTSCRIPT_THIS(iface);
96 LONG ref = InterlockedDecrement(&This->ref);
98 TRACE("(%p) ref=%d\n", iface, ref);
100 if(!ref)
101 heap_free(This);
103 return ref;
106 static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
107 IActiveScriptSite *pass)
109 JScript *This = ACTSCRIPT_THIS(iface);
110 FIXME("(%p)->(%p)\n", This, pass);
111 return E_NOTIMPL;
114 static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
115 void **ppvObject)
117 JScript *This = ACTSCRIPT_THIS(iface);
118 FIXME("(%p)->()\n", This);
119 return E_NOTIMPL;
122 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
124 JScript *This = ACTSCRIPT_THIS(iface);
125 FIXME("(%p)->(%d)\n", This, ss);
126 return E_NOTIMPL;
129 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
131 JScript *This = ACTSCRIPT_THIS(iface);
132 FIXME("(%p)->(%p)\n", This, pssState);
133 return E_NOTIMPL;
136 static HRESULT WINAPI JScript_Close(IActiveScript *iface)
138 JScript *This = ACTSCRIPT_THIS(iface);
139 FIXME("(%p)->()\n", This);
140 return E_NOTIMPL;
143 static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
144 LPCOLESTR pstrName, DWORD dwFlags)
146 JScript *This = ACTSCRIPT_THIS(iface);
147 FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
148 return E_NOTIMPL;
151 static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
152 DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
154 JScript *This = ACTSCRIPT_THIS(iface);
155 FIXME("(%p)->()\n", This);
156 return E_NOTIMPL;
159 static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
160 IDispatch **ppdisp)
162 JScript *This = ACTSCRIPT_THIS(iface);
163 FIXME("(%p)->()\n", This);
164 return E_NOTIMPL;
167 static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface,
168 SCRIPTTHREADID *pstridThread)
170 JScript *This = ACTSCRIPT_THIS(iface);
171 FIXME("(%p)->()\n", This);
172 return E_NOTIMPL;
175 static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface,
176 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
178 JScript *This = ACTSCRIPT_THIS(iface);
179 FIXME("(%p)->()\n", This);
180 return E_NOTIMPL;
183 static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface,
184 SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
186 JScript *This = ACTSCRIPT_THIS(iface);
187 FIXME("(%p)->()\n", This);
188 return E_NOTIMPL;
191 static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface,
192 SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
194 JScript *This = ACTSCRIPT_THIS(iface);
195 FIXME("(%p)->()\n", This);
196 return E_NOTIMPL;
199 static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
201 JScript *This = ACTSCRIPT_THIS(iface);
202 FIXME("(%p)->()\n", This);
203 return E_NOTIMPL;
206 #undef ACTSCRIPT_THIS
208 static const IActiveScriptVtbl JScriptVtbl = {
209 JScript_QueryInterface,
210 JScript_AddRef,
211 JScript_Release,
212 JScript_SetScriptSite,
213 JScript_GetScriptSite,
214 JScript_SetScriptState,
215 JScript_GetScriptState,
216 JScript_Close,
217 JScript_AddNamedItem,
218 JScript_AddTypeLib,
219 JScript_GetScriptDispatch,
220 JScript_GetCurrentScriptThreadID,
221 JScript_GetScriptThreadID,
222 JScript_GetScriptThreadState,
223 JScript_InterruptScriptThread,
224 JScript_Clone
227 #define ASPARSE_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
229 static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
231 JScript *This = ASPARSE_THIS(iface);
232 return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
235 static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
237 JScript *This = ASPARSE_THIS(iface);
238 return IActiveScript_AddRef(ACTSCRIPT(This));
241 static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
243 JScript *This = ASPARSE_THIS(iface);
244 return IActiveScript_Release(ACTSCRIPT(This));
247 static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
249 JScript *This = ASPARSE_THIS(iface);
250 FIXME("(%p)\n", This);
251 return E_NOTIMPL;
254 static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface,
255 LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName,
256 LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter,
257 DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags,
258 BSTR *pbstrName, EXCEPINFO *pexcepinfo)
260 JScript *This = ASPARSE_THIS(iface);
261 FIXME("(%p)->(%s %s %s %s %s %s %x %u %x %p %p)\n", This, debugstr_w(pstrDefaultName),
262 debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
263 debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), dwSourceContextCookie,
264 ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
265 return E_NOTIMPL;
268 static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface,
269 LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
270 LPCOLESTR pstrDelimiter, DWORD dwSourceContextCookie, ULONG ulStartingLine,
271 DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
273 JScript *This = ASPARSE_THIS(iface);
274 FIXME("(%p)->(%s %s %p %s %x %u %x %p %p)\n", This, debugstr_w(pstrCode),
275 debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
276 dwSourceContextCookie, ulStartingLine, dwFlags, pvarResult, pexcepinfo);
277 return E_NOTIMPL;
280 #undef ASPARSE_THIS
282 static const IActiveScriptParseVtbl JScriptParseVtbl = {
283 JScriptParse_QueryInterface,
284 JScriptParse_AddRef,
285 JScriptParse_Release,
286 JScriptParse_InitNew,
287 JScriptParse_AddScriptlet,
288 JScriptParse_ParseScriptText
291 #define ASPARSEPROC_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
293 static HRESULT WINAPI JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
295 JScript *This = ASPARSEPROC_THIS(iface);
296 return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
299 static ULONG WINAPI JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
301 JScript *This = ASPARSEPROC_THIS(iface);
302 return IActiveScript_AddRef(ACTSCRIPT(This));
305 static ULONG WINAPI JScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
307 JScript *This = ASPARSEPROC_THIS(iface);
308 return IActiveScript_Release(ACTSCRIPT(This));
311 static HRESULT WINAPI JScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2 *iface,
312 LPCOLESTR pstrCode, LPCOLESTR pstrFormalParams, LPCOLESTR pstrProcedureName,
313 LPCOLESTR pstrItemName, IUnknown *punkContext, LPCOLESTR pstrDelimiter,
314 DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags, IDispatch **ppdisp)
316 JScript *This = ASPARSEPROC_THIS(iface);
317 FIXME("(%p)->()\n", This);
318 return E_NOTIMPL;
321 #undef ASPARSEPROC_THIS
323 static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl = {
324 JScriptParseProcedure_QueryInterface,
325 JScriptParseProcedure_AddRef,
326 JScriptParseProcedure_Release,
327 JScriptParseProcedure_ParseProcedureText,
330 #define ACTSCPPROP_THIS(iface) DEFINE_THIS(JScript, IActiveScriptProperty, iface)
332 static HRESULT WINAPI JScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv)
334 JScript *This = ACTSCPPROP_THIS(iface);
335 return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
338 static ULONG WINAPI JScriptProperty_AddRef(IActiveScriptProperty *iface)
340 JScript *This = ACTSCPPROP_THIS(iface);
341 return IActiveScript_AddRef(ACTSCRIPT(This));
344 static ULONG WINAPI JScriptProperty_Release(IActiveScriptProperty *iface)
346 JScript *This = ACTSCPPROP_THIS(iface);
347 return IActiveScript_Release(ACTSCRIPT(This));
350 static HRESULT WINAPI JScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
351 VARIANT *pvarIndex, VARIANT *pvarValue)
353 JScript *This = ACTSCPPROP_THIS(iface);
354 FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
355 return E_NOTIMPL;
358 static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
359 VARIANT *pvarIndex, VARIANT *pvarValue)
361 JScript *This = ACTSCPPROP_THIS(iface);
362 FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
363 return E_NOTIMPL;
366 #undef ACTSCPPROP_THIS
368 static const IActiveScriptPropertyVtbl JScriptPropertyVtbl = {
369 JScriptProperty_QueryInterface,
370 JScriptProperty_AddRef,
371 JScriptProperty_Release,
372 JScriptProperty_GetProperty,
373 JScriptProperty_SetProperty
376 #define OBJSAFETY_THIS(iface) DEFINE_THIS(JScript, IObjectSafety, iface)
378 static HRESULT WINAPI JScriptSafety_QueryInterface(IObjectSafety *iface, REFIID riid, void **ppv)
380 JScript *This = OBJSAFETY_THIS(iface);
381 return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
384 static ULONG WINAPI JScriptSafety_AddRef(IObjectSafety *iface)
386 JScript *This = OBJSAFETY_THIS(iface);
387 return IActiveScript_AddRef(ACTSCRIPT(This));
390 static ULONG WINAPI JScriptSafety_Release(IObjectSafety *iface)
392 JScript *This = OBJSAFETY_THIS(iface);
393 return IActiveScript_Release(ACTSCRIPT(This));
396 static HRESULT WINAPI JScriptSafety_GetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid,
397 DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
399 JScript *This = OBJSAFETY_THIS(iface);
400 FIXME("(%p)->(%s %p %p)\n", This, debugstr_guid(riid), pdwSupportedOptions, pdwEnabledOptions);
401 return E_NOTIMPL;
404 static HRESULT WINAPI JScriptSafety_SetInterfaceSafetyOptions(IObjectSafety *iface, REFIID riid,
405 DWORD dwOptionSetMask, DWORD dwEnabledOptions)
407 JScript *This = OBJSAFETY_THIS(iface);
408 FIXME("(%p)->(%s %x %x)\n", This, debugstr_guid(riid), dwOptionSetMask, dwEnabledOptions);
409 return S_OK;
412 #undef OBJSAFETY_THIS
414 static const IObjectSafetyVtbl JScriptSafetyVtbl = {
415 JScriptSafety_QueryInterface,
416 JScriptSafety_AddRef,
417 JScriptSafety_Release,
418 JScriptSafety_GetInterfaceSafetyOptions,
419 JScriptSafety_SetInterfaceSafetyOptions
422 HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter,
423 REFIID riid, void **ppv)
425 JScript *ret;
426 HRESULT hres;
428 TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
430 ret = heap_alloc(sizeof(*ret));
432 ret->lpIActiveScriptVtbl = &JScriptVtbl;
433 ret->lpIActiveScriptParseVtbl = &JScriptParseVtbl;
434 ret->lpIActiveScriptParseProcedure2Vtbl = &JScriptParseProcedureVtbl;
435 ret->lpIActiveScriptPropertyVtbl = &JScriptPropertyVtbl;
436 ret->lpIObjectSafetyVtbl = &JScriptSafetyVtbl;
437 ret->ref = 1;
439 hres = IActiveScript_QueryInterface(ACTSCRIPT(ret), riid, ppv);
440 IActiveScript_Release(ACTSCRIPT(ret));
441 return hres;