- if(SUCCEEDED(hres))
- hres = regexp_match(ctx, regexp, str, length, FALSE, &match_result, &match_cnt);
- jsdisp_release(regexp);
- if(FAILED(hres)) {
- SysFreeString(val_str);
- return hres;
- }
-
- if(!match_cnt) {
- TRACE("no match\n");
-
- if(retv)
- V_VT(retv) = VT_NULL;
-
- SysFreeString(val_str);
- return S_OK;
- }
-
- hres = create_array(ctx, match_cnt, &array);
- if(FAILED(hres)) {
- SysFreeString(val_str);
- return hres;
- }
-
- V_VT(&var) = VT_BSTR;
-
- for(i=0; i < match_cnt; i++) {
- V_BSTR(&var) = SysAllocStringLen(match_result[i].str, match_result[i].len);
- if(!V_BSTR(&var)) {
+ if(SUCCEEDED(hres)) {
+ if(!val_str)
+ val_str = SysAllocStringLen(str, length);
+ if(val_str)
+ hres = regexp_string_match(ctx, regexp, val_str, retv, ei);
+ else