42 return c ==
' ' ||
c ==
'\t' ||
c ==
'\n' ||
c ==
'\r';
143 while(*
ctx->ptr && *
ctx->ptr !=
'"') {
144 if(*
ctx->ptr++ ==
'\\')
148 FIXME(
"unterminated string\n");
160 WARN(
"unescape failed\n");
222 FIXME(
"missing ':'\n");
243 if(*
ctx->ptr++ !=
',') {
244 FIXME(
"expected ','\n");
306 if(*
ctx->ptr !=
',') {
307 FIXME(
"expected ','\n");
324 if(*
ctx->ptr ==
'-') {
403 id = DISPID_STARTENUM;
457 FIXME(
"syntax error\n");
513 if(!
ctx->stack_size) {
518 }
else if(
ctx->stack_top ==
ctx->stack_size) {
524 ctx->stack = new_stack;
525 ctx->stack_size *= 2;
539 size_t i =
ctx->stack_top;
554 }
else if(
ctx->buf_len +
len >
ctx->buf_size) {
689 FIXME(
"Found a cycle\n");
709 for(
j=0;
j <
ctx->stack_top;
j++) {
733 DISPID dispid = DISPID_STARTENUM;
734 unsigned prop_cnt = 0,
i;
740 FIXME(
"Found a cycle\n");
750 while((
hres = IDispatchEx_GetNextDispID(
to_dispex(
obj), fdexEnumDefault, dispid, &dispid)) ==
S_OK) {
751 stepback =
ctx->buf_len;
764 for(
i=0;
i <
ctx->stack_top;
i++) {
793 ctx->buf_len = stepback;
800 if(prop_cnt && *
ctx->gap) {
804 for(
i=1;
i <
ctx->stack_top;
i++) {
841 FIXME(
"Use toJSON.\n");
957 FIXME(
"Array replacer not yet supported\n");
977 stringify_ctx.
gap[
i] =
' ';
978 stringify_ctx.
gap[
len] = 0;
1037 json =
calloc(1,
sizeof(*json));
HRESULT create_array(script_ctx_t *ctx, DWORD length, jsdisp_t **ret)
WCHAR * idx_to_str(DWORD idx, WCHAR *ptr)
unsigned array_get_length(jsdisp_t *array)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
BOOL bool_obj_value(jsdisp_t *obj)
static BOOL get_bool(D3DXPARAMETER_TYPE type, const void *data)
_ACRTIMP wchar_t *__cdecl _itow(int, wchar_t *, int)
_ACRTIMP double __cdecl floor(double)
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
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
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 GLint GLint j
static HRESULT to_string(VARIANT *src, BSTR *dst)
HRESULT jsdisp_define_data_property(jsdisp_t *obj, const WCHAR *name, unsigned flags, jsval_t value)
HRESULT jsdisp_propput_name(jsdisp_t *obj, const WCHAR *name, jsval_t val)
HRESULT jsdisp_get_id(jsdisp_t *jsdisp, const WCHAR *name, DWORD flags, DISPID *id)
HRESULT init_dispex_from_constr(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *constr)
HRESULT disp_delete(IDispatch *disp, DISPID id, BOOL *ret)
jsdisp_t * iface_to_jsdisp(IDispatch *iface)
HRESULT jsdisp_get_prop_name(jsdisp_t *obj, DISPID id, jsstr_t **r)
ULONG jsdisp_release(jsdisp_t *obj)
HRESULT jsdisp_call_value(jsdisp_t *jsfunc, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
HRESULT jsdisp_propget_name(jsdisp_t *obj, const WCHAR *name, jsval_t *val)
HRESULT jsdisp_propput_idx(jsdisp_t *obj, DWORD idx, jsval_t val)
jsdisp_t * jsdisp_addref(jsdisp_t *obj)
jsdisp_t * to_jsdisp(IDispatch *disp)
HRESULT jsdisp_next_prop(jsdisp_t *obj, DISPID id, enum jsdisp_enum_type enum_type, DISPID *ret)
static int hex_to_int(const WCHAR wch)
HRESULT parse_decimal(const WCHAR **iter, const WCHAR *end, double *ret)
BOOL unescape(WCHAR *str, size_t *len)
BOOL is_identifier_char(WCHAR c)
HRESULT to_flat_string(script_ctx_t *, jsval_t, jsstr_t **, const WCHAR **)
#define JS_E_INVALID_CHAR
HRESULT create_object(script_ctx_t *, jsdisp_t *, jsdisp_t **)
@ JSDISP_ENUM_OWN_ENUMERABLE
HRESULT double_to_string(double, jsstr_t **)
static HRESULT disp_call_value(script_ctx_t *ctx, IDispatch *disp, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
static IDispatch * to_disp(jsdisp_t *jsdisp)
HRESULT to_number(script_ctx_t *, jsval_t, double *)
static IDispatchEx * to_dispex(jsdisp_t *jsdisp)
static BOOL is_class(jsdisp_t *jsdisp, jsclass_t class)
const unsigned int PROPF_WRITABLE
const unsigned int PROPF_ENUMERABLE
const unsigned int PROPF_CONFIGURABLE
const unsigned int PROPF_METHOD
static HRESULT maybe_to_primitive(script_ctx_t *ctx, jsval_t val, jsval_t *r)
static BOOL is_keyword(json_parse_ctx_t *ctx, const WCHAR *keyword)
static const builtin_prop_t JSON_props[]
static BOOL append_string(stringify_ctx_t *ctx, const WCHAR *str)
static HRESULT JSON_parse(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
static HRESULT JSON_stringify(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r)
static void stringify_pop_obj(stringify_ctx_t *ctx)
static BOOL is_json_space(WCHAR c)
HRESULT create_json(script_ctx_t *ctx, jsdisp_t **ret)
static HRESULT stringify(stringify_ctx_t *ctx, jsdisp_t *object, const WCHAR *name)
static BOOL append_string_len(stringify_ctx_t *ctx, const WCHAR *str, size_t len)
static HRESULT stringify_array(stringify_ctx_t *ctx, jsdisp_t *obj)
static BOOL append_simple_quote(stringify_ctx_t *ctx, WCHAR c)
static const builtin_info_t JSON_info
static BOOL stringify_push_obj(stringify_ctx_t *ctx, jsdisp_t *obj)
static HRESULT stringify_object(stringify_ctx_t *ctx, jsdisp_t *obj)
static BOOL is_callable(jsdisp_t *obj)
static BOOL append_char(stringify_ctx_t *ctx, WCHAR c)
static jsval_t transform_json_object(struct transform_json_object_ctx *proc_ctx, jsdisp_t *holder, jsstr_t *name)
static HRESULT parse_json_string(json_parse_ctx_t *ctx, WCHAR **r)
static WCHAR skip_spaces(json_parse_ctx_t *ctx)
static HRESULT parse_json_value(json_parse_ctx_t *ctx, jsval_t *r)
static HRESULT json_quote(stringify_ctx_t *ctx, const WCHAR *ptr, size_t len)
static BOOL is_on_stack(stringify_ctx_t *ctx, jsdisp_t *obj)
static BOOL unescape_json_string(WCHAR *str, size_t *len)
jsstr_t * jsstr_alloc_len(const WCHAR *buf, unsigned len)
jsstr_t * jsstr_empty(void)
void jsstr_extract(jsstr_t *str, unsigned off, unsigned len, WCHAR *buf)
static const WCHAR * jsstr_flatten(jsstr_t *str)
static void jsstr_release(jsstr_t *str)
static unsigned jsstr_length(jsstr_t *str)
static jsstr_t * jsstr_alloc(const WCHAR *str)
HRESULT jsval_copy(jsval_t v, jsval_t *r)
void jsval_release(jsval_t val)
static BOOL is_number(jsval_t v)
static jsval_t jsval_null(void)
static jsval_t jsval_string(jsstr_t *str)
static jsval_t jsval_undefined(void)
static jsval_t jsval_obj(jsdisp_t *obj)
static jsval_t jsval_bool(BOOL b)
static jsval_type_t jsval_type(jsval_t v)
static BOOL is_null_disp(jsval_t v)
static jsstr_t * get_string(jsval_t v)
static BOOL is_undefined(jsval_t v)
static double get_number(jsval_t v)
static IDispatch * get_object(jsval_t v)
static BOOL is_object_instance(jsval_t v)
static jsval_t jsval_number(double n)
#define memcpy(s1, s2, n)
static VARIANTARG static DISPID
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
static BOOL is_string(parse_buffer *buf)
#define DISP_E_UNKNOWNNAME