jscript: Added RegExp.toString() implementation.
This commit is contained in:
parent
41fe35583d
commit
f34722e772
|
@ -333,8 +333,50 @@ static HRESULT RegExp_lastIndex(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
|
||||||
static HRESULT RegExp_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
static HRESULT RegExp_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, unsigned argc, jsval_t *argv,
|
||||||
jsval_t *r)
|
jsval_t *r)
|
||||||
{
|
{
|
||||||
FIXME("\n");
|
RegExpInstance *regexp;
|
||||||
return E_NOTIMPL;
|
unsigned len, f;
|
||||||
|
jsstr_t *ret;
|
||||||
|
WCHAR *ptr;
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
|
||||||
|
if(!is_vclass(jsthis, JSCLASS_REGEXP)) {
|
||||||
|
FIXME("Not a RegExp\n");
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
regexp = regexp_from_vdisp(jsthis);
|
||||||
|
|
||||||
|
if(!r)
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
len = jsstr_length(regexp->str) + 2;
|
||||||
|
|
||||||
|
f = regexp->jsregexp->flags;
|
||||||
|
if(f & REG_FOLD)
|
||||||
|
len++;
|
||||||
|
if(f & REG_GLOB)
|
||||||
|
len++;
|
||||||
|
if(f & REG_MULTILINE)
|
||||||
|
len++;
|
||||||
|
|
||||||
|
ptr = jsstr_alloc_buf(len, &ret);
|
||||||
|
if(!ptr)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
*ptr++ = '/';
|
||||||
|
ptr += jsstr_flush(regexp->str, ptr);
|
||||||
|
*ptr++ = '/';
|
||||||
|
|
||||||
|
if(f & REG_FOLD)
|
||||||
|
*ptr++ = 'i';
|
||||||
|
if(f & REG_GLOB)
|
||||||
|
*ptr++ = 'g';
|
||||||
|
if(f & REG_MULTILINE)
|
||||||
|
*ptr++ = 'm';
|
||||||
|
|
||||||
|
*r = jsval_string(ret);
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT create_match_array(script_ctx_t *ctx, jsstr_t *input_str,
|
static HRESULT create_match_array(script_ctx_t *ctx, jsstr_t *input_str,
|
||||||
|
|
|
@ -648,4 +648,16 @@ ok(!("$10" in RegExp), "RegExp.$10 exists");
|
||||||
RegExp.$1 = "a";
|
RegExp.$1 = "a";
|
||||||
ok(RegExp.$1 === "b", "RegExp.$1 = " + RegExp.$1);
|
ok(RegExp.$1 === "b", "RegExp.$1 = " + RegExp.$1);
|
||||||
|
|
||||||
|
ok(/abc/.toString() === "/abc/", "/abc/.toString() = " + /abc/.toString());
|
||||||
|
ok(/\//.toString() === "/\\//", "/\//.toString() = " + /\//.toString());
|
||||||
|
tmp = new RegExp("abc/");
|
||||||
|
ok(tmp.toString() === "/abc//", "(new RegExp(\"abc/\")).toString() = " + tmp.toString());
|
||||||
|
ok(/abc/g.toString() === "/abc/g", "/abc/g.toString() = " + /abc/g.toString());
|
||||||
|
ok(/abc/i.toString() === "/abc/i", "/abc/i.toString() = " + /abc/i.toString());
|
||||||
|
ok(/abc/ig.toString() === "/abc/ig", "/abc/ig.toString() = " + /abc/ig.toString());
|
||||||
|
ok(/abc/mgi.toString() === "/abc/igm", "/abc/mgi.toString() = " + /abc/mgi.toString());
|
||||||
|
tmp = new RegExp("abc/", "mgi");
|
||||||
|
ok(tmp.toString() === "/abc//igm", "(new RegExp(\"abc/\")).toString() = " + tmp.toString());
|
||||||
|
ok(/abc/.toString(1, false, "3") === "/abc/", "/abc/.toString(1, false, \"3\") = " + /abc/.toString());
|
||||||
|
|
||||||
reportSuccess();
|
reportSuccess();
|
||||||
|
|
Loading…
Reference in New Issue