ReactOS 0.4.17-dev-357-ga8f14ff
string.c File Reference
#include <math.h>
#include "jscript.h"
#include "regexp.h"
#include "wine/debug.h"
Include dependency graph for string.c:

Go to the source code of this file.

Classes

struct  StringInstance
 
struct  strbuf_t
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (jscript)
 
static StringInstancestring_from_jsdisp (jsdisp_t *jsdisp)
 
static StringInstancestring_this (jsval_t vthis)
 
static HRESULT get_string_val (script_ctx_t *ctx, jsval_t vthis, jsstr_t **val)
 
static HRESULT get_string_flat_val (script_ctx_t *ctx, jsval_t vthis, jsstr_t **jsval, const WCHAR **val)
 
static HRESULT String_get_length (script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r)
 
static HRESULT stringobj_to_string (jsval_t vthis, jsval_t *r)
 
static HRESULT String_toString (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_valueOf (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT do_attributeless_tag_format (script_ctx_t *ctx, jsval_t vthis, jsval_t *r, const WCHAR *tagname)
 
static HRESULT do_attribute_tag_format (script_ctx_t *ctx, jsval_t vthis, unsigned argc, jsval_t *argv, jsval_t *r, const WCHAR *tagname, const WCHAR *attrname)
 
static HRESULT String_anchor (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_big (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_blink (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_bold (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_charAt (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_charCodeAt (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_concat (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_fixed (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_fontcolor (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_fontsize (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_indexOf (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_italics (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_lastIndexOf (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_link (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_match (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static BOOL strbuf_ensure_size (strbuf_t *buf, unsigned len)
 
static HRESULT strbuf_append (strbuf_t *buf, const WCHAR *str, DWORD len)
 
static HRESULT strbuf_append_jsstr (strbuf_t *buf, jsstr_t *str)
 
static HRESULT rep_call (script_ctx_t *ctx, jsdisp_t *func, jsstr_t *jsstr, const WCHAR *str, match_state_t *match, jsstr_t **ret)
 
static HRESULT String_replace (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_search (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_slice (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_small (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_split (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_strike (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_sub (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_substring (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_substr (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_sup (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT to_upper_case (script_ctx_t *ctx, jsval_t vthis, jsval_t *r)
 
static HRESULT to_lower_case (script_ctx_t *ctx, jsval_t vthis, jsval_t *r)
 
static HRESULT String_toLowerCase (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_toUpperCase (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_toLocaleLowerCase (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_toLocaleUpperCase (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_trim (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT String_localeCompare (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static void String_destructor (jsdisp_t *dispex)
 
static HRESULT String_lookup_prop (jsdisp_t *jsdisp, const WCHAR *name, unsigned flags, struct property_info *desc)
 
static HRESULT String_next_prop (jsdisp_t *jsdisp, unsigned id, struct property_info *desc)
 
static HRESULT String_prop_get (jsdisp_t *jsdisp, unsigned idx, jsval_t *r)
 
static HRESULT StringConstr_fromCharCode (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT StringConstr_value (script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
 
static HRESULT string_alloc (script_ctx_t *ctx, jsdisp_t *object_prototype, jsstr_t *str, StringInstance **ret)
 
HRESULT create_string_constr (script_ctx_t *ctx, jsdisp_t *object_prototype, jsdisp_t **ret)
 
HRESULT create_string (script_ctx_t *ctx, jsstr_t *str, jsdisp_t **ret)
 

Variables

static const builtin_prop_t String_props []
 
static const builtin_info_t String_info
 
static const builtin_prop_t StringInst_props []
 
static const builtin_info_t StringInst_info
 
static const builtin_prop_t StringConstr_props []
 
static const builtin_info_t StringConstr_info
 

Function Documentation

◆ create_string()

HRESULT create_string ( script_ctx_t ctx,
jsstr_t str,
jsdisp_t **  ret 
)

Definition at line 1736 of file string.c.

1737{
1739 HRESULT hres;
1740
1741 hres = string_alloc(ctx, NULL, str, &string);
1742 if(FAILED(hres))
1743 return hres;
1744
1745 *ret = &string->dispex;
1746 return S_OK;
1747
1748}
#define NULL
Definition: types.h:112
static HRESULT string_alloc(script_ctx_t *ctx, jsdisp_t *object_prototype, jsstr_t *str, StringInstance **ret)
Definition: string.c:1686
return ret
Definition: mutex.c:146
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
char string[160]
Definition: util.h:11
HRESULT hres
Definition: protocol.c:465
const WCHAR * str

Referenced by StringConstr_value(), and to_object().

◆ create_string_constr()

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

Definition at line 1720 of file string.c.

1721{
1723 HRESULT hres;
1724
1725 hres = string_alloc(ctx, object_prototype, jsstr_empty(), &string);
1726 if(FAILED(hres))
1727 return hres;
1728
1730 PROPF_CONSTR|1, &string->dispex, ret);
1731
1732 jsdisp_release(&string->dispex);
1733 return hres;
1734}
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
static const builtin_info_t StringConstr_info
Definition: string.c:1713
static HRESULT StringConstr_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: string.c:1635
#define L(x)
Definition: resources.c:13
ULONG jsdisp_release(jsdisp_t *obj)
Definition: dispex.c:1911
const unsigned int PROPF_CONSTR
Definition: jsdisp.idl:34
jsstr_t * jsstr_empty(void)
Definition: jsstr.c:291

Referenced by init_constructors().

◆ do_attribute_tag_format()

static HRESULT do_attribute_tag_format ( script_ctx_t ctx,
jsval_t  vthis,
unsigned  argc,
jsval_t argv,
jsval_t r,
const WCHAR tagname,
const WCHAR attrname 
)
static

Definition at line 160 of file string.c.

162{
163 jsstr_t *str, *attr_value = NULL;
165
166 hres = get_string_val(ctx, vthis, &str);
167 if(FAILED(hres))
168 return hres;
169
170 if(argc) {
171 hres = to_string(ctx, argv[0], &attr_value);
172 if(FAILED(hres)) {
174 return hres;
175 }
176 }else {
177 attr_value = jsstr_undefined();
178 }
179
180 if(r) {
181 unsigned attrname_len = lstrlenW(attrname);
182 unsigned tagname_len = lstrlenW(tagname);
183 jsstr_t *ret;
184 WCHAR *ptr;
185
186 ret = jsstr_alloc_buf(2*tagname_len + attrname_len + jsstr_length(attr_value) + jsstr_length(str) + 9, &ptr);
187 if(ret) {
188 *ptr++ = '<';
189 memcpy(ptr, tagname, tagname_len*sizeof(WCHAR));
190 ptr += tagname_len;
191 *ptr++ = ' ';
192 memcpy(ptr, attrname, attrname_len*sizeof(WCHAR));
193 ptr += attrname_len;
194 *ptr++ = '=';
195 *ptr++ = '"';
196 ptr += jsstr_flush(attr_value, ptr);
197 *ptr++ = '"';
198 *ptr++ = '>';
199 ptr += jsstr_flush(str, ptr);
200
201 *ptr++ = '<';
202 *ptr++ = '/';
203 memcpy(ptr, tagname, tagname_len*sizeof(WCHAR));
204 ptr += tagname_len;
205 *ptr = '>';
206
207 *r = jsval_string(ret);
208 }else {
210 }
211 }
212
213 jsstr_release(attr_value);
215 return hres;
216}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define lstrlenW
Definition: compat.h:750
static HRESULT get_string_val(script_ctx_t *ctx, jsval_t vthis, jsstr_t **val)
Definition: string.c:45
MonoAssembly int argc
Definition: metahost.c:107
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
static HRESULT to_string(VARIANT *src, BSTR *dst)
Definition: host.c:46
jsstr_t * jsstr_undefined(void)
Definition: jsstr.c:296
jsstr_t * jsstr_alloc_buf(unsigned len, WCHAR **buf)
Definition: jsstr.c:69
static void jsstr_release(jsstr_t *str)
Definition: jsstr.h:107
static unsigned jsstr_length(jsstr_t *str)
Definition: jsstr.h:55
static unsigned jsstr_flush(jsstr_t *str, WCHAR *buf)
Definition: jsstr.h:145
static jsval_t jsval_string(jsstr_t *str)
Definition: jsval.h:109
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
#define argv
Definition: mplay32.c:18
short WCHAR
Definition: pedump.c:58
Definition: jsstr.h:36

Referenced by String_anchor(), String_fontcolor(), String_fontsize(), and String_link().

◆ do_attributeless_tag_format()

static HRESULT do_attributeless_tag_format ( script_ctx_t ctx,
jsval_t  vthis,
jsval_t r,
const WCHAR tagname 
)
static

Definition at line 118 of file string.c.

119{
120 unsigned tagname_len;
121 jsstr_t *str, *ret;
122 WCHAR *ptr;
124
125 hres = get_string_val(ctx, vthis, &str);
126 if(FAILED(hres))
127 return hres;
128
129 if(!r) {
131 return S_OK;
132 }
133
134 tagname_len = lstrlenW(tagname);
135
136 ret = jsstr_alloc_buf(jsstr_length(str) + 2*tagname_len + 5, &ptr);
137 if(!ret) {
139 return E_OUTOFMEMORY;
140 }
141
142 *ptr++ = '<';
143 memcpy(ptr, tagname, tagname_len*sizeof(WCHAR));
144 ptr += tagname_len;
145 *ptr++ = '>';
146
147 ptr += jsstr_flush(str, ptr);
149
150 *ptr++ = '<';
151 *ptr++ = '/';
152 memcpy(ptr, tagname, tagname_len*sizeof(WCHAR));
153 ptr += tagname_len;
154 *ptr = '>';
155
156 *r = jsval_string(ret);
157 return S_OK;
158}

Referenced by String_big(), String_blink(), String_bold(), String_fixed(), String_italics(), String_small(), String_strike(), String_sub(), and String_sup().

◆ get_string_flat_val()

static HRESULT get_string_flat_val ( script_ctx_t ctx,
jsval_t  vthis,
jsstr_t **  jsval,
const WCHAR **  val 
)
static

Definition at line 60 of file string.c.

61{
63
64 hres = get_string_val(ctx, vthis, jsval);
65 if(FAILED(hres))
66 return hres;
67
69 if(*val)
70 return S_OK;
71
73 return E_OUTOFMEMORY;
74}
GLuint GLfloat * val
Definition: glext.h:7180
static const WCHAR * jsstr_flatten(jsstr_t *str)
Definition: jsstr.h:136
uint64_t jsval
Definition: nsiface.idl:211

Referenced by String_indexOf(), String_lastIndexOf(), String_replace(), String_search(), and String_split().

◆ get_string_val()

static HRESULT get_string_val ( script_ctx_t ctx,
jsval_t  vthis,
jsstr_t **  val 
)
static

Definition at line 45 of file string.c.

46{
48
49 if(ctx->version >= SCRIPTLANGUAGEVERSION_ES5 && (is_undefined(vthis) || is_null(vthis)))
51
52 if((string = string_this(vthis))) {
53 *val = jsstr_addref(string->str);
54 return S_OK;
55 }
56
57 return to_string(ctx, vthis, val);
58}
static StringInstance * string_this(jsval_t vthis)
Definition: string.c:39
#define JS_E_OBJECT_EXPECTED
Definition: jscript.h:555
#define SCRIPTLANGUAGEVERSION_ES5
Definition: jscript.h:53
static jsstr_t * jsstr_addref(jsstr_t *str)
Definition: jsstr.h:113
static BOOL is_undefined(jsval_t v)
Definition: jsval.h:180
static BOOL is_null(jsval_t v)
Definition: jsval.h:185

Referenced by do_attribute_tag_format(), do_attributeless_tag_format(), get_string_flat_val(), String_charAt(), String_charCodeAt(), String_concat(), String_match(), String_slice(), String_substr(), String_substring(), to_lower_case(), and to_upper_case().

◆ rep_call()

static HRESULT rep_call ( script_ctx_t ctx,
jsdisp_t func,
jsstr_t jsstr,
const WCHAR str,
match_state_t match,
jsstr_t **  ret 
)
static

Definition at line 662 of file string.c.

664{
665 jsval_t *argv;
666 unsigned argc;
667 jsval_t val;
668 jsstr_t *tmp_str;
669 DWORD i;
670 HRESULT hres = S_OK;
671
672 argc = match->paren_count+3;
673 argv = calloc(argc, sizeof(*argv));
674 if(!argv)
675 return E_OUTOFMEMORY;
676
677 tmp_str = jsstr_alloc_len(match->cp-match->match_len, match->match_len);
678 if(!tmp_str)
680 argv[0] = jsval_string(tmp_str);
681
682 if(SUCCEEDED(hres)) {
683 for(i=0; i < match->paren_count; i++) {
684 if(match->parens[i].index != -1)
685 tmp_str = jsstr_substr(jsstr, match->parens[i].index, match->parens[i].length);
686 else
687 tmp_str = jsstr_empty();
688 if(!tmp_str) {
690 break;
691 }
692 argv[i+1] = jsval_string(tmp_str);
693 }
694 }
695
696 if(SUCCEEDED(hres)) {
697 argv[match->paren_count+1] = jsval_number(match->cp-str - match->match_len);
698 argv[match->paren_count+2] = jsval_string(jsstr);
699 }
700
701 if(SUCCEEDED(hres))
703
704 for(i=0; i <= match->paren_count; i++)
706 free(argv);
707
708 if(FAILED(hres))
709 return hres;
710
711 hres = to_string(ctx, val, ret);
713 return hres;
714}
#define free
Definition: debug_ros.c:5
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum func
Definition: glext.h:6028
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
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT jsdisp_call_value(jsdisp_t *jsfunc, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: dispex.c:2581
jsstr_t * jsstr_alloc_len(const WCHAR *buf, unsigned len)
Definition: jsstr.c:86
static jsstr_t * jsstr_substr(jsstr_t *str, unsigned off, unsigned len)
Definition: jsstr.h:160
void jsval_release(jsval_t val)
Definition: jsutils.c:186
static jsval_t jsval_undefined(void)
Definition: jsval.h:146
static jsstr_t * get_string(jsval_t v)
Definition: jsval.h:238
static jsval_t jsval_number(double n)
Definition: jsval.h:153
#define DISPATCH_METHOD
Definition: oleauto.h:1006
#define calloc
Definition: rosglue.h:14
Definition: jsval.h:54
Definition: match.c:28

Referenced by String_replace().

◆ strbuf_append()

static HRESULT strbuf_append ( strbuf_t buf,
const WCHAR str,
DWORD  len 
)
static

Definition at line 639 of file string.c.

640{
641 if(!len)
642 return S_OK;
643
644 if(!strbuf_ensure_size(buf, buf->len+len))
645 return E_OUTOFMEMORY;
646
647 memcpy(buf->buf+buf->len, str, len*sizeof(WCHAR));
648 buf->len += len;
649 return S_OK;
650}
static BOOL strbuf_ensure_size(strbuf_t *buf, unsigned len)
Definition: string.c:619
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLenum GLsizei len
Definition: glext.h:6722

Referenced by String_replace().

◆ strbuf_append_jsstr()

static HRESULT strbuf_append_jsstr ( strbuf_t buf,
jsstr_t str 
)
static

Definition at line 652 of file string.c.

653{
655 return E_OUTOFMEMORY;
656
657 jsstr_flush(str, buf->buf+buf->len);
658 buf->len += jsstr_length(str);
659 return S_OK;
660}

Referenced by String_replace().

◆ strbuf_ensure_size()

static BOOL strbuf_ensure_size ( strbuf_t buf,
unsigned  len 
)
static

Definition at line 619 of file string.c.

620{
621 WCHAR *new_buf;
623
624 if(len <= buf->size)
625 return TRUE;
626
627 new_size = buf->size ? buf->size<<1 : 16;
628 if(new_size < len)
629 new_size = len;
630 new_buf = realloc(buf->buf, new_size * sizeof(WCHAR));
631 if(!new_buf)
632 return FALSE;
633
634 buf->buf = new_buf;
635 buf->size = new_size;
636 return TRUE;
637}
#define realloc
Definition: debug_ros.c:6
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
size_t const new_size
Definition: expand.cpp:66
GLsizeiptr size
Definition: glext.h:5919

Referenced by strbuf_append(), and strbuf_append_jsstr().

◆ string_alloc()

static HRESULT string_alloc ( script_ctx_t ctx,
jsdisp_t object_prototype,
jsstr_t str,
StringInstance **  ret 
)
static

Definition at line 1686 of file string.c.

1687{
1689 HRESULT hres;
1690
1691 string = calloc(1, sizeof(StringInstance));
1692 if(!string)
1693 return E_OUTOFMEMORY;
1694
1695 if(object_prototype)
1696 hres = init_dispex(&string->dispex, ctx, &String_info, object_prototype);
1697 else
1698 hres = init_dispex_from_constr(&string->dispex, ctx, &StringInst_info, ctx->string_constr);
1699 if(FAILED(hres)) {
1700 free(string);
1701 return hres;
1702 }
1703
1704 string->str = jsstr_addref(str);
1705 *ret = string;
1706 return S_OK;
1707}
static const builtin_info_t StringInst_info
Definition: string.c:1593
static const builtin_info_t String_info
Definition: string.c:1582
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

Referenced by create_string(), and create_string_constr().

◆ String_anchor()

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

Definition at line 218 of file string.c.

220{
221 return do_attribute_tag_format(ctx, vthis, argc, argv, r, L"A", L"NAME");
222}
static HRESULT do_attribute_tag_format(script_ctx_t *ctx, jsval_t vthis, unsigned argc, jsval_t *argv, jsval_t *r, const WCHAR *tagname, const WCHAR *attrname)
Definition: string.c:160

◆ String_big()

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

Definition at line 224 of file string.c.

226{
227 return do_attributeless_tag_format(ctx, vthis, r, L"BIG");
228}
static HRESULT do_attributeless_tag_format(script_ctx_t *ctx, jsval_t vthis, jsval_t *r, const WCHAR *tagname)
Definition: string.c:118

◆ String_blink()

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

Definition at line 230 of file string.c.

232{
233 return do_attributeless_tag_format(ctx, vthis, r, L"BLINK");
234}

◆ String_bold()

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

Definition at line 236 of file string.c.

238{
239 return do_attributeless_tag_format(ctx, vthis, r, L"B");
240}

◆ String_charAt()

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

Definition at line 243 of file string.c.

245{
246 jsstr_t *str, *ret;
247 INT pos = 0;
249
250 TRACE("\n");
251
252 hres = get_string_val(ctx, vthis, &str);
253 if(FAILED(hres))
254 return hres;
255
256 if(argc) {
257 double d;
258
259 hres = to_integer(ctx, argv[0], &d);
260 if(FAILED(hres)) {
262 return hres;
263 }
264 pos = is_int32(d) ? d : -1;
265 }
266
267 if(!r) {
269 return S_OK;
270 }
271
272 if(0 <= pos && pos < jsstr_length(str)) {
273 ret = jsstr_substr(str, pos, 1);
274 if(!ret)
275 return E_OUTOFMEMORY;
276 }else {
277 ret = jsstr_empty();
278 }
279
280 *r = jsval_string(ret);
281 return S_OK;
282}
static BOOL is_int32(double d)
Definition: jscript.h:508
HRESULT to_integer(script_ctx_t *, jsval_t, double *)
Definition: jsutils.c:676
#define d
Definition: ke_i.h:81
#define TRACE(s)
Definition: solgame.cpp:4
int32_t INT
Definition: typedefs.h:58

◆ String_charCodeAt()

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

Definition at line 285 of file string.c.

287{
288 jsstr_t *str;
289 DWORD idx = 0;
291
292 TRACE("\n");
293
294 hres = get_string_val(ctx, vthis, &str);
295 if(FAILED(hres))
296 return hres;
297
298 if(argc > 0) {
299 double d;
300
301 hres = to_integer(ctx, argv[0], &d);
302 if(FAILED(hres)) {
304 return hres;
305 }
306
307 if(!is_int32(d) || d < 0 || d >= jsstr_length(str)) {
309 if(r)
310 *r = jsval_number(NAN);
311 return S_OK;
312 }
313
314 idx = d;
315 }
316
317 if(r) {
318 WCHAR c;
319 jsstr_extract(str, idx, 1, &c);
320 *r = jsval_number(c);
321 }
322
324 return S_OK;
325}
unsigned int idx
Definition: utils.c:41
#define NAN
Definition: math.h:273
const GLubyte * c
Definition: glext.h:8905
void jsstr_extract(jsstr_t *str, unsigned off, unsigned len, WCHAR *buf)
Definition: jsstr.c:113
#define c
Definition: ke_i.h:80

◆ String_concat()

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

Definition at line 328 of file string.c.

330{
331 jsstr_t *ret = NULL, *str;
333
334 TRACE("\n");
335
336 hres = get_string_val(ctx, vthis, &str);
337 if(FAILED(hres))
338 return hres;
339
340 switch(argc) {
341 case 0:
342 ret = str;
343 break;
344 case 1: {
345 jsstr_t *arg_str;
346
347 hres = to_string(ctx, argv[0], &arg_str);
348 if(FAILED(hres)) {
350 return hres;
351 }
352
353 ret = jsstr_concat(str, arg_str);
355 if(!ret)
356 return E_OUTOFMEMORY;
357 break;
358 }
359 default: {
360 const unsigned str_cnt = argc+1;
361 unsigned len = 0, i;
362 jsstr_t **strs;
363 WCHAR *ptr;
364
365 strs = calloc(str_cnt, sizeof(*strs));
366 if(!strs) {
368 return E_OUTOFMEMORY;
369 }
370
371 strs[0] = str;
372 for(i=0; i < argc; i++) {
373 hres = to_string(ctx, argv[i], strs+i+1);
374 if(FAILED(hres))
375 break;
376 }
377
378 if(SUCCEEDED(hres)) {
379 for(i=0; i < str_cnt; i++) {
380 len += jsstr_length(strs[i]);
381 if(len > JSSTR_MAX_LENGTH) {
383 break;
384 }
385 }
386
387 if(SUCCEEDED(hres)) {
389 if(ret) {
390 for(i=0; i < str_cnt; i++)
391 ptr += jsstr_flush(strs[i], ptr);
392 }else {
394 }
395 }
396 }
397
398 while(i--)
399 jsstr_release(strs[i]);
400 free(strs);
401 if(FAILED(hres))
402 return hres;
403 }
404 }
405
406 if(r)
407 *r = jsval_string(ret);
408 else
410 return S_OK;
411}
jsstr_t * jsstr_concat(jsstr_t *str1, jsstr_t *str2)
Definition: jsstr.c:214
#define JSSTR_MAX_LENGTH
Definition: jsstr.h:42

◆ String_destructor()

static void String_destructor ( jsdisp_t dispex)
static

Definition at line 1497 of file string.c.

1498{
1500
1501 jsstr_release(This->str);
1502}
static StringInstance * string_from_jsdisp(jsdisp_t *jsdisp)
Definition: string.c:34

◆ String_fixed()

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

Definition at line 413 of file string.c.

415{
416 return do_attributeless_tag_format(ctx, vthis, r, L"TT");
417}

◆ String_fontcolor()

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

Definition at line 419 of file string.c.

421{
422 return do_attribute_tag_format(ctx, vthis, argc, argv, r, L"FONT", L"COLOR");
423}

◆ String_fontsize()

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

Definition at line 425 of file string.c.

427{
428 return do_attribute_tag_format(ctx, vthis, argc, argv, r, L"FONT", L"SIZE");
429}

◆ string_from_jsdisp()

static StringInstance * string_from_jsdisp ( jsdisp_t jsdisp)
inlinestatic

Definition at line 34 of file string.c.

35{
36 return CONTAINING_RECORD(jsdisp, StringInstance, dispex);
37}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by String_destructor(), String_get_length(), String_lookup_prop(), String_next_prop(), String_prop_get(), and string_this().

◆ String_get_length()

static HRESULT String_get_length ( script_ctx_t ctx,
jsdisp_t jsthis,
jsval_t r 
)
static

Definition at line 76 of file string.c.

77{
78 StringInstance *string = string_from_jsdisp(jsthis);
79
80 TRACE("%p\n", jsthis);
81
83 return S_OK;
84}

◆ String_indexOf()

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

Definition at line 431 of file string.c.

433{
434 unsigned pos = 0, search_len, length;
435 jsstr_t *search_jsstr, *jsstr;
436 const WCHAR *search_str, *str;
437 INT ret = -1;
439
440 TRACE("\n");
441
442 hres = get_string_flat_val(ctx, vthis, &jsstr, &str);
443 if(FAILED(hres))
444 return hres;
445
446 if(!argc) {
447 if(r)
448 *r = jsval_number(-1);
449 jsstr_release(jsstr);
450 return S_OK;
451 }
452
453 hres = to_flat_string(ctx, argv[0], &search_jsstr, &search_str);
454 if(FAILED(hres)) {
455 jsstr_release(jsstr);
456 return hres;
457 }
458
459 search_len = jsstr_length(search_jsstr);
460 length = jsstr_length(jsstr);
461
462 if(argc >= 2) {
463 double d;
464
465 hres = to_integer(ctx, argv[1], &d);
466 if(SUCCEEDED(hres) && d > 0.0)
467 pos = is_int32(d) ? min(length, d) : length;
468 }
469
470 if(SUCCEEDED(hres) && length >= search_len) {
471 const WCHAR *end = str+length-search_len;
472 const WCHAR *ptr;
473
474 for(ptr = str+pos; ptr <= end; ptr++) {
475 if(!memcmp(ptr, search_str, search_len*sizeof(WCHAR))) {
476 ret = ptr-str;
477 break;
478 }
479 }
480 }
481
482 jsstr_release(search_jsstr);
483 jsstr_release(jsstr);
484 if(FAILED(hres))
485 return hres;
486
487 if(r)
488 *r = jsval_number(ret);
489 return S_OK;
490}
static HRESULT get_string_flat_val(script_ctx_t *ctx, jsval_t vthis, jsstr_t **jsval, const WCHAR **val)
Definition: string.c:60
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
GLuint GLuint end
Definition: gl.h:1545
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
HRESULT to_flat_string(script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **)
Definition: jsutils.c:846
#define min(a, b)
Definition: monoChain.cc:55

◆ String_italics()

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

Definition at line 492 of file string.c.

494{
495 return do_attributeless_tag_format(ctx, vthis, r, L"I");
496}

◆ String_lastIndexOf()

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

Definition at line 499 of file string.c.

501{
502 unsigned pos = 0, search_len, length;
503 jsstr_t *search_jsstr, *jsstr;
504 const WCHAR *search_str, *str;
505 INT ret = -1;
507
508 TRACE("\n");
509
510 hres = get_string_flat_val(ctx, vthis, &jsstr, &str);
511 if(FAILED(hres))
512 return hres;
513
514 if(!argc) {
515 if(r)
516 *r = jsval_number(-1);
517 jsstr_release(jsstr);
518 return S_OK;
519 }
520
521 hres = to_flat_string(ctx, argv[0], &search_jsstr, &search_str);
522 if(FAILED(hres)) {
523 jsstr_release(jsstr);
524 return hres;
525 }
526
527 search_len = jsstr_length(search_jsstr);
528 length = jsstr_length(jsstr);
529
530 if(argc >= 2) {
531 double d;
532
533 hres = to_integer(ctx, argv[1], &d);
534 if(SUCCEEDED(hres) && d > 0)
535 pos = is_int32(d) ? min(length, d) : length;
536 }else {
537 pos = length;
538 }
539
540 if(SUCCEEDED(hres) && length >= search_len) {
541 const WCHAR *ptr;
542
543 for(ptr = str+min(pos, length-search_len); ptr >= str; ptr--) {
544 if(!memcmp(ptr, search_str, search_len*sizeof(WCHAR))) {
545 ret = ptr-str;
546 break;
547 }
548 }
549 }
550
551 jsstr_release(search_jsstr);
552 jsstr_release(jsstr);
553 if(FAILED(hres))
554 return hres;
555
556 if(r)
557 *r = jsval_number(ret);
558 return S_OK;
559}

◆ String_link()

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

Definition at line 561 of file string.c.

563{
564 return do_attribute_tag_format(ctx, vthis, argc, argv, r, L"A", L"HREF");
565}

◆ String_localeCompare()

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

Definition at line 1490 of file string.c.

1492{
1493 FIXME("\n");
1494 return E_NOTIMPL;
1495}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ String_lookup_prop()

static HRESULT String_lookup_prop ( jsdisp_t jsdisp,
const WCHAR name,
unsigned  flags,
struct property_info desc 
)
static

Definition at line 1504 of file string.c.

1505{
1506 StringInstance *string = string_from_jsdisp(jsdisp);
1507
1508 /*
1509 * NOTE: For invoke version < 2, indexed array is not implemented at all.
1510 * Newer jscript.dll versions implement it on string type, not class,
1511 * which is not how it should work according to spec. IE9+ implements it
1512 * properly.
1513 */
1514 if(string->dispex.ctx->version < 2)
1515 return DISP_E_UNKNOWNNAME;
1516
1517 return jsdisp_index_lookup(&string->dispex, name, jsstr_length(string->str), desc);
1518}
HRESULT jsdisp_index_lookup(jsdisp_t *obj, const WCHAR *name, unsigned length, struct property_info *desc)
Definition: dispex.c:481
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1204
Definition: name.c:39
#define DISP_E_UNKNOWNNAME
Definition: winerror.h:3618

◆ String_match()

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

Definition at line 568 of file string.c.

570{
571 jsdisp_t *regexp = NULL;
572 jsstr_t *str;
574
575 TRACE("\n");
576
577 if(!argc) {
578 if(r)
579 *r = jsval_null();
580 return S_OK;
581 }
582
583 if(is_object_instance(argv[0])) {
584 regexp = iface_to_jsdisp(get_object(argv[0]));
585 if(regexp && !is_class(regexp, JSCLASS_REGEXP)) {
586 jsdisp_release(regexp);
587 regexp = NULL;
588 }
589 }
590
591 if(!regexp) {
592 jsstr_t *match_str;
593
594 hres = to_string(ctx, argv[0], &match_str);
595 if(FAILED(hres))
596 return hres;
597
598 hres = create_regexp(ctx, match_str, 0, &regexp);
599 jsstr_release(match_str);
600 if(FAILED(hres))
601 return hres;
602 }
603
604 hres = get_string_val(ctx, vthis, &str);
605 if(SUCCEEDED(hres))
606 hres = regexp_string_match(ctx, regexp, str, r);
607
608 jsdisp_release(regexp);
610 return hres;
611}
jsdisp_t * iface_to_jsdisp(IDispatch *iface)
Definition: dispex.c:2543
HRESULT regexp_string_match(script_ctx_t *, jsdisp_t *, jsstr_t *, jsval_t *)
Definition: jsregexp.c:701
HRESULT create_regexp(script_ctx_t *, jsstr_t *, DWORD, jsdisp_t **)
Definition: jsregexp.c:626
@ JSCLASS_REGEXP
Definition: jscript.h:114
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
Definition: jscript.h:503
static jsval_t jsval_null(void)
Definition: jsval.h:130
static IDispatch * get_object(jsval_t v)
Definition: jsval.h:228
static BOOL is_object_instance(jsval_t v)
Definition: jsval.h:175

◆ String_next_prop()

static HRESULT String_next_prop ( jsdisp_t jsdisp,
unsigned  id,
struct property_info desc 
)
static

Definition at line 1520 of file string.c.

1521{
1522 StringInstance *string = string_from_jsdisp(jsdisp);
1523
1524 if(string->dispex.ctx->version < 2)
1525 return S_FALSE;
1526
1527 return jsdisp_next_index(&string->dispex, jsstr_length(string->str), id, desc);
1528}
HRESULT jsdisp_next_index(jsdisp_t *obj, unsigned length, unsigned id, struct property_info *desc)
Definition: dispex.c:504
#define S_FALSE
Definition: winerror.h:3451

◆ String_prop_get()

static HRESULT String_prop_get ( jsdisp_t jsdisp,
unsigned  idx,
jsval_t r 
)
static

Definition at line 1530 of file string.c.

1531{
1532 StringInstance *string = string_from_jsdisp(jsdisp);
1533 jsstr_t *ret;
1534
1535 ret = jsstr_substr(string->str, idx, 1);
1536 if(!ret)
1537 return E_OUTOFMEMORY;
1538
1539 TRACE("%p[%u] = %s\n", string, idx, debugstr_jsstr(ret));
1540
1541 *r = jsval_string(ret);
1542 return S_OK;
1543}
const char * debugstr_jsstr(jsstr_t *str)
Definition: jsstr.c:37

◆ String_replace()

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

Definition at line 717 of file string.c.

719{
720 const WCHAR *str, *match_str = NULL, *rep_str = NULL;
721 jsstr_t *rep_jsstr, *match_jsstr, *jsstr;
722 jsdisp_t *rep_func = NULL, *regexp = NULL;
723 match_state_t *match = NULL, last_match = {0};
724 strbuf_t ret = {NULL,0,0};
726 DWORD rep_len=0;
727 HRESULT hres = S_OK;
728
729 TRACE("\n");
730
731 hres = get_string_flat_val(ctx, vthis, &jsstr, &str);
732 if(FAILED(hres))
733 return hres;
734
735 if(!argc) {
736 if(r)
737 *r = jsval_string(jsstr);
738 else
739 jsstr_release(jsstr);
740 return S_OK;
741 }
742
743 if(is_object_instance(argv[0])) {
744 regexp = iface_to_jsdisp(get_object(argv[0]));
745 if(regexp && !is_class(regexp, JSCLASS_REGEXP)) {
746 jsdisp_release(regexp);
747 regexp = NULL;
748 }
749 }
750
751 if(!regexp) {
752 hres = to_flat_string(ctx, argv[0], &match_jsstr, &match_str);
753 if(FAILED(hres)) {
754 jsstr_release(jsstr);
755 return hres;
756 }
757 }
758
759 if(argc >= 2) {
760 if(is_object_instance(argv[1])) {
761 rep_func = iface_to_jsdisp(get_object(argv[1]));
762 if(rep_func && !is_class(rep_func, JSCLASS_FUNCTION)) {
763 jsdisp_release(rep_func);
764 rep_func = NULL;
765 }
766 }
767
768 if(!rep_func) {
769 hres = to_flat_string(ctx, argv[1], &rep_jsstr, &rep_str);
770 if(SUCCEEDED(hres))
771 rep_len = jsstr_length(rep_jsstr);
772 }
773 }
774
775 if(SUCCEEDED(hres)) {
776 const WCHAR *ecp = str;
777
778 while(1) {
779 if(regexp) {
780 hres = regexp_match_next(ctx, regexp, re_flags, jsstr, &match);
781 re_flags = (re_flags | REM_CHECK_GLOBAL) & (~REM_ALLOC_RESULT);
782
783 if(hres == S_FALSE) {
784 hres = S_OK;
785 break;
786 }
787 if(FAILED(hres))
788 break;
789
790 last_match.cp = match->cp;
791 last_match.match_len = match->match_len;
792 }else {
793 if(re_flags & REM_ALLOC_RESULT) {
794 re_flags &= ~REM_ALLOC_RESULT;
795 match = &last_match;
796 match->cp = str;
797 }
798
799 match->cp = wcsstr(match->cp, match_str);
800 if(!match->cp)
801 break;
802 match->match_len = jsstr_length(match_jsstr);
803 match->cp += match->match_len;
804 }
805
806 hres = strbuf_append(&ret, ecp, match->cp-ecp-match->match_len);
807 ecp = match->cp;
808 if(FAILED(hres))
809 break;
810
811 if(rep_func) {
812 jsstr_t *cstr;
813
814 hres = rep_call(ctx, rep_func, jsstr, str, match, &cstr);
815 if(FAILED(hres))
816 break;
817
818 hres = strbuf_append_jsstr(&ret, cstr);
819 jsstr_release(cstr);
820 if(FAILED(hres))
821 break;
822 }else if(rep_str && regexp) {
823 const WCHAR *ptr = rep_str, *ptr2;
824
825 while((ptr2 = wcschr(ptr, '$'))) {
826 hres = strbuf_append(&ret, ptr, ptr2-ptr);
827 if(FAILED(hres))
828 break;
829
830 switch(ptr2[1]) {
831 case '$':
832 hres = strbuf_append(&ret, ptr2, 1);
833 ptr = ptr2+2;
834 break;
835 case '&':
836 hres = strbuf_append(&ret, match->cp-match->match_len, match->match_len);
837 ptr = ptr2+2;
838 break;
839 case '`':
840 hres = strbuf_append(&ret, str, match->cp-str-match->match_len);
841 ptr = ptr2+2;
842 break;
843 case '\'':
844 hres = strbuf_append(&ret, ecp, (str+jsstr_length(jsstr))-ecp);
845 ptr = ptr2+2;
846 break;
847 default: {
848 DWORD idx;
849
850 if(!is_digit(ptr2[1])) {
851 hres = strbuf_append(&ret, ptr2, 1);
852 ptr = ptr2+1;
853 break;
854 }
855
856 idx = ptr2[1] - '0';
857 if(is_digit(ptr2[2]) && idx*10 + (ptr2[2]-'0') <= match->paren_count) {
858 idx = idx*10 + (ptr[2]-'0');
859 ptr = ptr2+3;
860 }else if(idx && idx <= match->paren_count) {
861 ptr = ptr2+2;
862 }else {
863 hres = strbuf_append(&ret, ptr2, 1);
864 ptr = ptr2+1;
865 break;
866 }
867
868 if(match->parens[idx-1].index != -1)
869 hres = strbuf_append(&ret, str+match->parens[idx-1].index,
870 match->parens[idx-1].length);
871 }
872 }
873
874 if(FAILED(hres))
875 break;
876 }
877
878 if(SUCCEEDED(hres))
879 hres = strbuf_append(&ret, ptr, (rep_str+rep_len)-ptr);
880 if(FAILED(hres))
881 break;
882 }else if(rep_str) {
883 hres = strbuf_append(&ret, rep_str, rep_len);
884 if(FAILED(hres))
885 break;
886 }else {
887 hres = strbuf_append(&ret, L"undefined", ARRAY_SIZE(L"undefined")-1);
888 if(FAILED(hres))
889 break;
890 }
891
892 if(!regexp)
893 break;
894 else if(!match->match_len)
895 match->cp++;
896 }
897
898 if(SUCCEEDED(hres))
899 hres = strbuf_append(&ret, ecp, str+jsstr_length(jsstr)-ecp);
900 }
901
902 if(rep_func)
903 jsdisp_release(rep_func);
904 if(rep_str)
905 jsstr_release(rep_jsstr);
906 if(match_str)
907 jsstr_release(match_jsstr);
908 if(regexp)
909 free(match);
910
911 if(SUCCEEDED(hres) && last_match.cp && regexp) {
912 jsstr_release(ctx->last_match);
913 ctx->last_match = jsstr_addref(jsstr);
914 ctx->last_match_index = last_match.cp-str-last_match.match_len;
915 ctx->last_match_length = last_match.match_len;
916 }
917
918 if(regexp)
919 jsdisp_release(regexp);
920 jsstr_release(jsstr);
921
922 if(SUCCEEDED(hres) && r) {
923 jsstr_t *ret_str;
924
925 ret_str = jsstr_alloc_len(ret.buf, ret.len);
926 if(!ret_str) {
927 free(ret.buf);
928 return E_OUTOFMEMORY;
929 }
930
931 TRACE("= %s\n", debugstr_jsstr(ret_str));
932 *r = jsval_string(ret_str);
933 }
934
935 free(ret.buf);
936 return hres;
937}
#define is_digit(c)
Definition: astoll.c:39
#define ARRAY_SIZE(A)
Definition: main.h:20
#define wcschr
Definition: compat.h:17
static HRESULT rep_call(script_ctx_t *ctx, jsdisp_t *func, jsstr_t *jsstr, const WCHAR *str, match_state_t *match, jsstr_t **ret)
Definition: string.c:662
static HRESULT strbuf_append_jsstr(strbuf_t *buf, jsstr_t *str)
Definition: string.c:652
static HRESULT strbuf_append(strbuf_t *buf, const WCHAR *str, DWORD len)
Definition: string.c:639
_ACRTIMP wchar_t *__cdecl wcsstr(const wchar_t *, const wchar_t *)
Definition: wcs.c:2998
#define REM_CHECK_GLOBAL
Definition: jscript.h:483
#define REM_NO_CTX_UPDATE
Definition: jscript.h:485
HRESULT regexp_match_next(script_ctx_t *, jsdisp_t *, DWORD, jsstr_t *, struct match_state_t **)
Definition: jsregexp.c:102
#define REM_ALLOC_RESULT
Definition: jscript.h:486
@ JSCLASS_FUNCTION
Definition: jscript.h:109

◆ String_search()

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

Definition at line 939 of file string.c.

941{
942 jsdisp_t *regexp = NULL;
943 const WCHAR *str;
944 jsstr_t *jsstr;
945 match_state_t match, *match_ptr = &match;
947
948 TRACE("\n");
949
950 hres = get_string_flat_val(ctx, vthis, &jsstr, &str);
951 if(FAILED(hres))
952 return hres;
953
954 if(!argc) {
955 if(r)
956 *r = jsval_null();
957 jsstr_release(jsstr);
958 return S_OK;
959 }
960
961 if(is_object_instance(argv[0])) {
962 regexp = iface_to_jsdisp(get_object(argv[0]));
963 if(regexp && !is_class(regexp, JSCLASS_REGEXP)) {
964 jsdisp_release(regexp);
965 regexp = NULL;
966 }
967 }
968
969 if(!regexp) {
970 hres = create_regexp_var(ctx, argv[0], NULL, &regexp);
971 if(FAILED(hres)) {
972 jsstr_release(jsstr);
973 return hres;
974 }
975 }
976
977 match.cp = str;
978 hres = regexp_match_next(ctx, regexp, REM_RESET_INDEX|REM_NO_PARENS, jsstr, &match_ptr);
979 jsstr_release(jsstr);
980 jsdisp_release(regexp);
981 if(FAILED(hres))
982 return hres;
983
984 if(r)
985 *r = jsval_number(hres == S_OK ? match.cp-match.match_len-str : -1);
986 return S_OK;
987}
#define REM_RESET_INDEX
Definition: jscript.h:484
HRESULT create_regexp_var(script_ctx_t *, jsval_t, jsval_t *, jsdisp_t **)
Definition: jsregexp.c:653
#define REM_NO_PARENS
Definition: jscript.h:487

◆ String_slice()

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

Definition at line 990 of file string.c.

992{
993 int start=0, end, length;
994 jsstr_t *str;
995 double d;
997
998 TRACE("\n");
999
1000 hres = get_string_val(ctx, vthis, &str);
1001 if(FAILED(hres))
1002 return hres;
1003
1005 if(argc) {
1006 hres = to_integer(ctx, argv[0], &d);
1007 if(FAILED(hres)) {
1009 return hres;
1010 }
1011
1012 if(is_int32(d)) {
1013 start = d;
1014 if(start < 0) {
1015 start = length + start;
1016 if(start < 0)
1017 start = 0;
1018 }else if(start > length) {
1019 start = length;
1020 }
1021 }else if(d > 0) {
1022 start = length;
1023 }
1024 }
1025
1026 if(argc >= 2) {
1027 hres = to_integer(ctx, argv[1], &d);
1028 if(FAILED(hres)) {
1030 return hres;
1031 }
1032
1033 if(is_int32(d)) {
1034 end = d;
1035 if(end < 0) {
1036 end = length + end;
1037 if(end < 0)
1038 end = 0;
1039 }else if(end > length) {
1040 end = length;
1041 }
1042 }else {
1043 end = d < 0.0 ? 0 : length;
1044 }
1045 }else {
1046 end = length;
1047 }
1048
1049 if(end < start)
1050 end = start;
1051
1052 if(r) {
1053 jsstr_t *retstr = jsstr_substr(str, start, end-start);
1054 if(!retstr) {
1056 return E_OUTOFMEMORY;
1057 }
1058
1059 *r = jsval_string(retstr);
1060 }
1061
1063 return S_OK;
1064}
GLuint start
Definition: gl.h:1545

◆ String_small()

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

Definition at line 1066 of file string.c.

1068{
1069 return do_attributeless_tag_format(ctx, vthis, r, L"SMALL");
1070}

◆ String_split()

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

Definition at line 1072 of file string.c.

1074{
1075 match_state_t match_result, *match_ptr = &match_result;
1076 size_t length, i = 0, match_len = 0;
1077 const WCHAR *ptr, *ptr2, *str, *match_str = NULL;
1078 unsigned limit = ~0u;
1079 jsdisp_t *array, *regexp = NULL;
1080 jsstr_t *jsstr, *match_jsstr, *tmp_str;
1081 HRESULT hres;
1082
1083 hres = get_string_flat_val(ctx, vthis, &jsstr, &str);
1084 if(FAILED(hres))
1085 return hres;
1086 length = jsstr_length(jsstr);
1087
1088 TRACE("%s\n", debugstr_wn(str, length));
1089
1090 if(!argc || (is_undefined(argv[0]) && ctx->version >= SCRIPTLANGUAGEVERSION_ES5)) {
1091 if(!r)
1092 return S_OK;
1093
1094 hres = create_array(ctx, 0, &array);
1095 if(FAILED(hres))
1096 return hres;
1097
1098 /* NOTE: according to spec, we should respect limit argument here (if provided).
1099 * We have a test showing that it's broken in native IE. */
1101 if(FAILED(hres)) {
1103 return hres;
1104 }
1105
1106 *r = jsval_obj(array);
1107 return S_OK;
1108 }
1109
1110 if(argc > 1 && !is_undefined(argv[1])) {
1111 hres = to_uint32(ctx, argv[1], &limit);
1112 if(FAILED(hres)) {
1113 jsstr_release(jsstr);
1114 return hres;
1115 }
1116 }
1117
1118 if(is_object_instance(argv[0])) {
1119 regexp = iface_to_jsdisp(get_object(argv[0]));
1120 if(regexp) {
1121 if(!is_class(regexp, JSCLASS_REGEXP)) {
1122 jsdisp_release(regexp);
1123 regexp = NULL;
1124 }
1125 }
1126 }
1127
1128 if(!regexp) {
1129 hres = to_flat_string(ctx, argv[0], &match_jsstr, &match_str);
1130 if(FAILED(hres)) {
1131 jsstr_release(jsstr);
1132 return hres;
1133 }
1134
1135 match_len = jsstr_length(match_jsstr);
1136 if(!match_len) {
1137 jsstr_release(match_jsstr);
1138 match_str = NULL;
1139 }
1140 }
1141
1142 hres = create_array(ctx, 0, &array);
1143
1144 if(SUCCEEDED(hres)) {
1145 ptr = str;
1146 match_result.cp = str;
1147 while(i < limit) {
1148 if(regexp) {
1149 hres = regexp_match_next(ctx, regexp, REM_NO_PARENS, jsstr, &match_ptr);
1150 if(hres != S_OK)
1151 break;
1152 TRACE("got match %d %ld\n", (int)(match_result.cp - match_result.match_len - str), match_result.match_len);
1153 if(!match_result.match_len) {
1154 /* If an empty string is matched, prevent including any match in the result */
1155 if(!length) {
1156 limit = 0;
1157 break;
1158 }
1159 if(match_result.cp == ptr) {
1160 match_result.cp++;
1161 hres = regexp_match_next(ctx, regexp, REM_NO_PARENS, jsstr, &match_ptr);
1162 if(hres != S_OK)
1163 break;
1164 TRACE("retried, got match %d %ld\n", (int)(match_result.cp - match_result.match_len - str),
1165 match_result.match_len);
1166 }
1167 if(!match_result.match_len && match_result.cp == str + length)
1168 break;
1169 }
1170 ptr2 = match_result.cp - match_result.match_len;
1171 }else if(match_str) {
1172 ptr2 = wcsstr(ptr, match_str);
1173 if(!ptr2)
1174 break;
1175 }else {
1176 if(!*ptr)
1177 break;
1178 ptr2 = ptr+1;
1179 }
1180
1181 if(!regexp || ptr2 > ptr || ctx->version >= SCRIPTLANGUAGEVERSION_ES5) {
1182 tmp_str = jsstr_alloc_len(ptr, ptr2-ptr);
1183 if(!tmp_str) {
1185 break;
1186 }
1187
1188 hres = jsdisp_propput_idx(array, i++, jsval_string(tmp_str));
1189 jsstr_release(tmp_str);
1190 if(FAILED(hres))
1191 break;
1192 }
1193
1194 if(regexp)
1195 ptr = match_result.cp;
1196 else if(match_str)
1197 ptr = ptr2 + match_len;
1198 else
1199 ptr++;
1200 }
1201 }
1202
1203 if(SUCCEEDED(hres) && (match_str || regexp) && i<limit) {
1204 DWORD len = (str+length) - ptr;
1205
1206 if(len || match_str || !length || ctx->version >= SCRIPTLANGUAGEVERSION_ES5) {
1207 tmp_str = jsstr_alloc_len(ptr, len);
1208
1209 if(tmp_str) {
1211 jsstr_release(tmp_str);
1212 }else {
1214 }
1215 }
1216 }
1217
1218 if(regexp)
1219 jsdisp_release(regexp);
1220 if(match_str)
1221 jsstr_release(match_jsstr);
1222 jsstr_release(jsstr);
1223
1224 if(SUCCEEDED(hres) && r)
1225 *r = jsval_obj(array);
1226 else
1228
1229 return hres;
1230}
HRESULT create_array(script_ctx_t *ctx, DWORD length, jsdisp_t **ret)
Definition: array.c:1780
GLint limit
Definition: glext.h:10326
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 * u
Definition: glfuncs.h:240
HRESULT jsdisp_propput_idx(jsdisp_t *obj, DWORD idx, jsval_t val)
Definition: dispex.c:2864
HRESULT to_uint32(script_ctx_t *, jsval_t, UINT32 *)
Definition: jsutils.c:754
static jsval_t jsval_obj(jsdisp_t *obj)
Definition: jsval.h:125
#define debugstr_wn
Definition: kernel32.h:33
Definition: undname.c:54
DWORD match_len
Definition: regexp.h:48
const WCHAR * cp
Definition: regexp.h:47

◆ String_strike()

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

Definition at line 1232 of file string.c.

1234{
1235 return do_attributeless_tag_format(ctx, vthis, r, L"STRIKE");
1236}

◆ String_sub()

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

Definition at line 1238 of file string.c.

1240{
1241 return do_attributeless_tag_format(ctx, vthis, r, L"SUB");
1242}

◆ String_substr()

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

Definition at line 1304 of file string.c.

1306{
1307 int start=0, len, length;
1308 jsstr_t *str;
1309 double d;
1310 HRESULT hres;
1311
1312 TRACE("\n");
1313
1314 hres = get_string_val(ctx, vthis, &str);
1315 if(FAILED(hres))
1316 return hres;
1317
1319 if(argc >= 1) {
1320 hres = to_integer(ctx, argv[0], &d);
1321 if(FAILED(hres)) {
1323 return hres;
1324 }
1325
1326 if(d >= 0)
1327 start = is_int32(d) ? min(length, d) : length;
1328 }
1329
1330 if(argc >= 2) {
1331 hres = to_integer(ctx, argv[1], &d);
1332 if(FAILED(hres)) {
1334 return hres;
1335 }
1336
1337 if(d >= 0.0)
1339 else
1340 len = 0;
1341 }else {
1342 len = length-start;
1343 }
1344
1345 hres = S_OK;
1346 if(r) {
1348 if(ret)
1349 *r = jsval_string(ret);
1350 else
1352 }
1353
1355 return hres;
1356}

◆ String_substring()

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

Definition at line 1245 of file string.c.

1247{
1248 INT start=0, end, length;
1249 jsstr_t *str;
1250 double d;
1251 HRESULT hres;
1252
1253 TRACE("\n");
1254
1255 hres = get_string_val(ctx, vthis, &str);
1256 if(FAILED(hres))
1257 return hres;
1258
1260 if(argc >= 1) {
1261 hres = to_integer(ctx, argv[0], &d);
1262 if(FAILED(hres)) {
1264 return hres;
1265 }
1266
1267 if(d >= 0)
1268 start = is_int32(d) ? min(length, d) : length;
1269 }
1270
1271 if(argc >= 2) {
1272 hres = to_integer(ctx, argv[1], &d);
1273 if(FAILED(hres)) {
1275 return hres;
1276 }
1277
1278 if(d >= 0)
1279 end = is_int32(d) ? min(length, d) : length;
1280 else
1281 end = 0;
1282 }else {
1283 end = length;
1284 }
1285
1286 if(start > end) {
1287 INT tmp = start;
1288 start = end;
1289 end = tmp;
1290 }
1291
1292 if(r) {
1294 if(ret)
1295 *r = jsval_string(ret);
1296 else
1298 }
1300 return hres;
1301}

◆ String_sup()

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

Definition at line 1358 of file string.c.

1360{
1361 return do_attributeless_tag_format(ctx, vthis, r, L"SUP");
1362}

◆ string_this()

static StringInstance * string_this ( jsval_t  vthis)
inlinestatic

Definition at line 39 of file string.c.

40{
41 jsdisp_t *jsdisp = is_object_instance(vthis) ? to_jsdisp(get_object(vthis)) : NULL;
42 return (jsdisp && is_class(jsdisp, JSCLASS_STRING)) ? string_from_jsdisp(jsdisp) : NULL;
43}
jsdisp_t * to_jsdisp(IDispatch *disp)
Definition: dispex.c:2447
@ JSCLASS_STRING
Definition: jscript.h:115

Referenced by get_string_val(), and stringobj_to_string().

◆ String_toLocaleLowerCase()

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

Definition at line 1438 of file string.c.

1440{
1441 TRACE("\n");
1442 return to_lower_case(ctx, vthis, r);
1443}
static HRESULT to_lower_case(script_ctx_t *ctx, jsval_t vthis, jsval_t *r)
Definition: string.c:1394

◆ String_toLocaleUpperCase()

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

Definition at line 1445 of file string.c.

1447{
1448 TRACE("\n");
1449 return to_upper_case(ctx, vthis, r);
1450}
static HRESULT to_upper_case(script_ctx_t *ctx, jsval_t vthis, jsval_t *r)
Definition: string.c:1364

◆ String_toLowerCase()

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

Definition at line 1424 of file string.c.

1426{
1427 TRACE("\n");
1428 return to_lower_case(ctx, vthis, r);
1429}

◆ String_toString()

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

Definition at line 101 of file string.c.

103{
104 TRACE("\n");
105
106 return stringobj_to_string(vthis, r);
107}
static HRESULT stringobj_to_string(jsval_t vthis, jsval_t *r)
Definition: string.c:86

◆ String_toUpperCase()

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

Definition at line 1431 of file string.c.

1433{
1434 TRACE("\n");
1435 return to_upper_case(ctx, vthis, r);
1436}

◆ String_trim()

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

Definition at line 1452 of file string.c.

1454{
1455 const WCHAR *str, *begin, *end;
1456 jsstr_t *jsstr;
1457 unsigned len;
1458 HRESULT hres;
1459
1460 if(is_undefined(vthis) || is_null(vthis))
1461 return JS_E_OBJECT_EXPECTED;
1462
1463 hres = to_flat_string(ctx, vthis, &jsstr, &str);
1464 if(FAILED(hres)) {
1465 WARN("to_flat_string failed: %08lx\n", hres);
1466 return hres;
1467 }
1468 len = jsstr_length(jsstr);
1469 TRACE("%s\n", debugstr_wn(str, len));
1470
1471 for(begin = str, end = str + len; begin < end && iswspace(*begin); begin++);
1472 while(end > begin + 1 && iswspace(*(end-1))) end--;
1473
1474 if(r) {
1475 jsstr_t *ret;
1476
1477 if(begin == str && end == str + len)
1478 ret = jsstr_addref(jsstr);
1479 else
1480 ret = jsstr_alloc_len(begin, end - begin);
1481 if(ret)
1482 *r = jsval_string(ret);
1483 else
1485 }
1486 jsstr_release(jsstr);
1487 return hres;
1488}
#define WARN(fmt,...)
Definition: precomp.h:61
#define iswspace(_c)
Definition: ctype.h:669

◆ String_valueOf()

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

Definition at line 110 of file string.c.

112{
113 TRACE("\n");
114
115 return stringobj_to_string(vthis, r);
116}

◆ StringConstr_fromCharCode()

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

Definition at line 1604 of file string.c.

1606{
1607 WCHAR *ret_str;
1608 UINT32 i, code;
1609 jsstr_t *ret;
1610 HRESULT hres;
1611
1612 TRACE("\n");
1613
1614 ret = jsstr_alloc_buf(argc, &ret_str);
1615 if(!ret)
1616 return E_OUTOFMEMORY;
1617
1618 for(i=0; i<argc; i++) {
1619 hres = to_uint32(ctx, argv[i], &code);
1620 if(FAILED(hres)) {
1622 return hres;
1623 }
1624
1625 ret_str[i] = code;
1626 }
1627
1628 if(r)
1629 *r = jsval_string(ret);
1630 else
1632 return S_OK;
1633}
Definition: inflate.c:139
uint32_t UINT32
Definition: typedefs.h:59

◆ StringConstr_value()

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

Definition at line 1635 of file string.c.

1637{
1638 HRESULT hres = S_OK;
1639
1640 TRACE("\n");
1641
1642 switch(flags) {
1643 case INVOKE_FUNC: {
1644 jsstr_t *str;
1645
1646 if(argc) {
1647 hres = to_string(ctx, argv[0], &str);
1648 if(FAILED(hres))
1649 return hres;
1650 }else {
1651 str = jsstr_empty();
1652 }
1653
1654 if(r) *r = jsval_string(str);
1655 else jsstr_release(str);
1656 break;
1657 }
1658 case DISPATCH_CONSTRUCT: {
1659 jsstr_t *str;
1660 jsdisp_t *ret;
1661
1662 if(argc) {
1663 hres = to_string(ctx, argv[0], &str);
1664 if(FAILED(hres))
1665 return hres;
1666 }else {
1667 str = jsstr_empty();
1668 }
1669
1670 if(r) {
1672 if(SUCCEEDED(hres)) *r = jsval_obj(ret);
1673 }
1675 return hres;
1676 }
1677
1678 default:
1679 FIXME("unimplemented flags: %x\n", flags);
1680 return E_NOTIMPL;
1681 }
1682
1683 return S_OK;
1684}
HRESULT create_string(script_ctx_t *ctx, jsstr_t *str, jsdisp_t **ret)
Definition: string.c:1736
GLbitfield flags
Definition: glext.h:7161

Referenced by create_string_constr().

◆ stringobj_to_string()

static HRESULT stringobj_to_string ( jsval_t  vthis,
jsval_t r 
)
static

Definition at line 86 of file string.c.

87{
89
90 if(!(string = string_this(vthis))) {
91 WARN("this is not a string object\n");
92 return E_FAIL;
93 }
94
95 if(r)
97 return S_OK;
98}
#define E_FAIL
Definition: ddrawi.h:102

Referenced by String_toString(), and String_valueOf().

◆ to_lower_case()

static HRESULT to_lower_case ( script_ctx_t ctx,
jsval_t  vthis,
jsval_t r 
)
static

Definition at line 1394 of file string.c.

1395{
1396 jsstr_t *str;
1397 HRESULT hres;
1398
1399
1400 hres = get_string_val(ctx, vthis, &str);
1401 if(FAILED(hres))
1402 return hres;
1403
1404 if(r) {
1405 unsigned len = jsstr_length(str);
1406 jsstr_t *ret;
1407 WCHAR *buf;
1408
1410 if(!ret) {
1412 return E_OUTOFMEMORY;
1413 }
1414
1416 for (; len--; buf++) *buf = towlower(*buf);
1417
1418 *r = jsval_string(ret);
1419 }
1421 return S_OK;
1422}
#define towlower(c)
Definition: wctype.h:97

Referenced by String_toLocaleLowerCase(), and String_toLowerCase().

◆ to_upper_case()

static HRESULT to_upper_case ( script_ctx_t ctx,
jsval_t  vthis,
jsval_t r 
)
static

Definition at line 1364 of file string.c.

1365{
1366 jsstr_t *str;
1367 HRESULT hres;
1368
1369
1370 hres = get_string_val(ctx, vthis, &str);
1371 if(FAILED(hres))
1372 return hres;
1373
1374 if(r) {
1375 unsigned len = jsstr_length(str);
1376 jsstr_t *ret;
1377 WCHAR *buf;
1378
1380 if(!ret) {
1382 return E_OUTOFMEMORY;
1383 }
1384
1386 for (; len--; buf++) *buf = towupper(*buf);
1387
1388 *r = jsval_string(ret);
1389 }
1391 return S_OK;
1392}
#define towupper(c)
Definition: wctype.h:99

Referenced by String_toLocaleUpperCase(), and String_toUpperCase().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( jscript  )

Variable Documentation

◆ String_info

const builtin_info_t String_info
static
Initial value:
= {
.class = JSCLASS_STRING,
.props_cnt = ARRAY_SIZE(String_props),
.props = String_props,
.destructor = String_destructor,
}
static void String_destructor(jsdisp_t *dispex)
Definition: string.c:1497
static const builtin_prop_t String_props[]
Definition: string.c:1545

Definition at line 1582 of file string.c.

Referenced by string_alloc().

◆ String_props

const builtin_prop_t String_props[]
static

Definition at line 1545 of file string.c.

◆ StringConstr_info

const builtin_info_t StringConstr_info
static
Initial value:
= {
.class = JSCLASS_FUNCTION,
.call = Function_value,
}
HRESULT Function_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: function.c:600
static const builtin_prop_t StringConstr_props[]
Definition: string.c:1709

Definition at line 1713 of file string.c.

Referenced by create_string_constr().

◆ StringConstr_props

const builtin_prop_t StringConstr_props[]
static
Initial value:
= {
}
static HRESULT StringConstr_fromCharCode(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
Definition: string.c:1604
const unsigned int PROPF_METHOD
Definition: jsdisp.idl:33

Definition at line 1709 of file string.c.

◆ StringInst_info

const builtin_info_t StringInst_info
static
Initial value:
= {
.class = JSCLASS_STRING,
.props = StringInst_props,
.destructor = String_destructor,
.lookup_prop = String_lookup_prop,
.next_prop = String_next_prop,
.prop_get = String_prop_get,
}
static const builtin_prop_t StringInst_props[]
Definition: string.c:1589
static HRESULT String_next_prop(jsdisp_t *jsdisp, unsigned id, struct property_info *desc)
Definition: string.c:1520
static HRESULT String_lookup_prop(jsdisp_t *jsdisp, const WCHAR *name, unsigned flags, struct property_info *desc)
Definition: string.c:1504
static HRESULT String_prop_get(jsdisp_t *jsdisp, unsigned idx, jsval_t *r)
Definition: string.c:1530

Definition at line 1593 of file string.c.

Referenced by string_alloc().

◆ StringInst_props

const builtin_prop_t StringInst_props[]
static
Initial value:
= {
{L"length", NULL,0, String_get_length}
}
static HRESULT String_get_length(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r)
Definition: string.c:76

Definition at line 1589 of file string.c.