jscript: Added IActiveScriptParseProcedure2 stub implementation.
[wine] / dlls / jscript / jscript.c
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 "jscript.h"
20 #include "activscp.h"
21
22 #include "wine/debug.h"
23
24 WINE_DEFAULT_DEBUG_CHANNEL(jscript);
25
26 typedef struct {
27     const IActiveScriptVtbl                 *lpIActiveScriptVtbl;
28     const IActiveScriptParseVtbl            *lpIActiveScriptParseVtbl;
29     const IActiveScriptParseProcedure2Vtbl  *lpIActiveScriptParseProcedure2Vtbl;
30     const IActiveScriptPropertyVtbl         *lpIActiveScriptPropertyVtbl;
31
32     LONG ref;
33 } JScript;
34
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)
39
40 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
41
42 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
43 {
44     JScript *This = ACTSCRIPT_THIS(iface);
45
46     *ppv = NULL;
47
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);
56         *ppv = ASPARSE(This);
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);
66     }
67
68     if(*ppv) {
69         IUnknown_AddRef((IUnknown*)*ppv);
70         return S_OK;
71     }
72
73     FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
74     return E_NOINTERFACE;
75 }
76
77 static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
78 {
79     JScript *This = ACTSCRIPT_THIS(iface);
80     LONG ref = InterlockedIncrement(&This->ref);
81
82     TRACE("(%p) ref=%d\n", This, ref);
83
84     return ref;
85 }
86
87 static ULONG WINAPI JScript_Release(IActiveScript *iface)
88 {
89     JScript *This = ACTSCRIPT_THIS(iface);
90     LONG ref = InterlockedDecrement(&This->ref);
91
92     TRACE("(%p) ref=%d\n", iface, ref);
93
94     if(!ref)
95         heap_free(This);
96
97     return ref;
98 }
99
100 static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
101                                             IActiveScriptSite *pass)
102 {
103     JScript *This = ACTSCRIPT_THIS(iface);
104     FIXME("(%p)->(%p)\n", This, pass);
105     return E_NOTIMPL;
106 }
107
108 static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
109                                             void **ppvObject)
110 {
111     JScript *This = ACTSCRIPT_THIS(iface);
112     FIXME("(%p)->()\n", This);
113     return E_NOTIMPL;
114 }
115
116 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
117 {
118     JScript *This = ACTSCRIPT_THIS(iface);
119     FIXME("(%p)->(%d)\n", This, ss);
120     return E_NOTIMPL;
121 }
122
123 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
124 {
125     JScript *This = ACTSCRIPT_THIS(iface);
126     FIXME("(%p)->(%p)\n", This, pssState);
127     return E_NOTIMPL;
128 }
129
130 static HRESULT WINAPI JScript_Close(IActiveScript *iface)
131 {
132     JScript *This = ACTSCRIPT_THIS(iface);
133     FIXME("(%p)->()\n", This);
134     return E_NOTIMPL;
135 }
136
137 static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
138                                            LPCOLESTR pstrName, DWORD dwFlags)
139 {
140     JScript *This = ACTSCRIPT_THIS(iface);
141     FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
142     return E_NOTIMPL;
143 }
144
145 static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
146                                          DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
147 {
148     JScript *This = ACTSCRIPT_THIS(iface);
149     FIXME("(%p)->()\n", This);
150     return E_NOTIMPL;
151 }
152
153 static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
154                                                 IDispatch **ppdisp)
155 {
156     JScript *This = ACTSCRIPT_THIS(iface);
157     FIXME("(%p)->()\n", This);
158     return E_NOTIMPL;
159 }
160
161 static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface,
162                                                        SCRIPTTHREADID *pstridThread)
163 {
164     JScript *This = ACTSCRIPT_THIS(iface);
165     FIXME("(%p)->()\n", This);
166     return E_NOTIMPL;
167 }
168
169 static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface,
170                                                 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
171 {
172     JScript *This = ACTSCRIPT_THIS(iface);
173     FIXME("(%p)->()\n", This);
174     return E_NOTIMPL;
175 }
176
177 static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface,
178         SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
179 {
180     JScript *This = ACTSCRIPT_THIS(iface);
181     FIXME("(%p)->()\n", This);
182     return E_NOTIMPL;
183 }
184
185 static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface,
186         SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
187 {
188     JScript *This = ACTSCRIPT_THIS(iface);
189     FIXME("(%p)->()\n", This);
190     return E_NOTIMPL;
191 }
192
193 static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
194 {
195     JScript *This = ACTSCRIPT_THIS(iface);
196     FIXME("(%p)->()\n", This);
197     return E_NOTIMPL;
198 }
199
200 #undef ACTSCRIPT_THIS
201
202 static const IActiveScriptVtbl JScriptVtbl = {
203     JScript_QueryInterface,
204     JScript_AddRef,
205     JScript_Release,
206     JScript_SetScriptSite,
207     JScript_GetScriptSite,
208     JScript_SetScriptState,
209     JScript_GetScriptState,
210     JScript_Close,
211     JScript_AddNamedItem,
212     JScript_AddTypeLib,
213     JScript_GetScriptDispatch,
214     JScript_GetCurrentScriptThreadID,
215     JScript_GetScriptThreadID,
216     JScript_GetScriptThreadState,
217     JScript_InterruptScriptThread,
218     JScript_Clone
219 };
220
221 #define ASPARSE_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
222
223 static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
224 {
225     JScript *This = ASPARSE_THIS(iface);
226     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
227 }
228
229 static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
230 {
231     JScript *This = ASPARSE_THIS(iface);
232     return IActiveScript_AddRef(ACTSCRIPT(This));
233 }
234
235 static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
236 {
237     JScript *This = ASPARSE_THIS(iface);
238     return IActiveScript_Release(ACTSCRIPT(This));
239 }
240
241 static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
242 {
243     JScript *This = ASPARSE_THIS(iface);
244     FIXME("(%p)\n", This);
245     return E_NOTIMPL;
246 }
247
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)
253 {
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);
259     return E_NOTIMPL;
260 }
261
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)
266 {
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);
271     return E_NOTIMPL;
272 }
273
274 #undef ASPARSE_THIS
275
276 static const IActiveScriptParseVtbl JScriptParseVtbl = {
277     JScriptParse_QueryInterface,
278     JScriptParse_AddRef,
279     JScriptParse_Release,
280     JScriptParse_InitNew,
281     JScriptParse_AddScriptlet,
282     JScriptParse_ParseScriptText
283 };
284
285 #define ASPARSEPROC_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
286
287 static HRESULT WINAPI JScriptParseProcedure_QueryInterface(IActiveScriptParseProcedure2 *iface, REFIID riid, void **ppv)
288 {
289     JScript *This = ASPARSEPROC_THIS(iface);
290     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
291 }
292
293 static ULONG WINAPI JScriptParseProcedure_AddRef(IActiveScriptParseProcedure2 *iface)
294 {
295     JScript *This = ASPARSEPROC_THIS(iface);
296     return IActiveScript_AddRef(ACTSCRIPT(This));
297 }
298
299 static ULONG WINAPI JScriptParseProcedure_Release(IActiveScriptParseProcedure2 *iface)
300 {
301     JScript *This = ASPARSEPROC_THIS(iface);
302     return IActiveScript_Release(ACTSCRIPT(This));
303 }
304
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)
309 {
310     JScript *This = ASPARSEPROC_THIS(iface);
311     FIXME("(%p)->()\n", This);
312     return E_NOTIMPL;
313 }
314
315 #undef ASPARSEPROC_THIS
316
317 static const IActiveScriptParseProcedure2Vtbl JScriptParseProcedureVtbl = {
318     JScriptParseProcedure_QueryInterface,
319     JScriptParseProcedure_AddRef,
320     JScriptParseProcedure_Release,
321     JScriptParseProcedure_ParseProcedureText,
322 };
323
324 #define ACTSCPPROP_THIS(iface) DEFINE_THIS(JScript, IActiveScriptProperty, iface)
325
326 static HRESULT WINAPI JScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv)
327 {
328     JScript *This = ACTSCPPROP_THIS(iface);
329     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
330 }
331
332 static ULONG WINAPI JScriptProperty_AddRef(IActiveScriptProperty *iface)
333 {
334     JScript *This = ACTSCPPROP_THIS(iface);
335     return IActiveScript_AddRef(ACTSCRIPT(This));
336 }
337
338 static ULONG WINAPI JScriptProperty_Release(IActiveScriptProperty *iface)
339 {
340     JScript *This = ACTSCPPROP_THIS(iface);
341     return IActiveScript_Release(ACTSCRIPT(This));
342 }
343
344 static HRESULT WINAPI JScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
345         VARIANT *pvarIndex, VARIANT *pvarValue)
346 {
347     JScript *This = ACTSCPPROP_THIS(iface);
348     FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
349     return E_NOTIMPL;
350 }
351
352 static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
353         VARIANT *pvarIndex, VARIANT *pvarValue)
354 {
355     JScript *This = ACTSCPPROP_THIS(iface);
356     FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
357     return E_NOTIMPL;
358 }
359
360 #undef ACTSCPPROP_THIS
361
362 static const IActiveScriptPropertyVtbl JScriptPropertyVtbl = {
363     JScriptProperty_QueryInterface,
364     JScriptProperty_AddRef,
365     JScriptProperty_Release,
366     JScriptProperty_GetProperty,
367     JScriptProperty_SetProperty
368 };
369
370 HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter,
371                                              REFIID riid, void **ppv)
372 {
373     JScript *ret;
374     HRESULT hres;
375
376     TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
377
378     ret = heap_alloc(sizeof(*ret));
379
380     ret->lpIActiveScriptVtbl                 = &JScriptVtbl;
381     ret->lpIActiveScriptParseVtbl            = &JScriptParseVtbl;
382     ret->lpIActiveScriptParseProcedure2Vtbl  = &JScriptParseProcedureVtbl;
383     ret->lpIActiveScriptPropertyVtbl         = &JScriptPropertyVtbl;
384     ret->ref = 1;
385
386     hres = IActiveScript_QueryInterface(ACTSCRIPT(ret), riid, ppv);
387     IActiveScript_Release(ACTSCRIPT(ret));
388     return hres;
389 }