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
22 #include "wine/debug.h"
24 WINE_DEFAULT_DEBUG_CHANNEL(jscript
);
27 const IActiveScriptVtbl
*lpIActiveScriptVtbl
;
28 const IActiveScriptParseVtbl
*lpIActiveScriptParseVtbl
;
29 const IActiveScriptParseProcedure2Vtbl
*lpIActiveScriptParseProcedure2Vtbl
;
30 const IActiveScriptPropertyVtbl
*lpIActiveScriptPropertyVtbl
;
35 #define ACTSCRIPT(x) ((IActiveScript*) &(x)->lpIActiveScriptVtbl)
36 #define ASPARSE(x) ((IActiveScriptParse*) &(x)->lpIActiveScriptParseVtbl)
37 #define ASPARSEPROC(x) ((IActiveScriptParseProcedure2*) &(x)->lpIActiveScriptParseProcedure2Vtbl)
38 #define ACTSCPPROP(x) ((IActiveScriptProperty*) &(x)->lpIActiveScriptPropertyVtbl)
40 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
42 static HRESULT WINAPI
JScript_QueryInterface(IActiveScript
*iface
, REFIID riid
, void **ppv
)
44 JScript
*This
= ACTSCRIPT_THIS(iface
);
48 if(IsEqualGUID(riid
, &IID_IUnknown
)) {
49 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
50 *ppv
= ACTSCRIPT(This
);
51 }else if(IsEqualGUID(riid
, &IID_IActiveScript
)) {
52 TRACE("(%p)->(IID_IActiveScript %p)\n", This
, ppv
);
53 *ppv
= ACTSCRIPT(This
);
54 }else if(IsEqualGUID(riid
, &IID_IActiveScriptParse
)) {
55 TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This
, ppv
);
57 }else if(IsEqualGUID(riid
, &IID_IActiveScriptParseProcedure
)) {
58 TRACE("(%p)->(IID_IActiveScriptParseProcedure %p)\n", This
, ppv
);
59 *ppv
= ASPARSEPROC(This
);
60 }else if(IsEqualGUID(riid
, &IID_IActiveScriptParseProcedure2
)) {
61 TRACE("(%p)->(IID_IActiveScriptParseProcedure2 %p)\n", This
, ppv
);
62 *ppv
= ASPARSEPROC(This
);
63 }else if(IsEqualGUID(riid
, &IID_IActiveScriptProperty
)) {
64 TRACE("(%p)->(IID_IActiveScriptProperty %p)\n", This
, ppv
);
65 *ppv
= ACTSCPPROP(This
);
69 IUnknown_AddRef((IUnknown
*)*ppv
);
73 FIXME("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
77 static ULONG WINAPI
JScript_AddRef(IActiveScript
*iface
)
79 JScript
*This
= ACTSCRIPT_THIS(iface
);
80 LONG ref
= InterlockedIncrement(&This
->ref
);
82 TRACE("(%p) ref=%d\n", This
, ref
);
87 static ULONG WINAPI
JScript_Release(IActiveScript
*iface
)
89 JScript
*This
= ACTSCRIPT_THIS(iface
);
90 LONG ref
= InterlockedDecrement(&This
->ref
);
92 TRACE("(%p) ref=%d\n", iface
, ref
);
100 static HRESULT WINAPI
JScript_SetScriptSite(IActiveScript
*iface
,
101 IActiveScriptSite
*pass
)
103 JScript
*This
= ACTSCRIPT_THIS(iface
);
104 FIXME("(%p)->(%p)\n", This
, pass
);
108 static HRESULT WINAPI
JScript_GetScriptSite(IActiveScript
*iface
, REFIID riid
,
111 JScript
*This
= ACTSCRIPT_THIS(iface
);
112 FIXME("(%p)->()\n", This
);
116 static HRESULT WINAPI
JScript_SetScriptState(IActiveScript
*iface
, SCRIPTSTATE ss
)
118 JScript
*This
= ACTSCRIPT_THIS(iface
);
119 FIXME("(%p)->(%d)\n", This
, ss
);
123 static HRESULT WINAPI
JScript_GetScriptState(IActiveScript
*iface
, SCRIPTSTATE
*pssState
)
125 JScript
*This
= ACTSCRIPT_THIS(iface
);
126 FIXME("(%p)->(%p)\n", This
, pssState
);
130 static HRESULT WINAPI
JScript_Close(IActiveScript
*iface
)
132 JScript
*This
= ACTSCRIPT_THIS(iface
);
133 FIXME("(%p)->()\n", This
);
137 static HRESULT WINAPI
JScript_AddNamedItem(IActiveScript
*iface
,
138 LPCOLESTR pstrName
, DWORD dwFlags
)
140 JScript
*This
= ACTSCRIPT_THIS(iface
);
141 FIXME("(%p)->(%s %x)\n", This
, debugstr_w(pstrName
), dwFlags
);
145 static HRESULT WINAPI
JScript_AddTypeLib(IActiveScript
*iface
, REFGUID rguidTypeLib
,
146 DWORD dwMajor
, DWORD dwMinor
, DWORD dwFlags
)
148 JScript
*This
= ACTSCRIPT_THIS(iface
);
149 FIXME("(%p)->()\n", This
);
153 static HRESULT WINAPI
JScript_GetScriptDispatch(IActiveScript
*iface
, LPCOLESTR pstrItemName
,
156 JScript
*This
= ACTSCRIPT_THIS(iface
);
157 FIXME("(%p)->()\n", This
);
161 static HRESULT WINAPI
JScript_GetCurrentScriptThreadID(IActiveScript
*iface
,
162 SCRIPTTHREADID
*pstridThread
)
164 JScript
*This
= ACTSCRIPT_THIS(iface
);
165 FIXME("(%p)->()\n", This
);
169 static HRESULT WINAPI
JScript_GetScriptThreadID(IActiveScript
*iface
,
170 DWORD dwWin32ThreadId
, SCRIPTTHREADID
*pstidThread
)
172 JScript
*This
= ACTSCRIPT_THIS(iface
);
173 FIXME("(%p)->()\n", This
);
177 static HRESULT WINAPI
JScript_GetScriptThreadState(IActiveScript
*iface
,
178 SCRIPTTHREADID stidThread
, SCRIPTTHREADSTATE
*pstsState
)
180 JScript
*This
= ACTSCRIPT_THIS(iface
);
181 FIXME("(%p)->()\n", This
);
185 static HRESULT WINAPI
JScript_InterruptScriptThread(IActiveScript
*iface
,
186 SCRIPTTHREADID stidThread
, const EXCEPINFO
*pexcepinfo
, DWORD dwFlags
)
188 JScript
*This
= ACTSCRIPT_THIS(iface
);
189 FIXME("(%p)->()\n", This
);
193 static HRESULT WINAPI
JScript_Clone(IActiveScript
*iface
, IActiveScript
**ppscript
)
195 JScript
*This
= ACTSCRIPT_THIS(iface
);
196 FIXME("(%p)->()\n", This
);
200 #undef ACTSCRIPT_THIS
202 static const IActiveScriptVtbl JScriptVtbl
= {
203 JScript_QueryInterface
,
206 JScript_SetScriptSite
,
207 JScript_GetScriptSite
,
208 JScript_SetScriptState
,
209 JScript_GetScriptState
,
211 JScript_AddNamedItem
,
213 JScript_GetScriptDispatch
,
214 JScript_GetCurrentScriptThreadID
,
215 JScript_GetScriptThreadID
,
216 JScript_GetScriptThreadState
,
217 JScript_InterruptScriptThread
,
221 #define ASPARSE_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
223 static HRESULT WINAPI
JScriptParse_QueryInterface(IActiveScriptParse
*iface
, REFIID riid
, void **ppv
)
225 JScript
*This
= ASPARSE_THIS(iface
);
226 return IActiveScript_QueryInterface(ACTSCRIPT(This
), riid
, ppv
);
229 static ULONG WINAPI
JScriptParse_AddRef(IActiveScriptParse
*iface
)
231 JScript
*This
= ASPARSE_THIS(iface
);
232 return IActiveScript_AddRef(ACTSCRIPT(This
));
235 static ULONG WINAPI
JScriptParse_Release(IActiveScriptParse
*iface
)
237 JScript
*This
= ASPARSE_THIS(iface
);
238 return IActiveScript_Release(ACTSCRIPT(This
));
241 static HRESULT WINAPI
JScriptParse_InitNew(IActiveScriptParse
*iface
)
243 JScript
*This
= ASPARSE_THIS(iface
);
244 FIXME("(%p)\n", This
);
248 static HRESULT WINAPI
JScriptParse_AddScriptlet(IActiveScriptParse
*iface
,
249 LPCOLESTR pstrDefaultName
, LPCOLESTR pstrCode
, LPCOLESTR pstrItemName
,
250 LPCOLESTR pstrSubItemName
, LPCOLESTR pstrEventName
, LPCOLESTR pstrDelimiter
,
251 DWORD dwSourceContextCookie
, ULONG ulStartingLineNumber
, DWORD dwFlags
,
252 BSTR
*pbstrName
, EXCEPINFO
*pexcepinfo
)
254 JScript
*This
= ASPARSE_THIS(iface
);
255 FIXME("(%p)->(%s %s %s %s %s %s %x %u %x %p %p)\n", This
, debugstr_w(pstrDefaultName
),
256 debugstr_w(pstrCode
), debugstr_w(pstrItemName
), debugstr_w(pstrSubItemName
),
257 debugstr_w(pstrEventName
), debugstr_w(pstrDelimiter
), dwSourceContextCookie
,
258 ulStartingLineNumber
, dwFlags
, pbstrName
, pexcepinfo
);
262 static HRESULT WINAPI
JScriptParse_ParseScriptText(IActiveScriptParse
*iface
,
263 LPCOLESTR pstrCode
, LPCOLESTR pstrItemName
, IUnknown
*punkContext
,
264 LPCOLESTR pstrDelimiter
, DWORD dwSourceContextCookie
, ULONG ulStartingLine
,
265 DWORD dwFlags
, VARIANT
*pvarResult
, EXCEPINFO
*pexcepinfo
)
267 JScript
*This
= ASPARSE_THIS(iface
);
268 FIXME("(%p)->(%s %s %p %s %x %u %x %p %p)\n", This
, debugstr_w(pstrCode
),
269 debugstr_w(pstrItemName
), punkContext
, debugstr_w(pstrDelimiter
),
270 dwSourceContextCookie
, ulStartingLine
, dwFlags
, pvarResult
, pexcepinfo
);
276 static const IActiveScriptParseVtbl JScriptParseVtbl
= {
277 JScriptParse_QueryInterface
,
279 JScriptParse_Release
,
280 JScriptParse_InitNew
,
281 JScriptParse_AddScriptlet
,
282 JScriptParse_ParseScriptText
285 #define ASPARSEPROC_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
287 static HRESULT WINAPI
JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2
*iface
, REFIID riid
, void **ppv
)
289 JScript
*This
= ASPARSEPROC_THIS(iface
);
290 return IActiveScript_QueryInterface(ACTSCRIPT(This
), riid
, ppv
);
293 static ULONG WINAPI
JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2
*iface
)
295 JScript
*This
= ASPARSEPROC_THIS(iface
);
296 return IActiveScript_AddRef(ACTSCRIPT(This
));
299 static ULONG WINAPI
JScriptParseProcedure_Release(IActiveScriptParseProcedure2
*iface
)
301 JScript
*This
= ASPARSEPROC_THIS(iface
);
302 return IActiveScript_Release(ACTSCRIPT(This
));
305 static HRESULT WINAPI
JScriptParseProcedure_ParseProcedureText(IActiveScriptParseProcedure2
*iface
,
306 LPCOLESTR pstrCode
, LPCOLESTR pstrFormalParams
, LPCOLESTR pstrProcedureName
,
307 LPCOLESTR pstrItemName
, IUnknown
*punkContext
, LPCOLESTR pstrDelimiter
,
308 DWORD dwSourceContextCookie
, ULONG ulStartingLineNumber
, DWORD dwFlags
, IDispatch
**ppdisp
)
310 JScript
*This
= ASPARSEPROC_THIS(iface
);
311 FIXME("(%p)->()\n", This
);
315 #undef ASPARSEPROC_THIS
317 static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl
= {
318 JScriptParseProcedure_QueryInterface
,
319 JScriptParseProcedure_AddRef
,
320 JScriptParseProcedure_Release
,
321 JScriptParseProcedure_ParseProcedureText
,
324 #define ACTSCPPROP_THIS(iface) DEFINE_THIS(JScript, IActiveScriptProperty, iface)
326 static HRESULT WINAPI
JScriptProperty_QueryInterface(IActiveScriptProperty
*iface
, REFIID riid
, void **ppv
)
328 JScript
*This
= ACTSCPPROP_THIS(iface
);
329 return IActiveScript_QueryInterface(ACTSCRIPT(This
), riid
, ppv
);
332 static ULONG WINAPI
JScriptProperty_AddRef(IActiveScriptProperty
*iface
)
334 JScript
*This
= ACTSCPPROP_THIS(iface
);
335 return IActiveScript_AddRef(ACTSCRIPT(This
));
338 static ULONG WINAPI
JScriptProperty_Release(IActiveScriptProperty
*iface
)
340 JScript
*This
= ACTSCPPROP_THIS(iface
);
341 return IActiveScript_Release(ACTSCRIPT(This
));
344 static HRESULT WINAPI
JScriptProperty_GetProperty(IActiveScriptProperty
*iface
, DWORD dwProperty
,
345 VARIANT
*pvarIndex
, VARIANT
*pvarValue
)
347 JScript
*This
= ACTSCPPROP_THIS(iface
);
348 FIXME("(%p)->(%x %p %p)\n", This
, dwProperty
, pvarIndex
, pvarValue
);
352 static HRESULT WINAPI
JScriptProperty_SetProperty(IActiveScriptProperty
*iface
, DWORD dwProperty
,
353 VARIANT
*pvarIndex
, VARIANT
*pvarValue
)
355 JScript
*This
= ACTSCPPROP_THIS(iface
);
356 FIXME("(%p)->(%x %p %p)\n", This
, dwProperty
, pvarIndex
, pvarValue
);
360 #undef ACTSCPPROP_THIS
362 static const IActiveScriptPropertyVtbl JScriptPropertyVtbl
= {
363 JScriptProperty_QueryInterface
,
364 JScriptProperty_AddRef
,
365 JScriptProperty_Release
,
366 JScriptProperty_GetProperty
,
367 JScriptProperty_SetProperty
370 HRESULT WINAPI
JScriptFactory_CreateInstance(IClassFactory
*iface
, IUnknown
*pUnkOuter
,
371 REFIID riid
, void **ppv
)
376 TRACE("(%p %s %p)\n", pUnkOuter
, debugstr_guid(riid
), ppv
);
378 ret
= heap_alloc(sizeof(*ret
));
380 ret
->lpIActiveScriptVtbl
= &JScriptVtbl
;
381 ret
->lpIActiveScriptParseVtbl
= &JScriptParseVtbl
;
382 ret
->lpIActiveScriptParseProcedure2Vtbl
= &JScriptParseProcedureVtbl
;
383 ret
->lpIActiveScriptPropertyVtbl
= &JScriptPropertyVtbl
;
386 hres
= IActiveScript_QueryInterface(ACTSCRIPT(ret
), riid
, ppv
);
387 IActiveScript_Release(ACTSCRIPT(ret
));