static HRESULT get_length(script_ctx_t *ctx, vdisp_t *vdisp, jsexcept_t *ei, jsdisp_t **jsthis, DWORD *ret) { ArrayInstance *array; VARIANT var; HRESULT hres; array = array_this(vdisp); if(array) { *jsthis = &array->dispex; *ret = array->length; return S_OK; } if(!is_jsdisp(vdisp)) return throw_type_error(ctx, ei, JS_E_JSCRIPT_EXPECTED, NULL); hres = jsdisp_propget_name(vdisp->u.jsdisp, lengthW, &var, ei); if(FAILED(hres)) return hres; hres = to_uint32(ctx, &var, ei, ret); VariantClear(&var); if(FAILED(hres)) return hres; *jsthis = vdisp->u.jsdisp; return S_OK; }
static HRESULT array_to_args(script_ctx_t *ctx, jsdisp_t *arg_array, unsigned *argc, jsval_t **ret) { jsval_t *argv, val; DWORD length, i; HRESULT hres; hres = jsdisp_propget_name(arg_array, lengthW, &val); if(FAILED(hres)) return hres; hres = to_uint32(ctx, val, &length); jsval_release(val); if(FAILED(hres)) return hres; argv = heap_alloc(length * sizeof(*argv)); if(!argv) return E_OUTOFMEMORY; for(i=0; i<length; i++) { hres = jsdisp_get_idx(arg_array, i, argv+i); if(hres == DISP_E_UNKNOWNNAME) { argv[i] = jsval_undefined(); }else if(FAILED(hres)) { while(i--) jsval_release(argv[i]); heap_free(argv); return hres; } } *argc = length; *ret = argv; return S_OK; }
static HRESULT array_to_args(script_ctx_t *ctx, jsdisp_t *arg_array, jsexcept_t *ei, DISPPARAMS *args) { VARIANT var, *argv; DWORD length, i; HRESULT hres; hres = jsdisp_propget_name(arg_array, lengthW, &var, ei); if(FAILED(hres)) return hres; hres = to_uint32(ctx, &var, ei, &length); VariantClear(&var); if(FAILED(hres)) return hres; argv = heap_alloc(length * sizeof(VARIANT)); if(!argv) return E_OUTOFMEMORY; for(i=0; i<length; i++) { hres = jsdisp_get_idx(arg_array, i, argv+i, ei); if(hres == DISP_E_UNKNOWNNAME) V_VT(argv+i) = VT_EMPTY; else if(FAILED(hres)) { while(i--) VariantClear(argv+i); heap_free(argv); return hres; } } args->cArgs = length; args->rgvarg = argv; return S_OK; }
static HRESULT get_length(script_ctx_t *ctx, vdisp_t *vdisp, jsdisp_t **jsthis, DWORD *ret) { ArrayInstance *array; jsval_t val; HRESULT hres; array = array_this(vdisp); if(array) { *jsthis = &array->dispex; *ret = array->length; return S_OK; } if(!is_jsdisp(vdisp)) return throw_type_error(ctx, JS_E_JSCRIPT_EXPECTED, NULL); hres = jsdisp_propget_name(vdisp->u.jsdisp, lengthW, &val); if(FAILED(hres)) return hres; hres = to_uint32(ctx, val, ret); jsval_release(val); if(FAILED(hres)) return hres; *jsthis = vdisp->u.jsdisp; return S_OK; }
/** \brief Perform a boolean XOR operation */ fdwatch_cond_t& fdwatch_cond_t::operator ^=(const fdwatch_cond_t &other) throw() { // do the operation *this = fdwatch_cond_t( to_uint32() ^ other.to_uint32() ); // return the object itself return *this; }
/* ECMA-262 3rd Edition 15.5.3.2 */ static HRESULT StringConstr_fromCharCode(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { WCHAR *ret_str; DWORD i, code; jsstr_t *ret; HRESULT hres; TRACE("\n"); ret_str = jsstr_alloc_buf(argc, &ret); if(!ret_str) return E_OUTOFMEMORY; for(i=0; i<argc; i++) { hres = to_uint32(ctx, argv[i], &code); if(FAILED(hres)) { jsstr_release(ret); return hres; } ret_str[i] = code; } if(r) *r = jsval_string(ret); else jsstr_release(ret); return S_OK; }
static inline boost::uint32_t to_uint32(const Byte *buf) { return to_uint32(buf[0], buf[1], buf[2], buf[3]); }
static inline boost::uint32_t to_uint32(T1 high, T2 mid1, T3 mid2, T4 low) { return to_uint32(static_cast<unsigned char>(high), static_cast<unsigned char>(mid1), static_cast<unsigned char>(mid2), static_cast<unsigned char>(low)); }
static HRESULT String_split(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { match_state_t match_result, *match_ptr = &match_result; DWORD length, i, match_len = 0; const WCHAR *ptr, *ptr2, *str, *match_str = NULL; unsigned limit = ~0u; jsdisp_t *array, *regexp = NULL; jsstr_t *jsstr, *match_jsstr, *tmp_str; HRESULT hres; TRACE("\n"); if(argc != 1 && argc != 2) { FIXME("unsupported argc %u\n", argc); return E_NOTIMPL; } hres = get_string_flat_val(ctx, jsthis, &jsstr, &str); if(FAILED(hres)) return hres; length = jsstr_length(jsstr); if(argc > 1 && !is_undefined(argv[1])) { hres = to_uint32(ctx, argv[1], &limit); if(FAILED(hres)) { jsstr_release(jsstr); return hres; } } if(is_object_instance(argv[0])) { regexp = iface_to_jsdisp(get_object(argv[0])); if(regexp) { if(!is_class(regexp, JSCLASS_REGEXP)) { jsdisp_release(regexp); regexp = NULL; } } } if(!regexp) { hres = to_flat_string(ctx, argv[0], &match_jsstr, &match_str); if(FAILED(hres)) { jsstr_release(jsstr); return hres; } match_len = jsstr_length(match_jsstr); if(!match_len) { jsstr_release(match_jsstr); match_str = NULL; } } hres = create_array(ctx, 0, &array); if(SUCCEEDED(hres)) { ptr = str; match_result.cp = str; for(i=0; i<limit; i++) { if(regexp) { hres = regexp_match_next(ctx, regexp, REM_NO_PARENS, jsstr, &match_ptr); if(hres != S_OK) break; ptr2 = match_result.cp - match_result.match_len; } else if(match_str) { ptr2 = strstrW(ptr, match_str); if(!ptr2) break; } else { if(!*ptr) break; ptr2 = ptr+1; } tmp_str = jsstr_alloc_len(ptr, ptr2-ptr); if(!tmp_str) { hres = E_OUTOFMEMORY; break; } hres = jsdisp_propput_idx(array, i, jsval_string(tmp_str)); jsstr_release(tmp_str); if(FAILED(hres)) break; if(regexp) ptr = match_result.cp; else if(match_str) ptr = ptr2 + match_len; else ptr++; } } if(SUCCEEDED(hres) && (match_str || regexp) && i<limit) { DWORD len = (str+length) - ptr; if(len || match_str) { tmp_str = jsstr_alloc_len(ptr, len); if(tmp_str) { hres = jsdisp_propput_idx(array, i, jsval_string(tmp_str)); jsstr_release(tmp_str); } else { hres = E_OUTOFMEMORY; } } } if(regexp) jsdisp_release(regexp); if(match_str) jsstr_release(match_jsstr); jsstr_release(jsstr); if(SUCCEEDED(hres) && r) *r = jsval_obj(array); else jsdisp_release(array); return hres; }