ReactOS  0.4.15-dev-1171-gab82533
enumerator.c File Reference
#include <assert.h>
#include "jscript.h"
#include "wine/debug.h"
Include dependency graph for enumerator.c:

Go to the source code of this file.

Classes

struct  EnumeratorInstance
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
static EnumeratorInstanceenumerator_from_jsdisp (jsdisp_t *jsdisp)
 
static EnumeratorInstanceenumerator_from_vdisp (vdisp_t *vdisp)
 
static EnumeratorInstanceenumerator_this (vdisp_t *jsthis)
 
static HRESULT enumvar_get_next_item (EnumeratorInstance *This)
 
static void Enumerator_destructor (jsdisp_t *dispex)
 
static HRESULT Enumerator_atEnd (script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Enumerator_item (script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Enumerator_moveFirst (script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT Enumerator_moveNext (script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT alloc_enumerator (script_ctx_t *ctx, jsdisp_t *object_prototype, EnumeratorInstance **ret)
 
static HRESULT create_enumerator (script_ctx_t *ctx, jsval_t *argv, jsdisp_t **ret)
 
static HRESULT EnumeratorConstr_value (script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
HRESULT create_enumerator_constr (script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
 

Variables

static const WCHAR atEndW [] = {'a','t','E','n','d',0}
 
static const WCHAR itemW [] = {'i','t','e','m',0}
 
static const WCHAR moveFirstW [] = {'m','o','v','e','F','i','r','s','t',0}
 
static const WCHAR moveNextW [] = {'m','o','v','e','N','e','x','t',0}
 
static const builtin_prop_t Enumerator_props []
 
static const builtin_info_t Enumerator_info
 
static const builtin_info_t EnumeratorInst_info
 
static const builtin_info_t EnumeratorConstr_info
 

Function Documentation

◆ alloc_enumerator()

static HRESULT alloc_enumerator ( script_ctx_t ctx,
jsdisp_t object_prototype,
EnumeratorInstance **  ret 
)
static

Definition at line 204 of file enumerator.c.

205 {
206  EnumeratorInstance *enumerator;
207  HRESULT hres;
208 
209  enumerator = heap_alloc_zero(sizeof(EnumeratorInstance));
210  if(!enumerator)
211  return E_OUTOFMEMORY;
212 
213  if(object_prototype)
214  hres = init_dispex(&enumerator->dispex, ctx, &Enumerator_info, object_prototype);
215  else
217  ctx->enumerator_constr);
218 
219  if(FAILED(hres))
220  {
221  heap_free(enumerator);
222  return hres;
223  }
224 
225  *ret = enumerator;
226  return S_OK;
227 }
static const builtin_info_t EnumeratorInst_info
Definition: enumerator.c:195
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
int ret
static const builtin_info_t Enumerator_info
Definition: enumerator.c:186
#define S_OK
Definition: intsafe.h:51
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:919
HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *constr)
Definition: dispex.c:1030
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by create_enumerator(), and create_enumerator_constr().

◆ create_enumerator()

static HRESULT create_enumerator ( script_ctx_t ctx,
jsval_t argv,
jsdisp_t **  ret 
)
static

Definition at line 229 of file enumerator.c.

230 {
231  EnumeratorInstance *enumerator;
232  HRESULT hres;
233  IDispatch *obj;
234  DISPPARAMS dispparams = {NULL, NULL, 0, 0};
236 
237  if (argv)
238  {
239  VARIANT varresult;
240 
241  if (!is_object_instance(*argv))
242  {
243  FIXME("I don't know how to handle this type!\n");
244  return E_NOTIMPL;
245  }
246 
247  obj = get_object(*argv);
248 
249  /* Try to get a IEnumVARIANT by _NewEnum */
250  VariantInit(&varresult);
251  hres = IDispatch_Invoke(obj, DISPID_NEWENUM, &IID_NULL, LOCALE_NEUTRAL,
252  DISPATCH_METHOD, &dispparams, &varresult, NULL, NULL);
253  if (FAILED(hres))
254  {
255  WARN("Enumerator: no DISPID_NEWENUM.\n");
256  return E_INVALIDARG;
257  }
258 
259  if ((V_VT(&varresult) == VT_DISPATCH) || (V_VT(&varresult) == VT_UNKNOWN))
260  {
261  hres = IUnknown_QueryInterface(V_UNKNOWN(&varresult),
262  &IID_IEnumVARIANT, (void**)&enumvar);
263  }
264  else
265  {
266  FIXME("Enumerator: NewEnum unexpected type of varresult (%d).\n", V_VT(&varresult));
267  hres = E_INVALIDARG;
268  }
269  VariantClear(&varresult);
270  if (FAILED(hres))
271  return hres;
272  }
273 
274  hres = alloc_enumerator(ctx, NULL, &enumerator);
275  if (FAILED(hres))
276  {
277  if (enumvar)
278  IEnumVARIANT_Release(enumvar);
279  return hres;
280  }
281 
282  enumerator->enumvar = enumvar;
283  enumerator->atend = !enumvar;
284  hres = enumvar_get_next_item(enumerator);
285  if (FAILED(hres))
286  {
287  jsdisp_release(&enumerator->dispex);
288  return hres;
289  }
290 
291  *ret = &enumerator->dispex;
292  return S_OK;
293 }
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:219
#define WARN(fmt,...)
Definition: debug.h:112
static HRESULT enumvar_get_next_item(EnumeratorInstance *This)
Definition: enumerator.c:56
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568
#define argv
Definition: mplay32.c:18
#define DISPATCH_METHOD
Definition: oleauto.h:1006
GLsizei GLsizei GLuint * obj
Definition: glext.h:6042
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:166
HRESULT hres
Definition: protocol.c:465
static HRESULT alloc_enumerator(script_ctx_t *ctx, jsdisp_t *object_prototype, EnumeratorInstance **ret)
Definition: enumerator.c:204
LONG HRESULT
Definition: typedefs.h:79
int ret
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
#define IID_NULL
Definition: guiddef.h:98
#define V_VT(A)
Definition: oleauto.h:211
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define S_OK
Definition: intsafe.h:51
#define E_NOTIMPL
Definition: ddrawi.h:99
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:268
struct stdole::DISPPARAMS DISPPARAMS
#define LOCALE_NEUTRAL
IEnumVARIANT * enumvar
Definition: enumerator.c:30

Referenced by EnumeratorConstr_value().

◆ create_enumerator_constr()

HRESULT create_enumerator_constr ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsdisp_t **  ret 
)

Definition at line 332 of file enumerator.c.

333 {
334  EnumeratorInstance *enumerator;
335  HRESULT hres;
336  static const WCHAR EnumeratorW[] = {'E','n','u','m','e','r','a','t','o','r',0};
337 
338  hres = alloc_enumerator(ctx, object_prototype, &enumerator);
339  if(FAILED(hres))
340  return hres;
341 
344  PROPF_CONSTR|7, &enumerator->dispex, ret);
345  jsdisp_release(&enumerator->dispex);
346 
347  return hres;
348 }
#define PROPF_CONSTR
Definition: jscript.h:98
HRESULT create_builtin_constructor(script_ctx_t *ctx, builtin_invoke_t value_proc, const WCHAR *name, const builtin_info_t *builtin_info, DWORD flags, jsdisp_t *prototype, jsdisp_t **ret)
Definition: function.c:686
static const WCHAR EnumeratorW[]
Definition: global.c:54
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
static HRESULT alloc_enumerator(script_ctx_t *ctx, jsdisp_t *object_prototype, EnumeratorInstance **ret)
Definition: enumerator.c:204
LONG HRESULT
Definition: typedefs.h:79
int ret
static const builtin_info_t EnumeratorConstr_info
Definition: enumerator.c:323
static HRESULT EnumeratorConstr_value(script_ctx_t *ctx, vdisp_t *vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: enumerator.c:295
static void jsdisp_release(jsdisp_t *jsdisp)
Definition: jscript.h:268

Referenced by init_constructors().

◆ Enumerator_atEnd()

static HRESULT Enumerator_atEnd ( script_ctx_t ctx,
vdisp_t jsthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 100 of file enumerator.c.

102 {
104 
105  if (!(This = enumerator_this(jsthis)))
107 
108  TRACE("%d\n", This->atend);
109 
110  if (r)
111  *r = jsval_bool(This->atend);
112  return S_OK;
113 }
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define JS_E_ENUMERATOR_EXPECTED
Definition: jscript.h:562
#define S_OK
Definition: intsafe.h:51
static EnumeratorInstance * enumerator_this(vdisp_t *jsthis)
Definition: enumerator.c:51
HRESULT throw_type_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:440
static jsval_t jsval_bool(BOOL b)
Definition: jsval.h:101

◆ Enumerator_destructor()

static void Enumerator_destructor ( jsdisp_t dispex)
static

Definition at line 90 of file enumerator.c.

91 {
93 
94  TRACE("\n");
95 
96  jsval_release(This->item);
97  heap_free(dispex);
98 }
void jsval_release(jsval_t val)
Definition: jsutils.c:191
static EnumeratorInstance * enumerator_from_jsdisp(jsdisp_t *jsdisp)
Definition: enumerator.c:41
#define TRACE(s)
Definition: solgame.cpp:4
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

◆ enumerator_from_jsdisp()

static EnumeratorInstance* enumerator_from_jsdisp ( jsdisp_t jsdisp)
inlinestatic

Definition at line 41 of file enumerator.c.

42 {
43  return CONTAINING_RECORD(jsdisp, EnumeratorInstance, dispex);
44 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

Referenced by Enumerator_destructor(), and enumerator_from_vdisp().

◆ enumerator_from_vdisp()

static EnumeratorInstance* enumerator_from_vdisp ( vdisp_t vdisp)
inlinestatic

Definition at line 46 of file enumerator.c.

47 {
48  return enumerator_from_jsdisp(vdisp->u.jsdisp);
49 }
static EnumeratorInstance * enumerator_from_jsdisp(jsdisp_t *jsdisp)
Definition: enumerator.c:41
jsdisp_t * jsdisp
Definition: jscript.h:144
union vdisp_t::@433 u

Referenced by enumerator_this().

◆ Enumerator_item()

static HRESULT Enumerator_item ( script_ctx_t ctx,
vdisp_t jsthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 115 of file enumerator.c.

117 {
119 
120  TRACE("\n");
121 
122  if (!(This = enumerator_this(jsthis)))
124 
125  return r ? jsval_copy(This->item, r) : S_OK;
126 }
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
HRESULT jsval_copy(jsval_t v, jsval_t *r)
Definition: jsutils.c:231
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define JS_E_ENUMERATOR_EXPECTED
Definition: jscript.h:562
#define S_OK
Definition: intsafe.h:51
static EnumeratorInstance * enumerator_this(vdisp_t *jsthis)
Definition: enumerator.c:51
HRESULT throw_type_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:440

◆ Enumerator_moveFirst()

static HRESULT Enumerator_moveFirst ( script_ctx_t ctx,
vdisp_t jsthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 128 of file enumerator.c.

130 {
132  HRESULT hres = S_OK;
133 
134  TRACE("\n");
135 
136  if (!(This = enumerator_this(jsthis)))
138 
139  if (This->enumvar)
140  {
141  hres = IEnumVARIANT_Reset(This->enumvar);
142  if (FAILED(hres))
143  return hres;
144 
145  This->atend = FALSE;
147  if(FAILED(hres))
148  return hres;
149  }
150 
151  if (r)
152  *r = jsval_undefined();
153  return S_OK;
154 }
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static HRESULT enumvar_get_next_item(EnumeratorInstance *This)
Definition: enumerator.c:56
#define FALSE
Definition: types.h:117
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define JS_E_ENUMERATOR_EXPECTED
Definition: jscript.h:562
static jsval_t jsval_undefined(void)
Definition: jsval.h:137
#define S_OK
Definition: intsafe.h:51
static EnumeratorInstance * enumerator_this(vdisp_t *jsthis)
Definition: enumerator.c:51
HRESULT throw_type_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:440

◆ Enumerator_moveNext()

static HRESULT Enumerator_moveNext ( script_ctx_t ctx,
vdisp_t jsthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 156 of file enumerator.c.

158 {
160  HRESULT hres = S_OK;
161 
162  TRACE("\n");
163 
164  if (!(This = enumerator_this(jsthis)))
166 
167  if (This->enumvar)
168  {
170  if (FAILED(hres))
171  return hres;
172  }
173 
174  if (r)
175  *r = jsval_undefined();
176  return S_OK;
177 }
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static HRESULT enumvar_get_next_item(EnumeratorInstance *This)
Definition: enumerator.c:56
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define JS_E_ENUMERATOR_EXPECTED
Definition: jscript.h:562
static jsval_t jsval_undefined(void)
Definition: jsval.h:137
#define S_OK
Definition: intsafe.h:51
static EnumeratorInstance * enumerator_this(vdisp_t *jsthis)
Definition: enumerator.c:51
HRESULT throw_type_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:440

◆ enumerator_this()

static EnumeratorInstance* enumerator_this ( vdisp_t jsthis)
inlinestatic

Definition at line 51 of file enumerator.c.

52 {
53  return is_vclass(jsthis, JSCLASS_ENUMERATOR) ? enumerator_from_vdisp(jsthis) : NULL;
54 }
smooth NULL
Definition: ftsmooth.c:416
static BOOL is_vclass(vdisp_t *vdisp, jsclass_t class)
Definition: jscript.h:509
static EnumeratorInstance * enumerator_from_vdisp(vdisp_t *vdisp)
Definition: enumerator.c:46

Referenced by Enumerator_atEnd(), Enumerator_item(), Enumerator_moveFirst(), and Enumerator_moveNext().

◆ EnumeratorConstr_value()

static HRESULT EnumeratorConstr_value ( script_ctx_t ctx,
vdisp_t vthis,
WORD  flags,
unsigned  argc,
jsval_t argv,
jsval_t r 
)
static

Definition at line 295 of file enumerator.c.

297 {
298  jsdisp_t *obj;
299  HRESULT hres;
300 
301  TRACE("\n");
302 
303  switch(flags) {
304  case DISPATCH_CONSTRUCT: {
305  if (argc > 1)
307 
308  hres = create_enumerator(ctx, (argc == 1) ? &argv[0] : 0, &obj);
309  if(FAILED(hres))
310  return hres;
311 
312  *r = jsval_obj(obj);
313  break;
314  }
315  default:
316  FIXME("unimplemented flags: %x\n", flags);
317  return E_NOTIMPL;
318  }
319 
320  return S_OK;
321 }
static int argc
Definition: ServiceArgs.c:12
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define argv
Definition: mplay32.c:18
GLsizei GLsizei GLuint * obj
Definition: glext.h:6042
#define FIXME(fmt,...)
Definition: debug.h:111
smooth NULL
Definition: ftsmooth.c:416
HRESULT throw_syntax_error(script_ctx_t *ctx, HRESULT error, const WCHAR *str)
Definition: error.c:435
static HRESULT create_enumerator(script_ctx_t *ctx, jsval_t *argv, jsdisp_t **ret)
Definition: enumerator.c:229
#define JS_E_INVALIDARG
Definition: jscript.h:529
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
GLbitfield flags
Definition: glext.h:7161
#define S_OK
Definition: intsafe.h:51
#define E_NOTIMPL
Definition: ddrawi.h:99
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125

Referenced by create_enumerator_constr().

◆ enumvar_get_next_item()

static HRESULT enumvar_get_next_item ( EnumeratorInstance This)
inlinestatic

Definition at line 56 of file enumerator.c.

57 {
58  HRESULT hres;
60 
61  if (This->atend)
62  return S_OK;
63 
64  /* don't leak previous value */
65  jsval_release(This->item);
66 
67  /* not at end ... get next item */
69  hres = IEnumVARIANT_Next(This->enumvar, 1, &nextitem, NULL);
70  if (hres == S_OK)
71  {
72  hres = variant_to_jsval(&nextitem, &This->item);
74  if (FAILED(hres))
75  {
76  WARN("failed to convert jsval to variant!\n");
77  This->item = jsval_undefined();
78  return hres;
79  }
80  }
81  else
82  {
83  This->item = jsval_undefined();
84  This->atend = TRUE;
85  }
86 
87  return S_OK;
88 }
LOCAL void nextitem(arg_t *ap)
Definition: match.c:428
void jsval_release(jsval_t val)
Definition: jsutils.c:191
#define TRUE
Definition: types.h:120
#define WARN(fmt,...)
Definition: debug.h:112
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568
smooth NULL
Definition: ftsmooth.c:416
HRESULT variant_to_jsval(VARIANT *var, jsval_t *r)
Definition: jsutils.c:258
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
static jsval_t jsval_undefined(void)
Definition: jsval.h:137
#define S_OK
Definition: intsafe.h:51

Referenced by create_enumerator(), Enumerator_moveFirst(), and Enumerator_moveNext().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

Variable Documentation

◆ atEndW

const WCHAR atEndW[] = {'a','t','E','n','d',0}
static

Definition at line 36 of file enumerator.c.

◆ Enumerator_info

const builtin_info_t Enumerator_info
static
Initial value:
= {
{NULL, NULL, 0},
}
smooth NULL
Definition: ftsmooth.c:416
static const builtin_prop_t Enumerator_props[]
Definition: enumerator.c:179
#define ARRAY_SIZE(a)
Definition: main.h:24

Definition at line 186 of file enumerator.c.

Referenced by alloc_enumerator().

◆ Enumerator_props

const builtin_prop_t Enumerator_props[]
static
Initial value:
= {
}
static HRESULT Enumerator_item(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: enumerator.c:115
static HRESULT Enumerator_atEnd(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: enumerator.c:100
static const WCHAR moveNextW[]
Definition: enumerator.c:39
static const WCHAR atEndW[]
Definition: enumerator.c:36
static HRESULT Enumerator_moveFirst(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: enumerator.c:128
static const WCHAR moveFirstW[]
Definition: enumerator.c:38
#define PROPF_METHOD
Definition: jscript.h:97
static const WCHAR itemW[]
Definition: enumerator.c:37
static HRESULT Enumerator_moveNext(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: enumerator.c:156

Definition at line 179 of file enumerator.c.

◆ EnumeratorConstr_info

const builtin_info_t EnumeratorConstr_info
static
Initial value:
= {
0,
}
smooth NULL
Definition: ftsmooth.c:416
#define DEFAULT_FUNCTION_VALUE
Definition: jscript.h:315

Definition at line 323 of file enumerator.c.

Referenced by create_enumerator_constr().

◆ EnumeratorInst_info

const builtin_info_t EnumeratorInst_info
static
Initial value:
= {
{NULL, NULL, 0, NULL},
0,
}
smooth NULL
Definition: ftsmooth.c:416
static void Enumerator_destructor(jsdisp_t *dispex)
Definition: enumerator.c:90

Definition at line 195 of file enumerator.c.

Referenced by alloc_enumerator().

◆ itemW

const WCHAR itemW[] = {'i','t','e','m',0}
static

Definition at line 37 of file enumerator.c.

Referenced by test_header_notification2().

◆ moveFirstW

const WCHAR moveFirstW[] = {'m','o','v','e','F','i','r','s','t',0}
static

Definition at line 38 of file enumerator.c.

◆ moveNextW

const WCHAR moveNextW[] = {'m','o','v','e','N','e','x','t',0}
static

Definition at line 39 of file enumerator.c.