jscript: Added jsstr_substr helper and use it in String object implementation.

This commit is contained in:
Jacek Caban 2013-03-04 10:57:14 +01:00 committed by Alexandre Julliard
parent 464b8b4160
commit 6e3895ad76
2 changed files with 18 additions and 14 deletions

View File

@ -59,6 +59,11 @@ static inline BOOL jsstr_eq(jsstr_t *str1, jsstr_t *str2)
return len == jsstr_length(str2) && !memcmp(str1->str, str2->str, len*sizeof(WCHAR));
}
static inline jsstr_t *jsstr_substr(jsstr_t *str, unsigned off, unsigned len)
{
return jsstr_alloc_len(str->str+off, len);
}
int jsstr_cmp(jsstr_t*,jsstr_t*) DECLSPEC_HIDDEN;
jsstr_t *jsstr_concat(jsstr_t*,jsstr_t*) DECLSPEC_HIDDEN;

View File

@ -276,7 +276,7 @@ static HRESULT String_charAt(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
}
if(0 <= pos && pos < jsstr_length(str)) {
ret = jsstr_alloc_len(str->str+pos, 1);
ret = jsstr_substr(str, pos, 1);
if(!ret)
return E_OUTOFMEMORY;
}else {
@ -649,10 +649,10 @@ static HRESULT rep_call(script_ctx_t *ctx, jsdisp_t *func,
if(SUCCEEDED(hres)) {
for(i=0; i < match->paren_count; i++) {
if(match->parens[i].index == -1)
tmp_str = jsstr_empty();
if(match->parens[i].index != -1)
tmp_str = jsstr_substr(str, match->parens[i].index, match->parens[i].length);
else
tmp_str = jsstr_alloc_len(str->str+match->parens[i].index, match->parens[i].length);
tmp_str = jsstr_empty();
if(!tmp_str) {
hres = E_OUTOFMEMORY;
break;
@ -1016,7 +1016,7 @@ static HRESULT String_slice(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsi
end = start;
if(r) {
jsstr_t *retstr = jsstr_alloc_len(str->str+start, end-start);
jsstr_t *retstr = jsstr_substr(str, start, end-start);
if(!retstr) {
jsstr_release(str);
return E_OUTOFMEMORY;
@ -1225,15 +1225,14 @@ static HRESULT String_substring(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
}
if(r) {
jsstr_t *ret = jsstr_alloc_len(str->str+start, end-start);
if(!ret) {
jsstr_release(str);
return E_OUTOFMEMORY;
}
*r = jsval_string(ret);
jsstr_t *ret = jsstr_substr(str, start, end-start);
if(ret)
*r = jsval_string(ret);
else
hres = E_OUTOFMEMORY;
}
jsstr_release(str);
return S_OK;
return hres;
}
/* ECMA-262 3rd Edition B.2.3 */
@ -1280,7 +1279,7 @@ static HRESULT String_substr(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, uns
hres = S_OK;
if(r) {
jsstr_t *ret = jsstr_alloc_len(str->str+start, len);
jsstr_t *ret = jsstr_substr(str, start, len);
if(ret)
*r = jsval_string(ret);
else
@ -1426,7 +1425,7 @@ static HRESULT String_idx_get(jsdisp_t *jsdisp, unsigned idx, jsval_t *r)
TRACE("%p[%u] = %s\n", string, idx, debugstr_wn(string->str->str+idx, 1));
ret = jsstr_alloc_len(string->str->str+idx, 1);
ret = jsstr_substr(string->str, idx, 1);
if(!ret)
return E_OUTOFMEMORY;