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
23 #include "wine/debug.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(jscript
);
28 const IActiveScriptVtbl
*lpIActiveScriptVtbl
;
29 const IActiveScriptParseVtbl
*lpIActiveScriptParseVtbl
;
30 const IActiveScriptParseProcedure2Vtbl
*lpIActiveScriptParseProcedure2Vtbl
;
31 const IActiveScriptPropertyVtbl
*lpIActiveScriptPropertyVtbl
;
32 const IObjectSafetyVtbl
*lpIObjectSafetyVtbl
;
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
);
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
);
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
);
75 IUnknown_AddRef((IUnknown
*)*ppv
);
79 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
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
);
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
);
106 static HRESULT WINAPI
JScript_SetScriptSite(IActiveScript
*iface
,
107 IActiveScriptSite
*pass
)
109 JScript
*This
= ACTSCRIPT_THIS(iface
);
110 FIXME("(%p)->(%p)\n", This
, pass
);
114 static HRESULT WINAPI
JScript_GetScriptSite(IActiveScript
*iface
, REFIID riid
,
117 JScript
*This
= ACTSCRIPT_THIS(iface
);
118 FIXME("(%p)->()\n", This
);
122 static HRESULT WINAPI
JScript_SetScriptState(IActiveScript
*iface
, SCRIPTSTATE ss
)
124 JScript
*This
= ACTSCRIPT_THIS(iface
);
125 FIXME("(%p)->(%d)\n", This
, ss
);
129 static HRESULT WINAPI
JScript_GetScriptState(IActiveScript
*iface
, SCRIPTSTATE
*pssState
)
131 JScript
*This
= ACTSCRIPT_THIS(iface
);
132 FIXME("(%p)->(%p)\n", This
, pssState
);
136 static HRESULT WINAPI
JScript_Close(IActiveScript
*iface
)
138 JScript
*This
= ACTSCRIPT_THIS(iface
);
139 FIXME("(%p)->()\n", This
);
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
);
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
);
159 static HRESULT WINAPI
JScript_GetScriptDispatch(IActiveScript
*iface
, LPCOLESTR pstrItemName
,
162 JScript
*This
= ACTSCRIPT_THIS(iface
);
163 FIXME("(%p)->()\n", This
);
167 static HRESULT WINAPI
JScript_GetCurrentScriptThreadID(IActiveScript
*iface
,
168 SCRIPTTHREADID
*pstridThread
)
170 JScript
*This
= ACTSCRIPT_THIS(iface
);
171 FIXME("(%p)->()\n", This
);
175 static HRESULT WINAPI
JScript_GetScriptThreadID(IActiveScript
*iface
,
176 DWORD dwWin32ThreadId
, SCRIPTTHREADID
*pstidThread
)
178 JScript
*This
= ACTSCRIPT_THIS(iface
);
179 FIXME("(%p)->()\n", This
);
183 static HRESULT WINAPI
JScript_GetScriptThreadState(IActiveScript
*iface
,
184 SCRIPTTHREADID stidThread
, SCRIPTTHREADSTATE
*pstsState
)
186 JScript
*This
= ACTSCRIPT_THIS(iface
);
187 FIXME("(%p)->()\n", This
);
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
);
199 static HRESULT WINAPI
JScript_Clone(IActiveScript
*iface
, IActiveScript
**ppscript
)
201 JScript
*This
= ACTSCRIPT_THIS(iface
);
202 FIXME("(%p)->()\n", This
);
206 #undef ACTSCRIPT_THIS
208 static const IActiveScriptVtbl JScriptVtbl
= {
209 JScript_QueryInterface
,
212 JScript_SetScriptSite
,
213 JScript_GetScriptSite
,
214 JScript_SetScriptState
,
215 JScript_GetScriptState
,
217 JScript_AddNamedItem
,
219 JScript_GetScriptDispatch
,
220 JScript_GetCurrentScriptThreadID
,
221 JScript_GetScriptThreadID
,
222 JScript_GetScriptThreadState
,
223 JScript_InterruptScriptThread
,
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
);
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
);
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
);
282 static const IActiveScriptParseVtbl JScriptParseVtbl
= {
283 JScriptParse_QueryInterface
,
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
);
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
);
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
);
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
);
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
);
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
)
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
;
439 hres
= IActiveScript_QueryInterface(ACTSCRIPT(ret
), riid
, ppv
);
440 IActiveScript_Release(ACTSCRIPT(ret
));