jscript: Added IActiveScriptParse 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
30     LONG ref;
31 } JScript;
32
33 #define ACTSCRIPT(x)  ((IActiveScript*)          &(x)->lpIActiveScriptVtbl)
34 #define ASPARSE(x)    ((IActiveScriptParse*)     &(x)->lpIActiveScriptParseVtbl)
35
36 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
37
38 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
39 {
40     JScript *This = ACTSCRIPT_THIS(iface);
41
42     *ppv = NULL;
43
44     if(IsEqualGUID(riid, &IID_IUnknown)) {
45         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
46         *ppv = ACTSCRIPT(This);
47     }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
48         TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
49         *ppv = ACTSCRIPT(This);
50     }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
51         TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
52         *ppv = ASPARSE(This);
53     }
54
55     if(*ppv) {
56         IUnknown_AddRef((IUnknown*)*ppv);
57         return S_OK;
58     }
59
60     FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
61     return E_NOINTERFACE;
62 }
63
64 static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
65 {
66     JScript *This = ACTSCRIPT_THIS(iface);
67     LONG ref = InterlockedIncrement(&This->ref);
68
69     TRACE("(%p) ref=%d\n", This, ref);
70
71     return ref;
72 }
73
74 static ULONG WINAPI JScript_Release(IActiveScript *iface)
75 {
76     JScript *This = ACTSCRIPT_THIS(iface);
77     LONG ref = InterlockedDecrement(&This->ref);
78
79     TRACE("(%p) ref=%d\n", iface, ref);
80
81     if(!ref)
82         heap_free(This);
83
84     return ref;
85 }
86
87 static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
88                                             IActiveScriptSite *pass)
89 {
90     JScript *This = ACTSCRIPT_THIS(iface);
91     FIXME("(%p)->(%p)\n", This, pass);
92     return E_NOTIMPL;
93 }
94
95 static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
96                                             void **ppvObject)
97 {
98     JScript *This = ACTSCRIPT_THIS(iface);
99     FIXME("(%p)->()\n", This);
100     return E_NOTIMPL;
101 }
102
103 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
104 {
105     JScript *This = ACTSCRIPT_THIS(iface);
106     FIXME("(%p)->(%d)\n", This, ss);
107     return E_NOTIMPL;
108 }
109
110 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
111 {
112     JScript *This = ACTSCRIPT_THIS(iface);
113     FIXME("(%p)->(%p)\n", This, pssState);
114     return E_NOTIMPL;
115 }
116
117 static HRESULT WINAPI JScript_Close(IActiveScript *iface)
118 {
119     JScript *This = ACTSCRIPT_THIS(iface);
120     FIXME("(%p)->()\n", This);
121     return E_NOTIMPL;
122 }
123
124 static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
125                                            LPCOLESTR pstrName, DWORD dwFlags)
126 {
127     JScript *This = ACTSCRIPT_THIS(iface);
128     FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
129     return E_NOTIMPL;
130 }
131
132 static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
133                                          DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
134 {
135     JScript *This = ACTSCRIPT_THIS(iface);
136     FIXME("(%p)->()\n", This);
137     return E_NOTIMPL;
138 }
139
140 static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
141                                                 IDispatch **ppdisp)
142 {
143     JScript *This = ACTSCRIPT_THIS(iface);
144     FIXME("(%p)->()\n", This);
145     return E_NOTIMPL;
146 }
147
148 static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface,
149                                                        SCRIPTTHREADID *pstridThread)
150 {
151     JScript *This = ACTSCRIPT_THIS(iface);
152     FIXME("(%p)->()\n", This);
153     return E_NOTIMPL;
154 }
155
156 static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface,
157                                                 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
158 {
159     JScript *This = ACTSCRIPT_THIS(iface);
160     FIXME("(%p)->()\n", This);
161     return E_NOTIMPL;
162 }
163
164 static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface,
165         SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
166 {
167     JScript *This = ACTSCRIPT_THIS(iface);
168     FIXME("(%p)->()\n", This);
169     return E_NOTIMPL;
170 }
171
172 static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface,
173         SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
174 {
175     JScript *This = ACTSCRIPT_THIS(iface);
176     FIXME("(%p)->()\n", This);
177     return E_NOTIMPL;
178 }
179
180 static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
181 {
182     JScript *This = ACTSCRIPT_THIS(iface);
183     FIXME("(%p)->()\n", This);
184     return E_NOTIMPL;
185 }
186
187 #undef ACTSCRIPT_THIS
188
189 static const IActiveScriptVtbl JScriptVtbl = {
190     JScript_QueryInterface,
191     JScript_AddRef,
192     JScript_Release,
193     JScript_SetScriptSite,
194     JScript_GetScriptSite,
195     JScript_SetScriptState,
196     JScript_GetScriptState,
197     JScript_Close,
198     JScript_AddNamedItem,
199     JScript_AddTypeLib,
200     JScript_GetScriptDispatch,
201     JScript_GetCurrentScriptThreadID,
202     JScript_GetScriptThreadID,
203     JScript_GetScriptThreadState,
204     JScript_InterruptScriptThread,
205     JScript_Clone
206 };
207
208 #define ASPARSE_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
209
210 static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
211 {
212     JScript *This = ASPARSE_THIS(iface);
213     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
214 }
215
216 static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
217 {
218     JScript *This = ASPARSE_THIS(iface);
219     return IActiveScript_AddRef(ACTSCRIPT(This));
220 }
221
222 static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
223 {
224     JScript *This = ASPARSE_THIS(iface);
225     return IActiveScript_Release(ACTSCRIPT(This));
226 }
227
228 static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
229 {
230     JScript *This = ASPARSE_THIS(iface);
231     FIXME("(%p)\n", This);
232     return E_NOTIMPL;
233 }
234
235 static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface,
236         LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName,
237         LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter,
238         DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags,
239         BSTR *pbstrName, EXCEPINFO *pexcepinfo)
240 {
241     JScript *This = ASPARSE_THIS(iface);
242     FIXME("(%p)->(%s %s %s %s %s %s %x %u %x %p %p)\n", This, debugstr_w(pstrDefaultName),
243           debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
244           debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), dwSourceContextCookie,
245           ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
246     return E_NOTIMPL;
247 }
248
249 static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface,
250         LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
251         LPCOLESTR pstrDelimiter, DWORD dwSourceContextCookie, ULONG ulStartingLine,
252         DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
253 {
254     JScript *This = ASPARSE_THIS(iface);
255     FIXME("(%p)->(%s %s %p %s %x %u %x %p %p)\n", This, debugstr_w(pstrCode),
256           debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
257           dwSourceContextCookie, ulStartingLine, dwFlags, pvarResult, pexcepinfo);
258     return E_NOTIMPL;
259 }
260
261 #undef ASPARSE_THIS
262
263 static const IActiveScriptParseVtbl JScriptParseVtbl = {
264     JScriptParse_QueryInterface,
265     JScriptParse_AddRef,
266     JScriptParse_Release,
267     JScriptParse_InitNew,
268     JScriptParse_AddScriptlet,
269     JScriptParse_ParseScriptText
270 };
271
272 HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter,
273                                              REFIID riid, void **ppv)
274 {
275     JScript *ret;
276     HRESULT hres;
277
278     TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
279
280     ret = heap_alloc(sizeof(*ret));
281
282     ret->lpIActiveScriptVtbl          = &JScriptVtbl;
283     ret->lpIActiveScriptParseVtbl     = &JScriptParseVtbl;
284     ret->ref = 1;
285
286     hres = IActiveScript_QueryInterface(ACTSCRIPT(ret), riid, ppv);
287     IActiveScript_Release(ACTSCRIPT(ret));
288     return hres;
289 }