ReactOS 0.4.17-dev-357-ga8f14ff
vbarray.c File Reference
#include "jscript.h"
#include "wine/debug.h"
Include dependency graph for vbarray.c:

Go to the source code of this file.

Classes

struct  VBArrayInstance
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
static VBArrayInstancevbarray_from_jsdisp (jsdisp_t *jsdisp)
 
static VBArrayInstancevbarray_this (jsval_t vthis)
 
static HRESULT VBArray_dimensions (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT VBArray_getItem (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT VBArray_lbound (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT VBArray_toArray (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT VBArray_ubound (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT VBArray_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static void VBArray_destructor (jsdisp_t *dispex)
 
static HRESULT alloc_vbarray (script_ctx_t *ctx, jsdisp_t *object_prototype, VBArrayInstance **ret)
 
static HRESULT VBArrayConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
HRESULT create_vbarray_constr (script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
 
HRESULT create_vbarray (script_ctx_t *ctx, SAFEARRAY *sa, jsdisp_t **ret)
 

Variables

static const builtin_prop_t VBArray_props []
 
static const builtin_info_t VBArray_info
 

Function Documentation

◆ alloc_vbarray()

static HRESULT alloc_vbarray ( script_ctx_t ctx,
jsdisp_t object_prototype,
VBArrayInstance **  ret 
)
static

Definition at line 256 of file vbarray.c.

257{
258 VBArrayInstance *vbarray;
260
261 vbarray = calloc(1, sizeof(VBArrayInstance));
262 if(!vbarray)
263 return E_OUTOFMEMORY;
264
265 if(object_prototype)
266 hres = init_dispex(&vbarray->dispex, ctx, &VBArray_info, object_prototype);
267 else
268 hres = init_dispex_from_constr(&vbarray->dispex, ctx, &VBArray_info, ctx->vbarray_constr);
269
270 if(FAILED(hres)) {
271 free(vbarray);
272 return hres;
273 }
274
275 *ret = vbarray;
276 return S_OK;
277}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
return ret
Definition: mutex.c:146
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *constr)
Definition: dispex.c:2512
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
Definition: dispex.c:2454
HRESULT hres
Definition: protocol.c:465
#define calloc
Definition: rosglue.h:14
jsdisp_t dispex
Definition: vbarray.c:26
static const builtin_info_t VBArray_info
Definition: vbarray.c:248

Referenced by create_vbarray(), create_vbarray_constr(), and VBArrayConstr_value().

◆ create_vbarray()

HRESULT create_vbarray ( script_ctx_t ctx,
SAFEARRAY sa,
jsdisp_t **  ret 
)

Definition at line 336 of file vbarray.c.

337{
338 VBArrayInstance *vbarray;
340
341 hres = alloc_vbarray(ctx, NULL, &vbarray);
342 if(FAILED(hres))
343 return hres;
344
345 hres = SafeArrayCopy(sa, &vbarray->safearray);
346 if(FAILED(hres)) {
347 jsdisp_release(&vbarray->dispex);
348 return hres;
349 }
350
351 *ret = &vbarray->dispex;
352 return S_OK;
353}
static struct sockaddr_in sa
Definition: adnsresfilter.c:69
#define NULL
Definition: types.h:112
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
Definition: safearray.c:1379
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
SAFEARRAY * safearray
Definition: vbarray.c:28
static HRESULT alloc_vbarray(script_ctx_t *ctx, jsdisp_t *object_prototype, VBArrayInstance **ret)
Definition: vbarray.c:256

Referenced by to_object().

◆ create_vbarray_constr()

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

Definition at line 321 of file vbarray.c.

322{
323 VBArrayInstance *vbarray;
325
326 hres = alloc_vbarray(ctx, object_prototype, &vbarray);
327 if(FAILED(hres))
328 return hres;
329
331
332 jsdisp_release(&vbarray->dispex);
333 return hres;
334}
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:809
#define L(x)
Definition: resources.c:13
const unsigned int PROPF_CONSTR
Definition: jsdisp.idl:34
static HRESULT VBArrayConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:279

Referenced by init_constructors().

◆ VBArray_destructor()

static void VBArray_destructor ( jsdisp_t dispex)
static

Definition at line 233 of file vbarray.c.

234{
235 VBArrayInstance *vbarray = vbarray_from_jsdisp(dispex);
236
237 SafeArrayDestroy(vbarray->safearray);
238}
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
Definition: safearray.c:1347
static VBArrayInstance * vbarray_from_jsdisp(jsdisp_t *jsdisp)
Definition: vbarray.c:31

◆ VBArray_dimensions()

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

Definition at line 42 of file vbarray.c.

44{
45 VBArrayInstance *vbarray;
46
47 TRACE("\n");
48
49 vbarray = vbarray_this(vthis);
50 if(!vbarray)
52
53 if(r)
55 return S_OK;
56}
UINT WINAPI SafeArrayGetDim(SAFEARRAY *psa)
Definition: safearray.c:1094
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define JS_E_VBARRAY_EXPECTED
Definition: jscript.h:559
static jsval_t jsval_number(double n)
Definition: jsval.h:153
#define TRACE(s)
Definition: solgame.cpp:4
static VBArrayInstance * vbarray_this(jsval_t vthis)
Definition: vbarray.c:36

◆ vbarray_from_jsdisp()

static VBArrayInstance * vbarray_from_jsdisp ( jsdisp_t jsdisp)
inlinestatic

Definition at line 31 of file vbarray.c.

32{
33 return CONTAINING_RECORD(jsdisp, VBArrayInstance, dispex);
34}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by VBArray_destructor(), and vbarray_this().

◆ VBArray_getItem()

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

Definition at line 58 of file vbarray.c.

60{
61 VBArrayInstance *vbarray;
62 unsigned i;
63 LONG *indexes;
66
67 TRACE("\n");
68
69 vbarray = vbarray_this(vthis);
70 if(!vbarray)
72
73 if(argc < SafeArrayGetDim(vbarray->safearray))
75
76 indexes = malloc(sizeof(indexes[0])*argc);
77 if(!indexes)
78 return E_OUTOFMEMORY;
79
80 for(i=0; i<argc; i++) {
81 hres = to_long(ctx, argv[i], indexes + i);
82 if(FAILED(hres)) {
83 free(indexes);
84 return hres;
85 }
86 }
87
88 hres = SafeArrayGetElement(vbarray->safearray, indexes, (void*)&out);
89 free(indexes);
92 else if(FAILED(hres))
93 return hres;
94
95 if(r) {
98 }
99 return hres;
100}
#define malloc
Definition: debug_ros.c:4
MonoAssembly int argc
Definition: metahost.c:107
HRESULT WINAPI SafeArrayGetElement(SAFEARRAY *psa, LONG *rgIndices, void *pvData)
Definition: safearray.c:947
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HRESULT to_long(script_ctx_t *, jsval_t, LONG *)
Definition: jsutils.c:748
#define JS_E_SUBSCRIPT_OUT_OF_RANGE
Definition: jscript.h:528
HRESULT variant_to_jsval(script_ctx_t *ctx, VARIANT *var, jsval_t *r)
Definition: jsutils.c:251
#define argv
Definition: mplay32.c:18
long LONG
Definition: pedump.c:60
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define DISP_E_BADINDEX
Definition: winerror.h:3623

◆ VBArray_lbound()

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

Definition at line 102 of file vbarray.c.

104{
105 VBArrayInstance *vbarray;
106 LONG dim;
108
109 TRACE("\n");
110
111 vbarray = vbarray_this(vthis);
112 if(!vbarray)
114
115 if(argc) {
116 hres = to_long(ctx, argv[0], &dim);
117 if(FAILED(hres))
118 return hres;
119 } else
120 dim = 1;
121
122 hres = SafeArrayGetLBound(vbarray->safearray, dim, &dim);
123 if(hres == DISP_E_BADINDEX)
125 else if(FAILED(hres))
126 return hres;
127
128 if(r)
129 *r = jsval_number(dim);
130 return S_OK;
131}
HRESULT WINAPI SafeArrayGetLBound(SAFEARRAY *psa, UINT nDim, LONG *plLbound)
Definition: safearray.c:1066

◆ vbarray_this()

static VBArrayInstance * vbarray_this ( jsval_t  vthis)
inlinestatic

Definition at line 36 of file vbarray.c.

37{
38 jsdisp_t *jsdisp = is_object_instance(vthis) ? to_jsdisp(get_object(vthis)) : NULL;
39 return (jsdisp && is_class(jsdisp, JSCLASS_VBARRAY)) ? vbarray_from_jsdisp(jsdisp) : NULL;
40}
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
@ JSCLASS_VBARRAY
Definition: jscript.h:117
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:503
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:175

Referenced by VBArray_dimensions(), VBArray_getItem(), VBArray_lbound(), VBArray_toArray(), and VBArray_ubound().

◆ VBArray_toArray()

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

Definition at line 133 of file vbarray.c.

135{
136 VBArrayInstance *vbarray;
138 jsval_t val;
139 VARIANT *v;
140 LONG i, size = 1, ubound, lbound;
142
143 TRACE("\n");
144
145 vbarray = vbarray_this(vthis);
146 if(!vbarray)
148
149 for(i=1; i<=SafeArrayGetDim(vbarray->safearray); i++) {
150 SafeArrayGetLBound(vbarray->safearray, i, &lbound);
151 SafeArrayGetUBound(vbarray->safearray, i, &ubound);
152 size *= ubound-lbound+1;
153 }
154
155 hres = SafeArrayAccessData(vbarray->safearray, (void**)&v);
156 if(FAILED(hres))
157 return hres;
158
159 hres = create_array(ctx, 0, &array);
160 if(FAILED(hres)) {
162 return hres;
163 }
164
165 for(i=0; i<size; i++) {
167 if(SUCCEEDED(hres)) {
170 }
171 if(FAILED(hres)) {
174 return hres;
175 }
176 v++;
177 }
178
180
181 if(r)
182 *r = jsval_obj(array);
183 else
185 return S_OK;
186}
HRESULT create_array(script_ctx_t *ctx, DWORD length, jsdisp_t **ret)
Definition: array.c:1780
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
Definition: safearray.c:1033
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
Definition: safearray.c:1137
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
Definition: safearray.c:1168
const GLdouble * v
Definition: gl.h:2040
GLsizeiptr size
Definition: glext.h:5919
GLuint GLfloat * val
Definition: glext.h:7180
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT jsdisp_propput_idx(jsdisp_t *obj, DWORD idx, jsval_t val)
Definition: dispex.c:2864
void jsval_release(jsval_t val)
Definition: jsutils.c:186
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
Definition: jsval.h:54
Definition: undname.c:54

◆ VBArray_ubound()

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

Definition at line 188 of file vbarray.c.

190{
191 VBArrayInstance *vbarray;
192 LONG dim;
194
195 TRACE("\n");
196
197 vbarray = vbarray_this(vthis);
198 if(!vbarray)
200
201 if(argc) {
202 hres = to_long(ctx, argv[0], &dim);
203 if(FAILED(hres))
204 return hres;
205 } else
206 dim = 1;
207
208 hres = SafeArrayGetUBound(vbarray->safearray, dim, &dim);
209 if(hres == DISP_E_BADINDEX)
211 else if(FAILED(hres))
212 return hres;
213
214 if(r)
215 *r = jsval_number(dim);
216 return S_OK;
217}

◆ VBArray_value()

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

Definition at line 219 of file vbarray.c.

221{
222 FIXME("\n");
223
224 switch(flags) {
225 default:
226 FIXME("unimplemented flags %x\n", flags);
227 return E_NOTIMPL;
228 }
229
230 return S_OK;
231}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99
GLbitfield flags
Definition: glext.h:7161

◆ VBArrayConstr_value()

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

Definition at line 279 of file vbarray.c.

281{
282 VBArrayInstance *vbarray;
284
285 TRACE("\n");
286
287 switch(flags) {
288 case DISPATCH_METHOD:
289 if(argc<1 || !is_variant(argv[0]) || V_VT(get_variant(argv[0])) != (VT_ARRAY|VT_VARIANT))
291
292 return r ? jsval_copy(argv[0], r) : S_OK;
293
294 case DISPATCH_CONSTRUCT:
295 if(argc<1 || !is_variant(argv[0]) || V_VT(get_variant(argv[0])) != (VT_ARRAY|VT_VARIANT))
297 if(!r)
298 return S_OK;
299
300 hres = alloc_vbarray(ctx, NULL, &vbarray);
301 if(FAILED(hres))
302 return hres;
303
305 if(FAILED(hres)) {
306 jsdisp_release(&vbarray->dispex);
307 return hres;
308 }
309
310 *r = jsval_obj(&vbarray->dispex);
311 break;
312
313 default:
314 FIXME("unimplemented flags: %x\n", flags);
315 return E_NOTIMPL;
316 }
317
318 return S_OK;
319}
@ VT_ARRAY
Definition: compat.h:2341
@ VT_VARIANT
Definition: compat.h:2307
HRESULT jsval_copy(jsval_t v, jsval_t *r)
Definition: jsutils.c:225
static VARIANT * get_variant(jsval_t v)
Definition: jsval.h:243
static BOOL is_variant(jsval_t v)
Definition: jsval.h:209
#define V_ARRAY(A)
Definition: oleauto.h:222
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define V_VT(A)
Definition: oleauto.h:211

Referenced by create_vbarray_constr().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

Variable Documentation

◆ VBArray_info

const builtin_info_t VBArray_info
static
Initial value:
= {
.class = JSCLASS_VBARRAY,
.call = VBArray_value,
.props_cnt = ARRAY_SIZE(VBArray_props),
.props = VBArray_props,
.destructor = VBArray_destructor,
}
#define ARRAY_SIZE(A)
Definition: main.h:20
static void VBArray_destructor(jsdisp_t *dispex)
Definition: vbarray.c:233
static const builtin_prop_t VBArray_props[]
Definition: vbarray.c:240
static HRESULT VBArray_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:219

Definition at line 248 of file vbarray.c.

Referenced by alloc_vbarray().

◆ VBArray_props

const builtin_prop_t VBArray_props[]
static
Initial value:
= {
{L"getItem", VBArray_getItem, PROPF_METHOD|1},
}
const unsigned int PROPF_METHOD
Definition: jsdisp.idl:33
static HRESULT VBArray_lbound(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:102
static HRESULT VBArray_toArray(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:133
static HRESULT VBArray_dimensions(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:42
static HRESULT VBArray_ubound(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:188
static HRESULT VBArray_getItem(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: vbarray.c:58

Definition at line 240 of file vbarray.c.