Author: cwittich
Date: Sat Aug 22 17:25:26 2009
New Revision: 42849
URL:
http://svn.reactos.org/svn/reactos?rev=42849&view=rev
Log:
sync jscript with wine 1.1.28
Modified:
trunk/reactos/dll/win32/jscript/array.c
trunk/reactos/dll/win32/jscript/bool.c
trunk/reactos/dll/win32/jscript/date.c
trunk/reactos/dll/win32/jscript/dispex.c
trunk/reactos/dll/win32/jscript/engine.c
trunk/reactos/dll/win32/jscript/error.c
trunk/reactos/dll/win32/jscript/function.c
trunk/reactos/dll/win32/jscript/global.c
trunk/reactos/dll/win32/jscript/jscript.h
trunk/reactos/dll/win32/jscript/jscript_Nl.rc
trunk/reactos/dll/win32/jscript/math.c
trunk/reactos/dll/win32/jscript/number.c
trunk/reactos/dll/win32/jscript/object.c
trunk/reactos/dll/win32/jscript/regexp.c
trunk/reactos/dll/win32/jscript/string.c
Modified: trunk/reactos/dll/win32/jscript/array.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/array.c?…
==============================================================================
--- trunk/reactos/dll/win32/jscript/array.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/array.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -43,10 +43,6 @@
static const WCHAR toStringW[] =
{'t','o','S','t','r','i','n','g',0};
static const WCHAR toLocaleStringW[] =
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
static const WCHAR unshiftW[] =
{'u','n','s','h','i','f','t',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
static const WCHAR default_separatorW[] = {',',0};
@@ -743,27 +739,6 @@
return E_NOTIMPL;
}
-static HRESULT Array_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Array_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Array_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT Array_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
@@ -809,22 +784,19 @@
}
static const builtin_prop_t Array_props[] = {
- {concatW, Array_concat, PROPF_METHOD},
- {hasOwnPropertyW, Array_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Array_isPrototypeOf, PROPF_METHOD},
- {joinW, Array_join, PROPF_METHOD},
+ {concatW, Array_concat, PROPF_METHOD|1},
+ {joinW, Array_join, PROPF_METHOD|1},
{lengthW, Array_length, 0},
{popW, Array_pop, PROPF_METHOD},
- {propertyIsEnumerableW, Array_propertyIsEnumerable, PROPF_METHOD},
- {pushW, Array_push, PROPF_METHOD},
+ {pushW, Array_push, PROPF_METHOD|1},
{reverseW, Array_reverse, PROPF_METHOD},
{shiftW, Array_shift, PROPF_METHOD},
- {sliceW, Array_slice, PROPF_METHOD},
- {sortW, Array_sort, PROPF_METHOD},
- {spliceW, Array_splice, PROPF_METHOD},
+ {sliceW, Array_slice, PROPF_METHOD|2},
+ {sortW, Array_sort, PROPF_METHOD|1},
+ {spliceW, Array_splice, PROPF_METHOD|2},
{toLocaleStringW, Array_toLocaleString, PROPF_METHOD},
{toStringW, Array_toString, PROPF_METHOD},
- {unshiftW, Array_unshift, PROPF_METHOD},
+ {unshiftW, Array_unshift, PROPF_METHOD|1},
};
static const builtin_info_t Array_info = {
@@ -888,7 +860,7 @@
return S_OK;
}
-static HRESULT alloc_array(script_ctx_t *ctx, BOOL use_constr, ArrayInstance **ret)
+static HRESULT alloc_array(script_ctx_t *ctx, DispatchEx *object_prototype, ArrayInstance
**ret)
{
ArrayInstance *array;
HRESULT hres;
@@ -897,8 +869,8 @@
if(!array)
return E_OUTOFMEMORY;
- if(use_constr)
- hres = init_dispex_from_constr(&array->dispex, ctx, &Array_info,
ctx->array_constr);
+ if(object_prototype)
+ hres = init_dispex(&array->dispex, ctx, &Array_info,
object_prototype);
else
hres = init_dispex_from_constr(&array->dispex, ctx, &Array_info,
ctx->object_constr);
@@ -911,12 +883,12 @@
return S_OK;
}
-HRESULT create_array_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_array_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx
**ret)
{
ArrayInstance *array;
HRESULT hres;
- hres = alloc_array(ctx, FALSE, &array);
+ hres = alloc_array(ctx, object_prototype, &array);
if(FAILED(hres))
return hres;
@@ -931,7 +903,7 @@
ArrayInstance *array;
HRESULT hres;
- hres = alloc_array(ctx, TRUE, &array);
+ hres = alloc_array(ctx, NULL, &array);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/bool.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/bool.c?r…
==============================================================================
--- trunk/reactos/dll/win32/jscript/bool.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/bool.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -30,12 +30,7 @@
} BoolInstance;
static const WCHAR toStringW[] =
{'t','o','S','t','r','i','n','g',0};
-static const WCHAR toLocaleStringW[] =
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
static const WCHAR valueOfW[] =
{'v','a','l','u','e','O','f',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
/* ECMA-262 3rd Edition 15.6.4.2 */
static HRESULT Bool_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
@@ -66,13 +61,6 @@
return S_OK;
}
-static HRESULT Bool_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- TRACE("\n");
- return Bool_toString(dispex, lcid, flags, dp, retv, ei, sp);
-}
-
/* ECMA-262 3rd Edition 15.6.4.3 */
static HRESULT Bool_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
@@ -90,27 +78,6 @@
}
return S_OK;
-}
-
-static HRESULT Bool_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Bool_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Bool_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
}
static HRESULT Bool_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
@@ -131,10 +98,6 @@
}
static const builtin_prop_t Bool_props[] = {
- {hasOwnPropertyW, Bool_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Bool_isPrototypeOf, PROPF_METHOD},
- {propertyIsEnumerableW, Bool_propertyIsEnumerable, PROPF_METHOD},
- {toLocaleStringW, Bool_toLocaleString, PROPF_METHOD},
{toStringW, Bool_toString, PROPF_METHOD},
{valueOfW, Bool_valueOf, PROPF_METHOD}
};
@@ -188,7 +151,7 @@
return S_OK;
}
-static HRESULT alloc_bool(script_ctx_t *ctx, BOOL use_constr, BoolInstance **ret)
+static HRESULT alloc_bool(script_ctx_t *ctx, DispatchEx *object_prototype, BoolInstance
**ret)
{
BoolInstance *bool;
HRESULT hres;
@@ -197,10 +160,10 @@
if(!bool)
return E_OUTOFMEMORY;
- if(use_constr)
+ if(object_prototype)
+ hres = init_dispex(&bool->dispex, ctx, &Bool_info, object_prototype);
+ else
hres = init_dispex_from_constr(&bool->dispex, ctx, &Bool_info,
ctx->bool_constr);
- else
- hres = init_dispex(&bool->dispex, ctx, &Bool_info, NULL);
if(FAILED(hres)) {
heap_free(bool);
@@ -211,12 +174,12 @@
return S_OK;
}
-HRESULT create_bool_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_bool_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx
**ret)
{
BoolInstance *bool;
HRESULT hres;
- hres = alloc_bool(ctx, FALSE, &bool);
+ hres = alloc_bool(ctx, object_prototype, &bool);
if(FAILED(hres))
return hres;
@@ -231,7 +194,7 @@
BoolInstance *bool;
HRESULT hres;
- hres = alloc_bool(ctx, TRUE, &bool);
+ hres = alloc_bool(ctx, NULL, &bool);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/date.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/date.c?r…
==============================================================================
--- trunk/reactos/dll/win32/jscript/date.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/date.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -17,6 +17,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "config.h"
+#include "wine/port.h"
+
#include <limits.h>
#include <math.h>
@@ -44,7 +47,6 @@
static const WCHAR toStringW[] =
{'t','o','S','t','r','i','n','g',0};
static const WCHAR toLocaleStringW[] =
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
static const WCHAR propertyIsEnumerableW[] =
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
@@ -649,27 +651,6 @@
return S_OK;
}
-static HRESULT Date_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Date_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Date_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT Date_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
{
@@ -2073,24 +2054,21 @@
{getUTCMonthW, Date_getUTCMonth, PROPF_METHOD},
{getUTCSecondsW, Date_getUTCSeconds, PROPF_METHOD},
{getYearW, Date_getYear, PROPF_METHOD},
- {hasOwnPropertyW, Date_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Date_isPrototypeOf, PROPF_METHOD},
- {propertyIsEnumerableW, Date_propertyIsEnumerable, PROPF_METHOD},
- {setDateW, Date_setDate, PROPF_METHOD},
- {setFullYearW, Date_setFullYear, PROPF_METHOD},
- {setHoursW, Date_setHours, PROPF_METHOD},
- {setMillisecondsW, Date_setMilliseconds, PROPF_METHOD},
- {setMinutesW, Date_setMinutes, PROPF_METHOD},
- {setMonthW, Date_setMonth, PROPF_METHOD},
- {setSecondsW, Date_setSeconds, PROPF_METHOD},
- {setTimeW, Date_setTime, PROPF_METHOD},
- {setUTCDateW, Date_setUTCDate, PROPF_METHOD},
- {setUTCFullYearW, Date_setUTCFullYear, PROPF_METHOD},
- {setUTCHoursW, Date_setUTCHours, PROPF_METHOD},
- {setUTCMillisecondsW, Date_setUTCMilliseconds, PROPF_METHOD},
- {setUTCMinutesW, Date_setUTCMinutes, PROPF_METHOD},
- {setUTCMonthW, Date_setUTCMonth, PROPF_METHOD},
- {setUTCSecondsW, Date_setUTCSeconds, PROPF_METHOD},
+ {setDateW, Date_setDate, PROPF_METHOD|1},
+ {setFullYearW, Date_setFullYear, PROPF_METHOD|3},
+ {setHoursW, Date_setHours, PROPF_METHOD|4},
+ {setMillisecondsW, Date_setMilliseconds, PROPF_METHOD|1},
+ {setMinutesW, Date_setMinutes, PROPF_METHOD|3},
+ {setMonthW, Date_setMonth, PROPF_METHOD|2},
+ {setSecondsW, Date_setSeconds, PROPF_METHOD|2},
+ {setTimeW, Date_setTime, PROPF_METHOD|1},
+ {setUTCDateW, Date_setUTCDate, PROPF_METHOD|1},
+ {setUTCFullYearW, Date_setUTCFullYear, PROPF_METHOD|3},
+ {setUTCHoursW, Date_setUTCHours, PROPF_METHOD|4},
+ {setUTCMillisecondsW, Date_setUTCMilliseconds, PROPF_METHOD|1},
+ {setUTCMinutesW, Date_setUTCMinutes, PROPF_METHOD|3},
+ {setUTCMonthW, Date_setUTCMonth, PROPF_METHOD|2},
+ {setUTCSecondsW, Date_setUTCSeconds, PROPF_METHOD|2},
{toDateStringW, Date_toDateString, PROPF_METHOD},
{toLocaleDateStringW, Date_toLocaleDateString, PROPF_METHOD},
{toLocaleStringW, Date_toLocaleString, PROPF_METHOD},
@@ -2110,7 +2088,7 @@
NULL
};
-static HRESULT create_date(script_ctx_t *ctx, BOOL use_constr, DOUBLE time, DispatchEx
**ret)
+static HRESULT create_date(script_ctx_t *ctx, DispatchEx *object_prototype, DOUBLE time,
DispatchEx **ret)
{
DateInstance *date;
HRESULT hres;
@@ -2122,10 +2100,10 @@
if(!date)
return E_OUTOFMEMORY;
- if(use_constr)
+ if(object_prototype)
+ hres = init_dispex(&date->dispex, ctx, &Date_info, object_prototype);
+ else
hres = init_dispex_from_constr(&date->dispex, ctx, &Date_info,
ctx->date_constr);
- else
- hres = init_dispex(&date->dispex, ctx, &Date_info, NULL);
if(FAILED(hres)) {
heap_free(date);
return hres;
@@ -2537,7 +2515,7 @@
lltime = ((LONGLONG)time.dwHighDateTime<<32)
+ time.dwLowDateTime;
- hres = create_date(dispex->ctx, TRUE, lltime/10000-TIME_EPOCH,
&date);
+ hres = create_date(dispex->ctx, NULL, lltime/10000-TIME_EPOCH,
&date);
if(FAILED(hres))
return hres;
break;
@@ -2560,7 +2538,7 @@
if(FAILED(hres))
return hres;
- hres = create_date(dispex->ctx, TRUE, time_clip(num_val(&num)),
&date);
+ hres = create_date(dispex->ctx, NULL, time_clip(num_val(&num)),
&date);
if(FAILED(hres))
return hres;
break;
@@ -2573,7 +2551,7 @@
DateConstr_UTC(dispex, lcid, flags, dp, &ret_date, ei, sp);
- hres = create_date(dispex->ctx, TRUE, num_val(&ret_date), &date);
+ hres = create_date(dispex->ctx, NULL, num_val(&ret_date), &date);
if(FAILED(hres))
return hres;
@@ -2620,12 +2598,12 @@
NULL
};
-HRESULT create_date_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_date_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx
**ret)
{
DispatchEx *date;
HRESULT hres;
- hres = create_date(ctx, FALSE, 0.0, &date);
+ hres = create_date(ctx, object_prototype, 0.0, &date);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/dispex.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/dispex.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/dispex.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/dispex.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -844,6 +844,23 @@
return invoke_prop_func(disp, disp, prop, lcid, flags, dp, retv, ei, caller);
}
+HRESULT jsdisp_call_name(DispatchEx *disp, const WCHAR *name, LCID lcid, WORD flags,
DISPPARAMS *dp, VARIANT *retv,
+ jsexcept_t *ei, IServiceProvider *caller)
+{
+ dispex_prop_t *prop;
+ HRESULT hres;
+
+ hres = find_prop_name_prot(disp, name, TRUE, &prop);
+ if(FAILED(hres))
+ return hres;
+
+ memset(ei, 0, sizeof(*ei));
+ if(retv)
+ V_VT(retv) = VT_EMPTY;
+
+ return invoke_prop_func(disp, disp, prop, lcid, flags, dp, retv, ei, caller);
+}
+
HRESULT disp_call(IDispatch *disp, DISPID id, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv,
jsexcept_t *ei, IServiceProvider *caller)
{
Modified: trunk/reactos/dll/win32/jscript/engine.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/engine.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/engine.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/engine.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -356,6 +356,26 @@
return S_OK;
}
+static BOOL lookup_global_members(script_ctx_t *ctx, BSTR identifier, exprval_t *ret)
+{
+ named_item_t *item;
+ DISPID id;
+ HRESULT hres;
+
+ for(item = ctx->named_items; item; item = item->next) {
+ if(item->flags & SCRIPTITEM_GLOBALMEMBERS) {
+ hres = disp_get_id(item->disp, identifier, 0, &id);
+ if(SUCCEEDED(hres)) {
+ if(ret)
+ exprval_set_idref(ret, item->disp, id);
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
HRESULT exec_source(exec_ctx_t *ctx, parser_ctx_t *parser, source_elements_t *source,
jsexcept_t *ei, VARIANT *retv)
{
script_ctx_t *script = parser->script;
@@ -387,8 +407,15 @@
for(var = source->variables; var; var = var->next) {
DISPID id = 0;
-
- hres = jsdisp_get_id(ctx->var_disp, var->identifier, fdexNameEnsure,
&id);
+ BSTR name;
+
+ name = SysAllocString(var->identifier);
+ if(!name)
+ return E_OUTOFMEMORY;
+
+ if(!lookup_global_members(parser->script, name, NULL))
+ hres = jsdisp_get_id(ctx->var_disp, var->identifier, fdexNameEnsure,
&id);
+ SysFreeString(name);
if(FAILED(hres))
return hres;
}
@@ -493,24 +520,14 @@
}
}
- for(item = ctx->parser->script->named_items; item; item = item->next) {
- if(item->flags & SCRIPTITEM_GLOBALMEMBERS) {
- hres = disp_get_id(item->disp, identifier, 0, &id);
- if(SUCCEEDED(hres))
- break;
- }
- }
-
- if(item) {
- exprval_set_idref(ret, item->disp, id);
- return S_OK;
- }
-
hres = jsdisp_get_id(ctx->parser->script->script_disp, identifier, 0,
&id);
if(SUCCEEDED(hres)) {
exprval_set_idref(ret,
(IDispatch*)_IDispatchEx_(ctx->parser->script->script_disp), id);
return S_OK;
}
+
+ if(lookup_global_members(ctx->parser->script, identifier, ret))
+ return S_OK;
if(flags & EXPR_NEWREF) {
hres = jsdisp_get_id(ctx->var_disp, identifier, fdexNameEnsure, &id);
Modified: trunk/reactos/dll/win32/jscript/error.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/error.c?…
==============================================================================
--- trunk/reactos/dll/win32/jscript/error.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/error.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -38,10 +38,6 @@
static const WCHAR messageW[] =
{'m','e','s','s','a','g','e',0};
static const WCHAR numberW[] =
{'n','u','m','b','e','r',0};
static const WCHAR toStringW[] =
{'t','o','S','t','r','i','n','g',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
static HRESULT Error_number(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
@@ -116,28 +112,6 @@
return S_OK;
}
-static HRESULT Error_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags,
- DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Error_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
- DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-
-static HRESULT Error_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags,
- DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT Error_value(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp, VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
@@ -166,11 +140,8 @@
static const builtin_prop_t Error_props[] = {
{descriptionW, Error_description, 0},
- {hasOwnPropertyW, Error_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Error_isPrototypeOf, PROPF_METHOD},
{messageW, Error_message, 0},
{numberW, Error_number, 0},
- {propertyIsEnumerableW, Error_propertyIsEnumerable, PROPF_METHOD},
{toStringW, Error_toString, PROPF_METHOD}
};
@@ -185,11 +156,8 @@
static const builtin_prop_t ErrorInst_props[] = {
{descriptionW, Error_description, 0},
- {hasOwnPropertyW, Error_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Error_isPrototypeOf, PROPF_METHOD},
{messageW, Error_message, 0},
{numberW, Error_number, 0},
- {propertyIsEnumerableW, Error_propertyIsEnumerable, PROPF_METHOD}
};
static const builtin_info_t ErrorInst_info = {
@@ -201,21 +169,21 @@
NULL
};
-static HRESULT alloc_error(script_ctx_t *ctx, BOOL error_prototype,
+static HRESULT alloc_error(script_ctx_t *ctx, DispatchEx *prototype,
DispatchEx *constr, ErrorInstance **ret)
{
ErrorInstance *err;
- DispatchEx *inherit;
HRESULT hres;
err = heap_alloc_zero(sizeof(ErrorInstance));
if(!err)
return E_OUTOFMEMORY;
- inherit = error_prototype ? ctx->object_constr : ctx->error_constr;
- hres = init_dispex_from_constr(&err->dispex, ctx,
- error_prototype ? &Error_info : &ErrorInst_info,
- constr ? constr : inherit);
+ if(prototype)
+ hres = init_dispex(&err->dispex, ctx, &Error_info, prototype);
+ else
+ hres = init_dispex_from_constr(&err->dispex, ctx, &ErrorInst_info,
+ constr ? constr : ctx->error_constr);
if(FAILED(hres)) {
heap_free(err);
return hres;
@@ -231,7 +199,7 @@
ErrorInstance *err;
HRESULT hres;
- hres = alloc_error(ctx, FALSE, constr, &err);
+ hres = alloc_error(ctx, NULL, constr, &err);
if(FAILED(hres))
return hres;
@@ -366,7 +334,7 @@
dispex->ctx->uri_error_constr);
}
-HRESULT init_error_constr(script_ctx_t *ctx)
+HRESULT init_error_constr(script_ctx_t *ctx, DispatchEx *object_prototype)
{
static const WCHAR nameW[] = {'n','a','m','e',0};
static const WCHAR ErrorW[] =
{'E','r','r','o','r',0};
@@ -392,7 +360,7 @@
HRESULT hres;
for(i=0; i<7; i++) {
- hres = alloc_error(ctx, i==0, NULL, &err);
+ hres = alloc_error(ctx, i==0 ? object_prototype : NULL, NULL, &err);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/function.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/function…
==============================================================================
--- trunk/reactos/dll/win32/jscript/function.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/function.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -40,12 +40,8 @@
static const WCHAR lengthW[] =
{'l','e','n','g','t','h',0};
static const WCHAR toStringW[] =
{'t','o','S','t','r','i','n','g',0};
-static const WCHAR toLocaleStringW[] =
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
static const WCHAR applyW[] =
{'a','p','p','l','y',0};
static const WCHAR callW[] = {'c','a','l','l',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
static IDispatch *get_this(DISPPARAMS *dp)
{
@@ -290,42 +286,14 @@
return S_OK;
}
-static HRESULT Function_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
+static HRESULT Function_apply(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
FIXME("\n");
return E_NOTIMPL;
}
-static HRESULT Function_apply(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT Function_call(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Function_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Function_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Function_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
FIXME("\n");
@@ -394,11 +362,7 @@
static const builtin_prop_t Function_props[] = {
{applyW, Function_apply, PROPF_METHOD},
{callW, Function_call, PROPF_METHOD},
- {hasOwnPropertyW, Function_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Function_isPrototypeOf, PROPF_METHOD},
{lengthW, Function_length, 0},
- {propertyIsEnumerableW, Function_propertyIsEnumerable, PROPF_METHOD},
- {toLocaleStringW, Function_toLocaleString, PROPF_METHOD},
{toStringW, Function_toString, PROPF_METHOD}
};
Modified: trunk/reactos/dll/win32/jscript/global.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/global.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/global.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/global.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -754,31 +754,31 @@
if(FAILED(hres))
return hres;
- hres = create_array_constr(ctx, &ctx->array_constr);
- if(FAILED(hres))
- return hres;
-
- hres = create_bool_constr(ctx, &ctx->bool_constr);
- if(FAILED(hres))
- return hres;
-
- hres = create_date_constr(ctx, &ctx->date_constr);
- if(FAILED(hres))
- return hres;
-
- hres = init_error_constr(ctx);
- if(FAILED(hres))
- return hres;
-
- hres = create_number_constr(ctx, &ctx->number_constr);
- if(FAILED(hres))
- return hres;
-
- hres = create_regexp_constr(ctx, &ctx->regexp_constr);
- if(FAILED(hres))
- return hres;
-
- hres = create_string_constr(ctx, &ctx->string_constr);
+ hres = create_array_constr(ctx, object_prototype, &ctx->array_constr);
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_bool_constr(ctx, object_prototype, &ctx->bool_constr);
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_date_constr(ctx, object_prototype, &ctx->date_constr);
+ if(FAILED(hres))
+ return hres;
+
+ hres = init_error_constr(ctx, object_prototype);
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_number_constr(ctx, object_prototype, &ctx->number_constr);
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_regexp_constr(ctx, object_prototype, &ctx->regexp_constr);
+ if(FAILED(hres))
+ return hres;
+
+ hres = create_string_constr(ctx, object_prototype, &ctx->string_constr);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/jscript.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/jscript.…
==============================================================================
--- trunk/reactos/dll/win32/jscript/jscript.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/jscript.h [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -131,6 +131,7 @@
HRESULT
disp_call(IDispatch*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,jsexcept_t*,IServiceProvider*);
HRESULT
jsdisp_call_value(DispatchEx*,LCID,WORD,DISPPARAMS*,VARIANT*,jsexcept_t*,IServiceProvider*);
HRESULT
jsdisp_call(DispatchEx*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,jsexcept_t*,IServiceProvider*);
+HRESULT jsdisp_call_name(DispatchEx*,const
WCHAR*,LCID,WORD,DISPPARAMS*,VARIANT*,jsexcept_t*,IServiceProvider*);
HRESULT disp_propget(IDispatch*,DISPID,LCID,VARIANT*,jsexcept_t*,IServiceProvider*);
HRESULT disp_propput(IDispatch*,DISPID,LCID,VARIANT*,jsexcept_t*,IServiceProvider*);
HRESULT jsdisp_propget(DispatchEx*,DISPID,LCID,VARIANT*,jsexcept_t*,IServiceProvider*);
@@ -225,14 +226,14 @@
HRESULT init_function_constr(script_ctx_t*,DispatchEx*);
HRESULT create_object_prototype(script_ctx_t*,DispatchEx**);
-HRESULT create_array_constr(script_ctx_t*,DispatchEx**);
-HRESULT create_bool_constr(script_ctx_t*,DispatchEx**);
-HRESULT create_date_constr(script_ctx_t*,DispatchEx**);
-HRESULT init_error_constr(script_ctx_t*);
-HRESULT create_number_constr(script_ctx_t*,DispatchEx**);
+HRESULT create_array_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
+HRESULT create_bool_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
+HRESULT create_date_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
+HRESULT init_error_constr(script_ctx_t*,DispatchEx*);
+HRESULT create_number_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
HRESULT create_object_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
-HRESULT create_regexp_constr(script_ctx_t*,DispatchEx**);
-HRESULT create_string_constr(script_ctx_t*,DispatchEx**);
+HRESULT create_regexp_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
+HRESULT create_string_constr(script_ctx_t*,DispatchEx*,DispatchEx**);
typedef struct {
const WCHAR *str;
Modified: trunk/reactos/dll/win32/jscript/jscript_Nl.rc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/jscript_…
==============================================================================
--- trunk/reactos/dll/win32/jscript/jscript_Nl.rc [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/jscript_Nl.rc [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -30,6 +30,7 @@
IDS_SEMICOLON "';' verwacht"
IDS_LBRACKET "'(' verwacht"
IDS_RBRACKET "')' verwacht"
+ IDS_UNTERMINATED_STR "Onafgesloten tekenreeksconstante"
IDS_NOT_FUNC "Functie verwacht"
IDS_NOT_DATE "'[object]' is geen datum object"
IDS_NOT_NUM "Getal verwacht"
Modified: trunk/reactos/dll/win32/jscript/math.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/math.c?r…
==============================================================================
--- trunk/reactos/dll/win32/jscript/math.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/math.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -571,24 +571,24 @@
{PIW, Math_PI, 0},
{SQRT1_2W, Math_SQRT1_2, 0},
{SQRT2W, Math_SQRT2, 0},
- {absW, Math_abs, PROPF_METHOD},
- {acosW, Math_acos, PROPF_METHOD},
- {asinW, Math_asin, PROPF_METHOD},
- {atanW, Math_atan, PROPF_METHOD},
- {atan2W, Math_atan2, PROPF_METHOD},
- {ceilW, Math_ceil, PROPF_METHOD},
- {cosW, Math_cos, PROPF_METHOD},
- {expW, Math_exp, PROPF_METHOD},
- {floorW, Math_floor, PROPF_METHOD},
- {logW, Math_log, PROPF_METHOD},
- {maxW, Math_max, PROPF_METHOD},
- {minW, Math_min, PROPF_METHOD},
- {powW, Math_pow, PROPF_METHOD},
+ {absW, Math_abs, PROPF_METHOD|1},
+ {acosW, Math_acos, PROPF_METHOD|1},
+ {asinW, Math_asin, PROPF_METHOD|1},
+ {atanW, Math_atan, PROPF_METHOD|1},
+ {atan2W, Math_atan2, PROPF_METHOD|2},
+ {ceilW, Math_ceil, PROPF_METHOD|1},
+ {cosW, Math_cos, PROPF_METHOD|1},
+ {expW, Math_exp, PROPF_METHOD|1},
+ {floorW, Math_floor, PROPF_METHOD|1},
+ {logW, Math_log, PROPF_METHOD|1},
+ {maxW, Math_max, PROPF_METHOD|2},
+ {minW, Math_min, PROPF_METHOD|2},
+ {powW, Math_pow, PROPF_METHOD|2},
{randomW, Math_random, PROPF_METHOD},
- {roundW, Math_round, PROPF_METHOD},
- {sinW, Math_sin, PROPF_METHOD},
- {sqrtW, Math_sqrt, PROPF_METHOD},
- {tanW, Math_tan, PROPF_METHOD}
+ {roundW, Math_round, PROPF_METHOD|1},
+ {sinW, Math_sin, PROPF_METHOD|1},
+ {sqrtW, Math_sqrt, PROPF_METHOD|1},
+ {tanW, Math_tan, PROPF_METHOD|1}
};
static const builtin_info_t Math_info = {
@@ -602,5 +602,19 @@
HRESULT create_math(script_ctx_t *ctx, DispatchEx **ret)
{
- return create_dispex(ctx, &Math_info, NULL, ret);
-}
+ DispatchEx *math;
+ HRESULT hres;
+
+ math = heap_alloc_zero(sizeof(DispatchEx));
+ if(!math)
+ return E_OUTOFMEMORY;
+
+ hres = init_dispex_from_constr(math, ctx, &Math_info, ctx->object_constr);
+ if(FAILED(hres)) {
+ heap_free(math);
+ return hres;
+ }
+
+ *ret = math;
+ return S_OK;
+}
Modified: trunk/reactos/dll/win32/jscript/number.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/number.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/number.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/number.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -16,6 +16,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "config.h"
+#include "wine/port.h"
+
#include <math.h>
#include "jscript.h"
@@ -36,10 +39,6 @@
static const WCHAR toExponentialW[] =
{'t','o','E','x','p','o','n','e','n','t','i','a','l',0};
static const WCHAR toPrecisionW[] =
{'t','o','P','r','e','c','i','s','i','o','n',0};
static const WCHAR valueOfW[] =
{'v','a','l','u','e','O','f',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
#define NUMBER_TOSTRING_BUF_SIZE 64
/* ECMA-262 3rd Edition 15.7.4.2 */
@@ -214,27 +213,6 @@
return S_OK;
}
-static HRESULT Number_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Number_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT Number_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT Number_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
@@ -256,14 +234,11 @@
}
static const builtin_prop_t Number_props[] = {
- {hasOwnPropertyW, Number_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Number_isPrototypeOf, PROPF_METHOD},
- {propertyIsEnumerableW, Number_propertyIsEnumerable, PROPF_METHOD},
- {toExponentialW, Number_toExponential, PROPF_METHOD},
+ {toExponentialW, Number_toExponential, PROPF_METHOD|1},
{toFixedW, Number_toFixed, PROPF_METHOD},
{toLocaleStringW, Number_toLocaleString, PROPF_METHOD},
- {toPrecisionW, Number_toPrecision, PROPF_METHOD},
- {toStringW, Number_toString, PROPF_METHOD},
+ {toPrecisionW, Number_toPrecision, PROPF_METHOD|1},
+ {toStringW, Number_toString, PROPF_METHOD|1},
{valueOfW, Number_valueOf, PROPF_METHOD}
};
@@ -330,7 +305,7 @@
return S_OK;
}
-static HRESULT alloc_number(script_ctx_t *ctx, BOOL use_constr, NumberInstance **ret)
+static HRESULT alloc_number(script_ctx_t *ctx, DispatchEx *object_prototype,
NumberInstance **ret)
{
NumberInstance *number;
HRESULT hres;
@@ -339,10 +314,10 @@
if(!number)
return E_OUTOFMEMORY;
- if(use_constr)
+ if(object_prototype)
+ hres = init_dispex(&number->dispex, ctx, &Number_info,
object_prototype);
+ else
hres = init_dispex_from_constr(&number->dispex, ctx, &Number_info,
ctx->number_constr);
- else
- hres = init_dispex(&number->dispex, ctx, &Number_info, NULL);
if(FAILED(hres))
return hres;
@@ -350,12 +325,12 @@
return S_OK;
}
-HRESULT create_number_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_number_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx
**ret)
{
NumberInstance *number;
HRESULT hres;
- hres = alloc_number(ctx, FALSE, &number);
+ hres = alloc_number(ctx, object_prototype, &number);
if(FAILED(hres))
return hres;
@@ -371,7 +346,7 @@
NumberInstance *number;
HRESULT hres;
- hres = alloc_number(ctx, TRUE, &number);
+ hres = alloc_number(ctx, NULL, &number);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/object.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/object.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/object.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/object.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -74,8 +74,11 @@
static HRESULT Object_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
- TRACE("\n");
- return Object_toString(dispex, lcid, flags, dp, retv, ei, sp);
+ DISPPARAMS params = {NULL, NULL, 0, 0};
+
+ TRACE("\n");
+
+ return jsdisp_call_name(dispex, toStringW, lcid, DISPATCH_METHOD, ¶ms, retv,
ei, sp);
}
static HRESULT Object_valueOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
@@ -142,9 +145,9 @@
}
static const builtin_prop_t Object_props[] = {
- {hasOwnPropertyW, Object_hasOwnProperty, PROPF_METHOD},
- {isPrototypeOfW, Object_isPrototypeOf, PROPF_METHOD},
- {propertyIsEnumerableW, Object_propertyIsEnumerable, PROPF_METHOD},
+ {hasOwnPropertyW, Object_hasOwnProperty, PROPF_METHOD|1},
+ {isPrototypeOfW, Object_isPrototypeOf, PROPF_METHOD|1},
+ {propertyIsEnumerableW, Object_propertyIsEnumerable, PROPF_METHOD|1},
{toLocaleStringW, Object_toLocaleString, PROPF_METHOD},
{toStringW, Object_toString, PROPF_METHOD},
{valueOfW, Object_valueOf, PROPF_METHOD}
Modified: trunk/reactos/dll/win32/jscript/regexp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/regexp.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/regexp.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/regexp.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -90,11 +90,6 @@
static const WCHAR multilineW[] =
{'m','u','l','t','i','l','i','n','e',0};
static const WCHAR lastIndexW[] =
{'l','a','s','t','I','n','d','e','x',0};
static const WCHAR toStringW[] =
{'t','o','S','t','r','i','n','g',0};
-static const WCHAR toLocaleStringW[] =
{'t','o','L','o','c','a','l','e','S','t','r','i','n','g',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
static const WCHAR execW[] = {'e','x','e','c',0};
static const WCHAR testW[] = {'t','e','s','t',0};
@@ -3432,67 +3427,55 @@
static HRESULT RegExp_source(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
+ TRACE("\n");
+
+ switch(flags) {
+ case DISPATCH_PROPERTYGET: {
+ RegExpInstance *This = (RegExpInstance*)dispex;
+
+ V_VT(retv) = VT_BSTR;
+ V_BSTR(retv) = SysAllocString(This->str);
+ if(!V_BSTR(retv))
+ return E_OUTOFMEMORY;
+ break;
+ }
+ default:
+ FIXME("Unimplemnted flags %x\n", flags);
+ return E_NOTIMPL;
+ }
+
+ return S_OK;
+}
+
+static HRESULT RegExp_global(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
+ VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
+{
FIXME("\n");
return E_NOTIMPL;
}
-static HRESULT RegExp_global(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
+static HRESULT RegExp_ignoreCase(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
FIXME("\n");
return E_NOTIMPL;
}
-static HRESULT RegExp_ignoreCase(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
+static HRESULT RegExp_multiline(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
FIXME("\n");
return E_NOTIMPL;
}
-static HRESULT RegExp_multiline(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
+static HRESULT RegExp_lastIndex(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
FIXME("\n");
return E_NOTIMPL;
}
-static HRESULT RegExp_lastIndex(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT RegExp_toString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT RegExp_toLocaleString(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT RegExp_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT RegExp_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT RegExp_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
FIXME("\n");
@@ -3540,17 +3523,13 @@
}
static const builtin_prop_t RegExp_props[] = {
- {execW, RegExp_exec, PROPF_METHOD},
+ {execW, RegExp_exec, PROPF_METHOD|1},
{globalW, RegExp_global, 0},
- {hasOwnPropertyW, RegExp_hasOwnProperty, PROPF_METHOD},
{ignoreCaseW, RegExp_ignoreCase, 0},
- {isPrototypeOfW, RegExp_isPrototypeOf, PROPF_METHOD},
{lastIndexW, RegExp_lastIndex, 0},
{multilineW, RegExp_multiline, 0},
- {propertyIsEnumerableW, RegExp_propertyIsEnumerable, PROPF_METHOD},
{sourceW, RegExp_source, 0},
- {testW, RegExp_test, PROPF_METHOD},
- {toLocaleStringW, RegExp_toLocaleString, PROPF_METHOD},
+ {testW, RegExp_test, PROPF_METHOD|1},
{toStringW, RegExp_toString, PROPF_METHOD}
};
@@ -3563,7 +3542,7 @@
NULL
};
-static HRESULT alloc_regexp(script_ctx_t *ctx, BOOL use_constr, RegExpInstance **ret)
+static HRESULT alloc_regexp(script_ctx_t *ctx, DispatchEx *object_prototype,
RegExpInstance **ret)
{
RegExpInstance *regexp;
HRESULT hres;
@@ -3572,10 +3551,10 @@
if(!regexp)
return E_OUTOFMEMORY;
- if(use_constr)
+ if(object_prototype)
+ hres = init_dispex(®exp->dispex, ctx, &RegExp_info,
object_prototype);
+ else
hres = init_dispex_from_constr(®exp->dispex, ctx, &RegExp_info,
ctx->regexp_constr);
- else
- hres = init_dispex(®exp->dispex, ctx, &RegExp_info, NULL);
if(FAILED(hres)) {
heap_free(regexp);
@@ -3593,7 +3572,7 @@
TRACE("%s %x\n", debugstr_w(exp), flags);
- hres = alloc_regexp(ctx, TRUE, ®exp);
+ hres = alloc_regexp(ctx, NULL, ®exp);
if(FAILED(hres))
return hres;
@@ -3694,12 +3673,12 @@
return S_OK;
}
-HRESULT create_regexp_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_regexp_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx
**ret)
{
RegExpInstance *regexp;
HRESULT hres;
- hres = alloc_regexp(ctx, FALSE, ®exp);
+ hres = alloc_regexp(ctx, object_prototype, ®exp);
if(FAILED(hres))
return hres;
Modified: trunk/reactos/dll/win32/jscript/string.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/jscript/string.c…
==============================================================================
--- trunk/reactos/dll/win32/jscript/string.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/jscript/string.c [iso-8859-1] Sat Aug 22 17:25:26 2009
@@ -62,10 +62,6 @@
static const WCHAR toLocaleLowerCaseW[] =
{'t','o','L','o','c','a','l','e','L','o','w','e','r','C','a','s','e',0};
static const WCHAR toLocaleUpperCaseW[] =
{'t','o','L','o','c','a','l','e','U','p','p','e','r','C','a','s','e',0};
static const WCHAR localeCompareW[] =
{'l','o','c','a','l','e','C','o','m','p','a','r','e',0};
-static const WCHAR hasOwnPropertyW[] =
{'h','a','s','O','w','n','P','r','o','p','e','r','t','y',0};
-static const WCHAR propertyIsEnumerableW[] =
-
{'p','r','o','p','e','r','t','y','I','s','E','n','u','m','e','r','a','b','l','e',0};
-static const WCHAR isPrototypeOfW[] =
{'i','s','P','r','o','t','o','t','y','p','e','O','f',0};
static const WCHAR fromCharCodeW[] =
{'f','r','o','m','C','h','a','r','C','o','d','e',0};
static HRESULT String_length(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
@@ -802,7 +798,7 @@
DWORD parens_cnt = 0, parens_size=0, rep_len=0, length;
BSTR rep_str = NULL, match_str = NULL, ret_str, val_str = NULL;
DispatchEx *rep_func = NULL, *regexp = NULL;
- match_result_t *parens = NULL, match;
+ match_result_t *parens = NULL, match, **parens_ptr = &parens;
strbuf_t ret = {NULL,0,0};
BOOL gcheck = FALSE;
VARIANT *arg_var;
@@ -884,12 +880,9 @@
if(FAILED(hres))
break;
- if(strchrW(rep_str, '$')) {
- FIXME("unsupported $ in replace string\n");
- hres = E_NOTIMPL;
- }
-
rep_len = SysStringLen(rep_str);
+ if(!strchrW(rep_str, '$'))
+ parens_ptr = NULL;
}
}
@@ -900,7 +893,7 @@
while(1) {
if(regexp) {
- hres = regexp_match_next(regexp, gcheck, str, length, &cp, rep_func ?
&parens : NULL,
+ hres = regexp_match_next(regexp, gcheck, str, length, &cp,
parens_ptr,
&parens_size, &parens_cnt, &match);
gcheck = TRUE;
@@ -932,6 +925,64 @@
hres = strbuf_append(&ret, cstr, SysStringLen(cstr));
SysFreeString(cstr);
+ if(FAILED(hres))
+ break;
+ }else if(rep_str && regexp) {
+ const WCHAR *ptr = rep_str, *ptr2;
+
+ while((ptr2 = strchrW(ptr, '$'))) {
+ hres = strbuf_append(&ret, ptr, ptr2-ptr);
+ if(FAILED(hres))
+ break;
+
+ switch(ptr2[1]) {
+ case '$':
+ hres = strbuf_append(&ret, ptr2, 1);
+ ptr = ptr2+2;
+ break;
+ case '&':
+ hres = strbuf_append(&ret, match.str, match.len);
+ ptr = ptr2+2;
+ break;
+ case '`':
+ hres = strbuf_append(&ret, str, match.str-str);
+ ptr = ptr2+2;
+ break;
+ case '\'':
+ hres = strbuf_append(&ret, ecp, (str+length)-ecp);
+ ptr = ptr2+2;
+ break;
+ default: {
+ DWORD idx;
+
+ if(!isdigitW(ptr2[1])) {
+ hres = strbuf_append(&ret, ptr2, 1);
+ ptr = ptr2+1;
+ break;
+ }
+
+ idx = ptr2[1] - '0';
+ if(isdigitW(ptr[3]) && idx*10 + (ptr[2]-'0')
<= parens_cnt) {
+ idx = idx*10 + (ptr[2]-'0');
+ ptr = ptr2+3;
+ }else if(idx && idx <= parens_cnt) {
+ ptr = ptr2+2;
+ }else {
+ hres = strbuf_append(&ret, ptr2, 1);
+ ptr = ptr2+1;
+ break;
+ }
+
+ hres = strbuf_append(&ret, parens[idx-1].str,
parens[idx-1].len);
+ }
+ }
+
+ if(FAILED(hres))
+ break;
+ }
+
+ if(SUCCEEDED(hres))
+ hres = strbuf_append(&ret, ptr, (rep_str+rep_len)-ptr);
if(FAILED(hres))
break;
}else if(rep_str) {
@@ -1456,27 +1507,6 @@
return E_NOTIMPL;
}
-static HRESULT String_hasOwnProperty(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT String_propertyIsEnumerable(DispatchEx *dispex, LCID lcid, WORD flags,
DISPPARAMS *dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
-static HRESULT String_isPrototypeOf(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS
*dp,
- VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
-{
- FIXME("\n");
- return E_NOTIMPL;
-}
-
static HRESULT String_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
VARIANT *retv, jsexcept_t *ei, IServiceProvider *sp)
{
@@ -1513,35 +1543,32 @@
}
static const builtin_prop_t String_props[] = {
- {anchorW, String_anchor, PROPF_METHOD},
+ {anchorW, String_anchor, PROPF_METHOD|1},
{bigW, String_big, PROPF_METHOD},
{blinkW, String_blink, PROPF_METHOD},
{boldW, String_bold, PROPF_METHOD},
- {charAtW, String_charAt, PROPF_METHOD},
- {charCodeAtW, String_charCodeAt, PROPF_METHOD},
- {concatW, String_concat, PROPF_METHOD},
+ {charAtW, String_charAt, PROPF_METHOD|1},
+ {charCodeAtW, String_charCodeAt, PROPF_METHOD|1},
+ {concatW, String_concat, PROPF_METHOD|1},
{fixedW, String_fixed, PROPF_METHOD},
- {fontcolorW, String_fontcolor, PROPF_METHOD},
- {fontsizeW, String_fontsize, PROPF_METHOD},
- {hasOwnPropertyW, String_hasOwnProperty, PROPF_METHOD},
- {indexOfW, String_indexOf, PROPF_METHOD},
- {isPrototypeOfW, String_isPrototypeOf, PROPF_METHOD},
+ {fontcolorW, String_fontcolor, PROPF_METHOD|1},
+ {fontsizeW, String_fontsize, PROPF_METHOD|1},
+ {indexOfW, String_indexOf, PROPF_METHOD|2},
{italicsW, String_italics, PROPF_METHOD},
- {lastIndexOfW, String_lastIndexOf, PROPF_METHOD},
+ {lastIndexOfW, String_lastIndexOf, PROPF_METHOD|2},
{lengthW, String_length, 0},
- {linkW, String_link, PROPF_METHOD},
- {localeCompareW, String_localeCompare, PROPF_METHOD},
- {matchW, String_match, PROPF_METHOD},
- {propertyIsEnumerableW, String_propertyIsEnumerable, PROPF_METHOD},
- {replaceW, String_replace, PROPF_METHOD},
+ {linkW, String_link, PROPF_METHOD|1},
+ {localeCompareW, String_localeCompare, PROPF_METHOD|1},
+ {matchW, String_match, PROPF_METHOD|1},
+ {replaceW, String_replace, PROPF_METHOD|1},
{searchW, String_search, PROPF_METHOD},
{sliceW, String_slice, PROPF_METHOD},
{smallW, String_small, PROPF_METHOD},
- {splitW, String_split, PROPF_METHOD},
+ {splitW, String_split, PROPF_METHOD|2},
{strikeW, String_strike, PROPF_METHOD},
{subW, String_sub, PROPF_METHOD},
- {substrW, String_substr, PROPF_METHOD},
- {substringW, String_substring, PROPF_METHOD},
+ {substrW, String_substr, PROPF_METHOD|2},
+ {substringW, String_substring, PROPF_METHOD|2},
{supW, String_sup, PROPF_METHOD},
{toLocaleLowerCaseW, String_toLocaleLowerCase, PROPF_METHOD},
{toLocaleUpperCaseW, String_toLocaleUpperCase, PROPF_METHOD},
@@ -1648,7 +1675,7 @@
return S_OK;
}
-static HRESULT string_alloc(script_ctx_t *ctx, BOOL use_constr, StringInstance **ret)
+static HRESULT string_alloc(script_ctx_t *ctx, DispatchEx *object_prototype,
StringInstance **ret)
{
StringInstance *string;
HRESULT hres;
@@ -1657,10 +1684,10 @@
if(!string)
return E_OUTOFMEMORY;
- if(use_constr)
+ if(object_prototype)
+ hres = init_dispex(&string->dispex, ctx, &String_info,
object_prototype);
+ else
hres = init_dispex_from_constr(&string->dispex, ctx, &String_info,
ctx->string_constr);
- else
- hres = init_dispex(&string->dispex, ctx, &String_info, NULL);
if(FAILED(hres)) {
heap_free(string);
return hres;
@@ -1683,12 +1710,12 @@
NULL
};
-HRESULT create_string_constr(script_ctx_t *ctx, DispatchEx **ret)
+HRESULT create_string_constr(script_ctx_t *ctx, DispatchEx *object_prototype, DispatchEx
**ret)
{
StringInstance *string;
HRESULT hres;
- hres = string_alloc(ctx, FALSE, &string);
+ hres = string_alloc(ctx, object_prototype, &string);
if(FAILED(hres))
return hres;
@@ -1703,7 +1730,7 @@
StringInstance *string;
HRESULT hres;
- hres = string_alloc(ctx, TRUE, &string);
+ hres = string_alloc(ctx, NULL, &string);
if(FAILED(hres))
return hres;