mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
Fixing shell/js
This commit is contained in:
parent
5be73c94d8
commit
8a79b8e8e7
@ -116,6 +116,13 @@ JS_STATIC_ASSERT(sizeof(JSBool) == sizeof(int32));
|
||||
#define CHECK_REQUEST(cx) ((void)0)
|
||||
#endif
|
||||
|
||||
JS_PUBLIC_DATA(jsval) JSVAL_NULL = { JSVAL_NULL_MASK, JS_PADDING_INIT_VALUE() { NULL } };
|
||||
JS_PUBLIC_DATA(jsval) JSVAL_ZERO = { JSVAL_INT32_MASK, JS_PADDING_INIT_VALUE() { 0 } };
|
||||
JS_PUBLIC_DATA(jsval) JSVAL_ONE = { JSVAL_INT32_MASK, JS_PADDING_INIT_VALUE() { 1 } };
|
||||
JS_PUBLIC_DATA(jsval) JSVAL_FALSE = { JSVAL_BOOLEAN_MASK, JS_PADDING_INIT_VALUE() { false } };
|
||||
JS_PUBLIC_DATA(jsval) JSVAL_TRUE = { JSVAL_BOOLEAN_MASK, JS_PADDING_INIT_VALUE() { true } };
|
||||
JS_PUBLIC_DATA(jsval) JSVAL_VOID = { JSVAL_UNDEFINED_MASK, JS_PADDING_INIT_VALUE() };
|
||||
|
||||
JS_PUBLIC_API(int64)
|
||||
JS_Now()
|
||||
{
|
||||
@ -1033,8 +1040,6 @@ JS_SetGlobalObject(JSContext *cx, JSObject *obj)
|
||||
#endif
|
||||
}
|
||||
|
||||
JS_BEGIN_EXTERN_C
|
||||
|
||||
JSObject *
|
||||
js_InitFunctionAndObjectClasses(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
@ -1138,8 +1143,6 @@ out:
|
||||
return fun_proto;
|
||||
}
|
||||
|
||||
JS_END_EXTERN_C
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_InitStandardClasses(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
@ -1149,7 +1152,7 @@ JS_InitStandardClasses(JSContext *cx, JSObject *obj)
|
||||
|
||||
/* Define a top-level property 'undefined' with the undefined value. */
|
||||
atom = cx->runtime->atomState.typeAtoms[JSTYPE_VOID];
|
||||
if (!obj->defineProperty(cx, ATOM_TO_JSID(atom), sUndefinedValue,
|
||||
if (!obj->defineProperty(cx, ATOM_TO_JSID(atom), undefinedValue(),
|
||||
PropertyStub, PropertyStub,
|
||||
JSPROP_PERMANENT | JSPROP_READONLY)) {
|
||||
return JS_FALSE;
|
||||
@ -1356,7 +1359,7 @@ JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsval id,
|
||||
atom = rt->atomState.typeAtoms[JSTYPE_VOID];
|
||||
if (idstr == ATOM_TO_STRING(atom)) {
|
||||
*resolved = JS_TRUE;
|
||||
return obj->defineProperty(cx, ATOM_TO_JSID(atom), sUndefinedValue,
|
||||
return obj->defineProperty(cx, ATOM_TO_JSID(atom), undefinedValue(),
|
||||
PropertyStub, PropertyStub,
|
||||
JSPROP_PERMANENT | JSPROP_READONLY);
|
||||
}
|
||||
@ -1447,7 +1450,7 @@ JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj)
|
||||
/* Check whether we need to bind 'undefined' and define it if so. */
|
||||
atom = rt->atomState.typeAtoms[JSTYPE_VOID];
|
||||
if (!AlreadyHasOwnProperty(cx, obj, atom) &&
|
||||
!obj->defineProperty(cx, ATOM_TO_JSID(atom), sUndefinedValue,
|
||||
!obj->defineProperty(cx, ATOM_TO_JSID(atom), undefinedValue(),
|
||||
PropertyStub, PropertyStub,
|
||||
JSPROP_PERMANENT | JSPROP_READONLY)) {
|
||||
return JS_FALSE;
|
||||
@ -1683,6 +1686,13 @@ JS_strdup(JSContext *cx, const char *s)
|
||||
return (char *)memcpy(p, s, n);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval)
|
||||
{
|
||||
Valueify(rval)->setNumber(d);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
#undef JS_AddRoot
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
@ -2536,10 +2546,10 @@ JSID_TO_JSVAL(jsid id)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_ValueToId(JSContext *cx, const jsval *vp, jsid *idp)
|
||||
JS_ValueToId(JSContext *cx, jsval v, jsid *idp)
|
||||
{
|
||||
CHECK_REQUEST(cx);
|
||||
return ValueToId(cx, Valueify(*vp), idp);
|
||||
return ValueToId(cx, Valueify(v), idp);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSBool)
|
||||
@ -2927,7 +2937,7 @@ JS_DefineProperties(JSContext *cx, JSObject *obj, JSPropertySpec *ps)
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
for (ok = JS_TRUE; ps->name; ps++) {
|
||||
ok = DefineProperty(cx, obj, ps->name, sUndefinedValue,
|
||||
ok = DefineProperty(cx, obj, ps->name, undefinedValue(),
|
||||
Valueify(ps->getter), Valueify(ps->setter), ps->flags,
|
||||
JSScopeProperty::HAS_SHORTID, ps->tinyid);
|
||||
if (!ok)
|
||||
|
198
js/src/jsapi.h
198
js/src/jsapi.h
@ -52,12 +52,12 @@
|
||||
JS_BEGIN_EXTERN_C
|
||||
|
||||
/* Well-known JS values, initialized on startup. */
|
||||
extern jsval JSVAL_NULL;
|
||||
extern jsval JSVAL_ZERO;
|
||||
extern jsval JSVAL_ONE;
|
||||
extern jsval JSVAL_FALSE;
|
||||
extern jsval JSVAL_TRUE;
|
||||
extern jsval JSVAL_VOID;
|
||||
extern JS_PUBLIC_DATA(jsval) JSVAL_NULL;
|
||||
extern JS_PUBLIC_DATA(jsval) JSVAL_ZERO;
|
||||
extern JS_PUBLIC_DATA(jsval) JSVAL_ONE;
|
||||
extern JS_PUBLIC_DATA(jsval) JSVAL_FALSE;
|
||||
extern JS_PUBLIC_DATA(jsval) JSVAL_TRUE;
|
||||
extern JS_PUBLIC_DATA(jsval) JSVAL_VOID;
|
||||
|
||||
/*
|
||||
* Exact value equality, corresponding to == on old word-sized jsvals.
|
||||
@ -929,6 +929,9 @@ JS_updateMallocCounter(JSContext *cx, size_t nbytes);
|
||||
extern JS_PUBLIC_API(char *)
|
||||
JS_strdup(JSContext *cx, const char *s);
|
||||
|
||||
extern JS_PUBLIC_API(JSBool)
|
||||
JS_NewNumberValue(JSContext *cx, jsdouble d, jsval *rval);
|
||||
|
||||
/*
|
||||
* A GC root is a pointer to a jsval, JSObject *, or JSString * that itself
|
||||
* points into the GC heap. JS_AddValueRoot takes pointers to jsvals and
|
||||
@ -3042,12 +3045,6 @@ class ObjPtr
|
||||
protected:
|
||||
typedef JSValueMaskType MaskType;
|
||||
|
||||
static const MaskType NullMask = JSVAL_NULL_MASK;
|
||||
static const MaskType NonFunObjMask = JSVAL_NONFUNOBJ_MASK;
|
||||
static const MaskType FunObjMask = JSVAL_FUNOBJ_MASK;
|
||||
|
||||
static const MaskType ObjectMask = NonFunObjMask | FunObjMask;
|
||||
|
||||
MaskType mask;
|
||||
JSObject *obj;
|
||||
|
||||
@ -3063,31 +3060,31 @@ class ObjPtr
|
||||
}
|
||||
|
||||
ObjPtr(NullTag) {
|
||||
mask = NullMask;
|
||||
mask = JSVAL_NULL_MASK;
|
||||
obj = NULL;
|
||||
}
|
||||
|
||||
ObjPtr(FunObjTag arg) {
|
||||
JS_ASSERT(JS_ObjectIsFunction(NULL, &arg.obj));
|
||||
mask = FunObjMask;
|
||||
mask = JSVAL_FUNOBJ_MASK;
|
||||
obj = &arg.obj;
|
||||
}
|
||||
|
||||
ObjPtr(FunObjOrNull arg) {
|
||||
JS_ASSERT_IF(arg.obj, JS_ObjectIsFunction(NULL, arg.obj));
|
||||
mask = arg.obj ? FunObjMask : NullMask;
|
||||
mask = arg.obj ? JSVAL_FUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
obj = arg.obj;
|
||||
}
|
||||
|
||||
ObjPtr(NonFunObjTag arg) {
|
||||
JS_ASSERT(!JS_ObjectIsFunction(NULL, &arg.obj));
|
||||
mask = NonFunObjMask;
|
||||
mask = JSVAL_NONFUNOBJ_MASK;
|
||||
obj = &arg.obj;
|
||||
}
|
||||
|
||||
ObjPtr(NonFunObjOrNull arg) {
|
||||
JS_ASSERT_IF(arg.obj, !JS_ObjectIsFunction(NULL, arg.obj));
|
||||
mask = arg.obj ? NonFunObjMask : NullMask;
|
||||
mask = arg.obj ? JSVAL_NONFUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
obj = arg.obj;
|
||||
}
|
||||
|
||||
@ -3097,11 +3094,11 @@ class ObjPtr
|
||||
/* Accessors */
|
||||
|
||||
bool isNull() const {
|
||||
return mask == NullMask;
|
||||
return mask == JSVAL_NULL_MASK;
|
||||
}
|
||||
|
||||
bool isFunObj() const {
|
||||
return mask == FunObjMask;
|
||||
return mask == JSVAL_FUNOBJ_MASK;
|
||||
}
|
||||
|
||||
JSObject &asFunObj() const {
|
||||
@ -3110,7 +3107,7 @@ class ObjPtr
|
||||
}
|
||||
|
||||
bool isNonFunObj() const {
|
||||
return mask == NonFunObjMask;
|
||||
return mask == JSVAL_NONFUNOBJ_MASK;
|
||||
}
|
||||
|
||||
JSObject &asNonFunObj() const {
|
||||
@ -3119,8 +3116,8 @@ class ObjPtr
|
||||
}
|
||||
|
||||
bool isObject() const {
|
||||
JS_ASSERT((mask != NullMask) == bool(mask & ObjectMask));
|
||||
return mask != NullMask;
|
||||
JS_ASSERT((mask != JSVAL_NULL_MASK) == bool(mask & JSVAL_OBJECT_MASK));
|
||||
return mask != JSVAL_NULL_MASK;
|
||||
}
|
||||
|
||||
operator JSObject *() const {
|
||||
@ -3140,31 +3137,31 @@ class ObjPtr
|
||||
/* Assignment */
|
||||
|
||||
void setNull() {
|
||||
mask = NullMask;
|
||||
mask = JSVAL_NULL_MASK;
|
||||
obj = NULL;
|
||||
}
|
||||
|
||||
void setFunObj(JSObject &arg) {
|
||||
JS_ASSERT(JS_ObjectIsFunction(NULL, &arg));
|
||||
mask = FunObjMask;
|
||||
mask = JSVAL_FUNOBJ_MASK;
|
||||
obj = &arg;
|
||||
}
|
||||
|
||||
void setFunObjOrNull(JSObject *arg) {
|
||||
JS_ASSERT_IF(arg, JS_ObjectIsFunction(NULL, arg));
|
||||
mask = arg ? FunObjMask : NullMask;
|
||||
mask = arg ? JSVAL_FUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
obj = arg;
|
||||
}
|
||||
|
||||
void setNonFunObj(JSObject &arg) {
|
||||
JS_ASSERT(!JS_ObjectIsFunction(NULL, &arg));
|
||||
mask = NonFunObjMask;
|
||||
mask = JSVAL_NONFUNOBJ_MASK;
|
||||
obj = &arg;
|
||||
}
|
||||
|
||||
void setNonFunObjOrNull(JSObject *arg) {
|
||||
JS_ASSERT_IF(arg, !JS_ObjectIsFunction(NULL, arg));
|
||||
mask = arg ? NonFunObjMask : NullMask;
|
||||
mask = arg ? JSVAL_NONFUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
obj = arg;
|
||||
}
|
||||
|
||||
@ -3200,29 +3197,14 @@ class Value
|
||||
*/
|
||||
friend bool StrictlyEqual(JSContext *, const Value &, const Value &);
|
||||
friend bool Interpret(JSContext *); /* grep "value representation" */
|
||||
friend bool PrimitiveThisTest(JSFunction *, const Value &);
|
||||
friend class PrimitiveValue;
|
||||
|
||||
protected:
|
||||
/* Type masks */
|
||||
typedef JSValueMaskType MaskType;
|
||||
static const MaskType NullMask = JSVAL_NULL_MASK;
|
||||
static const MaskType UndefinedMask = JSVAL_UNDEFINED_MASK;
|
||||
static const MaskType Int32Mask = JSVAL_INT32_MASK;
|
||||
static const MaskType DoubleMask = JSVAL_DOUBLE_MASK;
|
||||
static const MaskType StringMask = JSVAL_STRING_MASK;
|
||||
static const MaskType NonFunObjMask = JSVAL_NONFUNOBJ_MASK;
|
||||
static const MaskType FunObjMask = JSVAL_FUNOBJ_MASK;
|
||||
static const MaskType BooleanMask = JSVAL_BOOLEAN_MASK;
|
||||
static const MaskType MagicMask = JSVAL_MAGIC_MASK;
|
||||
|
||||
/* Standard collections of types. */
|
||||
static const MaskType NumberMask = Int32Mask | DoubleMask;
|
||||
static const MaskType ObjectMask = NonFunObjMask | FunObjMask;
|
||||
static const MaskType GCThingMask = ObjectMask | StringMask;
|
||||
|
||||
static bool isSingleton(MaskType m) { return !(m & ~UndefinedMask); }
|
||||
static bool isObjectOrNull(MaskType m) { return !(m & ~ObjectMask); }
|
||||
static bool isSingleton(MaskType m) { return !(m & ~JSVAL_UNDEFINED_MASK); }
|
||||
static bool isObjectOrNull(MaskType m) { return !(m & ~JSVAL_OBJECT_MASK); }
|
||||
|
||||
union Data
|
||||
{
|
||||
@ -3261,59 +3243,59 @@ class Value
|
||||
}
|
||||
|
||||
Value(NullTag) {
|
||||
mask = NullMask;
|
||||
mask = JSVAL_NULL_MASK;
|
||||
data.obj = NULL;
|
||||
}
|
||||
|
||||
Value(UndefinedTag) {
|
||||
mask = UndefinedMask;
|
||||
mask = JSVAL_UNDEFINED_MASK;
|
||||
/* N.B. data is undefined */
|
||||
}
|
||||
|
||||
Value(Int32Tag arg) {
|
||||
mask = Int32Mask;
|
||||
mask = JSVAL_INT32_MASK;
|
||||
data.i32 = arg.i32;
|
||||
}
|
||||
|
||||
Value(DoubleTag arg) {
|
||||
mask = DoubleMask;
|
||||
mask = JSVAL_DOUBLE_MASK;
|
||||
data.dbl = arg.dbl;
|
||||
}
|
||||
|
||||
inline Value(NumberTag arg);
|
||||
|
||||
Value(JSString *arg) {
|
||||
mask = StringMask;
|
||||
mask = JSVAL_STRING_MASK;
|
||||
data.str = arg;
|
||||
}
|
||||
|
||||
Value(FunObjTag arg) {
|
||||
JS_ASSERT(JS_ObjectIsFunction(NULL, &arg.obj));
|
||||
mask = FunObjMask;
|
||||
mask = JSVAL_FUNOBJ_MASK;
|
||||
data.obj = &arg.obj;
|
||||
}
|
||||
|
||||
Value(FunObjOrNull arg) {
|
||||
JS_ASSERT_IF(arg.obj, JS_ObjectIsFunction(NULL, arg.obj));
|
||||
mask = arg.obj ? FunObjMask : NullMask;
|
||||
mask = arg.obj ? JSVAL_FUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
data.obj = arg.obj;
|
||||
}
|
||||
|
||||
Value(FunObjOrUndefinedTag arg) {
|
||||
JS_ASSERT_IF(arg.obj, JS_ObjectIsFunction(NULL, arg.obj));
|
||||
mask = arg.obj ? FunObjMask : UndefinedMask;
|
||||
mask = arg.obj ? JSVAL_FUNOBJ_MASK : JSVAL_UNDEFINED_MASK;
|
||||
data.obj = arg.obj;
|
||||
}
|
||||
|
||||
Value(NonFunObjTag arg) {
|
||||
JS_ASSERT(JS_ObjectIsFunction(NULL, &arg.obj));
|
||||
mask = NonFunObjMask;
|
||||
mask = JSVAL_NONFUNOBJ_MASK;
|
||||
data.obj = &arg.obj;
|
||||
}
|
||||
|
||||
Value(NonFunObjOrNull arg) {
|
||||
JS_ASSERT_IF(arg.obj, !JS_ObjectIsFunction(NULL, arg.obj));
|
||||
mask = arg.obj ? NonFunObjMask : NullMask;
|
||||
mask = arg.obj ? JSVAL_NONFUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
data.obj = arg.obj;
|
||||
}
|
||||
|
||||
@ -3321,12 +3303,12 @@ class Value
|
||||
inline Value(ObjectOrNullTag arg);
|
||||
|
||||
Value(BooleanTag arg) {
|
||||
mask = BooleanMask;
|
||||
mask = JSVAL_BOOLEAN_MASK;
|
||||
data.boo = arg.boo;
|
||||
}
|
||||
|
||||
Value(JSWhyMagic arg) {
|
||||
mask = MagicMask;
|
||||
mask = JSVAL_MAGIC_MASK;
|
||||
#ifdef DEBUG
|
||||
data.why = arg;
|
||||
#endif
|
||||
@ -3344,17 +3326,17 @@ class Value
|
||||
/* Mutators */
|
||||
|
||||
void setNull() {
|
||||
mask = NullMask;
|
||||
mask = JSVAL_NULL_MASK;
|
||||
data.obj = NULL;
|
||||
}
|
||||
|
||||
void setUndefined() {
|
||||
/* N.B. data is undefined. */
|
||||
mask = UndefinedMask;
|
||||
mask = JSVAL_UNDEFINED_MASK;
|
||||
}
|
||||
|
||||
void setInt32(int32 i) {
|
||||
mask = Int32Mask;
|
||||
mask = JSVAL_INT32_MASK;
|
||||
data.i32 = i;
|
||||
}
|
||||
|
||||
@ -3365,7 +3347,7 @@ class Value
|
||||
|
||||
void setDouble(double d) {
|
||||
JS_ASSERT(size_t(&data.dbl) % sizeof(double) == 0);
|
||||
mask = DoubleMask;
|
||||
mask = JSVAL_DOUBLE_MASK;
|
||||
data.dbl = d;
|
||||
}
|
||||
|
||||
@ -3373,10 +3355,10 @@ class Value
|
||||
|
||||
void setNumber(uint32 ui) {
|
||||
if (ui > JSVAL_INT_MAX) {
|
||||
mask = DoubleMask;
|
||||
mask = JSVAL_DOUBLE_MASK;
|
||||
data.dbl = ui;
|
||||
} else {
|
||||
mask = Int32Mask;
|
||||
mask = JSVAL_INT32_MASK;
|
||||
data.i32 = ui;
|
||||
}
|
||||
}
|
||||
@ -3388,37 +3370,37 @@ class Value
|
||||
}
|
||||
|
||||
void setString(JSString *str) {
|
||||
mask = StringMask;
|
||||
mask = JSVAL_STRING_MASK;
|
||||
data.str = str;
|
||||
}
|
||||
|
||||
void setFunObj(JSObject &arg) {
|
||||
JS_ASSERT(JS_ObjectIsFunction(NULL, &arg));
|
||||
mask = FunObjMask;
|
||||
mask = JSVAL_FUNOBJ_MASK;
|
||||
data.obj = &arg;
|
||||
}
|
||||
|
||||
void setFunObjOrNull(JSObject *arg) {
|
||||
JS_ASSERT_IF(arg, JS_ObjectIsFunction(NULL, arg));
|
||||
mask = arg ? FunObjMask : NullMask;
|
||||
mask = arg ? JSVAL_FUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
data.obj = arg;
|
||||
}
|
||||
|
||||
void setFunObjOrUndefined(JSObject *arg) {
|
||||
JS_ASSERT_IF(arg, JS_ObjectIsFunction(NULL, arg));
|
||||
mask = arg ? FunObjMask : UndefinedMask;
|
||||
mask = arg ? JSVAL_FUNOBJ_MASK : JSVAL_UNDEFINED_MASK;
|
||||
data.obj = arg;
|
||||
}
|
||||
|
||||
void setNonFunObj(JSObject &arg) {
|
||||
JS_ASSERT(!JS_ObjectIsFunction(NULL, &arg));
|
||||
mask = NonFunObjMask;
|
||||
mask = JSVAL_NONFUNOBJ_MASK;
|
||||
data.obj = &arg;
|
||||
}
|
||||
|
||||
void setNonFunObjOrNull(JSObject *arg) {
|
||||
JS_ASSERT_IF(arg, !JS_ObjectIsFunction(NULL, arg));
|
||||
mask = arg ? NonFunObjMask : NullMask;
|
||||
mask = arg ? JSVAL_NONFUNOBJ_MASK : JSVAL_NULL_MASK;
|
||||
data.obj = arg;
|
||||
}
|
||||
|
||||
@ -3426,12 +3408,12 @@ class Value
|
||||
inline void setObjectOrNull(JSObject *arg);
|
||||
|
||||
void setBoolean(bool b) {
|
||||
mask = BooleanMask;
|
||||
mask = JSVAL_BOOLEAN_MASK;
|
||||
data.boo = b;
|
||||
}
|
||||
|
||||
void setMagic(JSWhyMagic why) {
|
||||
mask = MagicMask;
|
||||
mask = JSVAL_MAGIC_MASK;
|
||||
#ifdef DEBUG
|
||||
data.why = why;
|
||||
#endif
|
||||
@ -3463,11 +3445,11 @@ class Value
|
||||
/* Accessors */
|
||||
|
||||
bool isUndefined() const {
|
||||
return mask == UndefinedMask;
|
||||
return mask == JSVAL_UNDEFINED_MASK;
|
||||
}
|
||||
|
||||
bool isNull() const {
|
||||
return mask == NullMask;
|
||||
return mask == JSVAL_NULL_MASK;
|
||||
}
|
||||
|
||||
bool isNullOrUndefined() const {
|
||||
@ -3475,7 +3457,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isInt32() const {
|
||||
return mask == Int32Mask;
|
||||
return mask == JSVAL_INT32_MASK;
|
||||
}
|
||||
|
||||
int32 asInt32() const {
|
||||
@ -3488,7 +3470,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isDouble() const {
|
||||
return mask == DoubleMask;
|
||||
return mask == JSVAL_DOUBLE_MASK;
|
||||
}
|
||||
|
||||
double asDouble() const {
|
||||
@ -3497,7 +3479,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isNumber() const {
|
||||
return bool(mask & NumberMask);
|
||||
return bool(mask & JSVAL_NUMBER_MASK);
|
||||
}
|
||||
|
||||
double asNumber() const {
|
||||
@ -3506,7 +3488,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isString() const {
|
||||
return mask == StringMask;
|
||||
return mask == JSVAL_STRING_MASK;
|
||||
}
|
||||
|
||||
JSString *asString() const {
|
||||
@ -3515,7 +3497,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isNonFunObj() const {
|
||||
return mask == NonFunObjMask;
|
||||
return mask == JSVAL_NONFUNOBJ_MASK;
|
||||
}
|
||||
|
||||
JSObject &asNonFunObj() const {
|
||||
@ -3524,7 +3506,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isFunObj() const {
|
||||
return mask == FunObjMask;
|
||||
return mask == JSVAL_FUNOBJ_MASK;
|
||||
}
|
||||
|
||||
JSObject &asFunObj() const {
|
||||
@ -3533,7 +3515,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isObject() const {
|
||||
return bool(mask & ObjectMask);
|
||||
return bool(mask & JSVAL_OBJECT_MASK);
|
||||
}
|
||||
|
||||
bool isPrimitive() const {
|
||||
@ -3560,7 +3542,7 @@ class Value
|
||||
}
|
||||
|
||||
bool isGCThing() const {
|
||||
return bool(mask & GCThingMask);
|
||||
return bool(mask & JSVAL_GCTHING_MASK);
|
||||
}
|
||||
|
||||
void *asGCThing() const {
|
||||
@ -3570,19 +3552,19 @@ class Value
|
||||
|
||||
int32 traceKind() const {
|
||||
JS_ASSERT(isGCThing());
|
||||
return mask == StringMask;
|
||||
return mask == JSVAL_STRING_MASK;
|
||||
}
|
||||
|
||||
bool isBoolean() const {
|
||||
return mask == BooleanMask;
|
||||
return mask == JSVAL_BOOLEAN_MASK;
|
||||
}
|
||||
|
||||
bool isTrue() const {
|
||||
return (mask == BooleanMask) & data.boo;
|
||||
return (mask == JSVAL_BOOLEAN_MASK) & data.boo;
|
||||
}
|
||||
|
||||
bool isFalse() const {
|
||||
return (mask == BooleanMask) & !data.boo;
|
||||
return (mask == JSVAL_BOOLEAN_MASK) & !data.boo;
|
||||
}
|
||||
|
||||
bool asBoolean() const {
|
||||
@ -3591,16 +3573,16 @@ class Value
|
||||
}
|
||||
|
||||
bool isMagic() const {
|
||||
return mask == MagicMask;
|
||||
return mask == JSVAL_MAGIC_MASK;
|
||||
}
|
||||
|
||||
bool isMagic(JSWhyMagic why) const {
|
||||
JS_ASSERT_IF(mask == MagicMask, data.why == why);
|
||||
JS_ASSERT_IF(mask == JSVAL_MAGIC_MASK, data.why == why);
|
||||
return isMagic();
|
||||
}
|
||||
|
||||
JSWhyMagic whyMagic() const {
|
||||
JS_ASSERT(mask == MagicMask);
|
||||
JS_ASSERT(mask == JSVAL_MAGIC_MASK);
|
||||
return data.why;
|
||||
}
|
||||
|
||||
@ -3614,32 +3596,32 @@ class Value
|
||||
*/
|
||||
|
||||
Value(PrivateVoidPtrTag arg) {
|
||||
mask = Int32Mask;
|
||||
mask = JSVAL_INT32_MASK;
|
||||
data.ptr = arg.ptr;
|
||||
}
|
||||
|
||||
void setPrivateVoidPtr(void *ptr) {
|
||||
mask = Int32Mask;
|
||||
mask = JSVAL_INT32_MASK;
|
||||
data.ptr = ptr;
|
||||
}
|
||||
|
||||
void *asPrivateVoidPtr() const {
|
||||
JS_ASSERT(mask == Int32Mask);
|
||||
JS_ASSERT(mask == JSVAL_INT32_MASK);
|
||||
return data.ptr;
|
||||
}
|
||||
|
||||
void setPrivateUint32(uint32 u) {
|
||||
mask = Int32Mask;
|
||||
mask = JSVAL_INT32_MASK;
|
||||
data.u32 = u;
|
||||
}
|
||||
|
||||
uint32 asPrivateUint32() const {
|
||||
JS_ASSERT(mask == Int32Mask);
|
||||
JS_ASSERT(mask == JSVAL_INT32_MASK);
|
||||
return data.u32;
|
||||
}
|
||||
|
||||
uint32 &asPrivateUint32Ref() {
|
||||
JS_ASSERT(mask == Int32Mask);
|
||||
JS_ASSERT(mask == JSVAL_INT32_MASK);
|
||||
return data.u32;
|
||||
}
|
||||
};
|
||||
@ -3666,7 +3648,7 @@ JS_STATIC_ASSERT(sizeof(CopyableValue) == sizeof(Value));
|
||||
inline CopyableValue ©able_cast(Value &v) { return static_cast<CopyableValue &>(v); }
|
||||
inline const CopyableValue ©able_cast(const Value &v) { return static_cast<const CopyableValue &>(v); }
|
||||
|
||||
JS_ALWAYS_INLINE
|
||||
inline
|
||||
Value::Value(const CopyableValue &v) {
|
||||
mask = v.mask;
|
||||
data = v.data;
|
||||
@ -3676,28 +3658,24 @@ Value::Value(const CopyableValue &v) {
|
||||
* As asserted above, js::Value and jsval are layout equivalent. To provide
|
||||
* widespread casting, the following safe casts are provided.
|
||||
*/
|
||||
static JS_ALWAYS_INLINE jsval * Jsvalify(Value *v) { return (jsval *)v; }
|
||||
static JS_ALWAYS_INLINE const jsval * Jsvalify(const Value *v) { return (const jsval *)v; }
|
||||
static JS_ALWAYS_INLINE jsval & Jsvalify(Value &v) { return (jsval &)v; }
|
||||
static JS_ALWAYS_INLINE const jsval & Jsvalify(const Value &v) { return (const jsval &)v; }
|
||||
static JS_ALWAYS_INLINE Value * Valueify(jsval *v) { return (Value *)v; }
|
||||
static JS_ALWAYS_INLINE const Value * Valueify(const jsval *v) { return (const Value *)v; }
|
||||
static JS_ALWAYS_INLINE Value & Valueify(jsval &v) { return (Value &)v; }
|
||||
static JS_ALWAYS_INLINE const Value & Valueify(const jsval &v) { return (const Value &)v; }
|
||||
static inline jsval * Jsvalify(Value *v) { return (jsval *)v; }
|
||||
static inline const jsval * Jsvalify(const Value *v) { return (const jsval *)v; }
|
||||
static inline jsval & Jsvalify(Value &v) { return (jsval &)v; }
|
||||
static inline const jsval & Jsvalify(const Value &v) { return (const jsval &)v; }
|
||||
static inline Value * Valueify(jsval *v) { return (Value *)v; }
|
||||
static inline const Value * Valueify(const jsval *v) { return (const Value *)v; }
|
||||
static inline Value & Valueify(jsval &v) { return (Value &)v; }
|
||||
static inline const Value & Valueify(const jsval &v) { return (const Value &)v; }
|
||||
|
||||
JS_ALWAYS_INLINE bool
|
||||
inline bool
|
||||
equalTypeAndPayload(const Value &l, const Value &r)
|
||||
{
|
||||
return EQUAL_TYPE_AND_PAYLOAD(Jsvalify(&l), Jsvalify(&r));
|
||||
}
|
||||
|
||||
/*
|
||||
* N.B. It is more efficient to use setNull/isNull/setUndefined/isUndefined
|
||||
* than to copy/compare these global values.
|
||||
*/
|
||||
extern const Value sNullValue;
|
||||
extern const Value sUndefinedValue;
|
||||
extern const ObjPtr sNullObjPtr;
|
||||
/* Convenience inlines. */
|
||||
static inline CopyableValue undefinedValue() { return copyable_cast(Value(UndefinedTag())); }
|
||||
static inline CopyableValue nullValue() { return copyable_cast(Value(NullTag())); }
|
||||
|
||||
/*
|
||||
* js::Class is layout compatible and thus
|
||||
|
@ -1162,7 +1162,7 @@ js_MakeArraySlow(JSContext *cx, JSObject *obj)
|
||||
jsid id;
|
||||
JSScopeProperty *sprop;
|
||||
|
||||
if (!JS_ValueToId(cx, INT_TO_JSVAL(i), &id))
|
||||
if (!ValueToId(cx, Int32Tag(i), &id))
|
||||
goto out_bad;
|
||||
|
||||
if (obj->getDenseArrayElement(i).isMagic(JS_ARRAY_HOLE)) {
|
||||
@ -2108,7 +2108,7 @@ array_sort(JSContext *cx, uintN argc, Value *vp)
|
||||
while (undefs != 0) {
|
||||
--undefs;
|
||||
if (!JS_CHECK_OPERATION_LIMIT(cx) ||
|
||||
!SetArrayElement(cx, obj, newlen++, sUndefinedValue)) {
|
||||
!SetArrayElement(cx, obj, newlen++, Value(UndefinedTag()))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -2696,7 +2696,7 @@ array_indexOfHelper(JSContext *cx, JSBool isLast, uintN argc, Value *vp)
|
||||
|
||||
if (argc <= 1) {
|
||||
i = isLast ? length - 1 : 0;
|
||||
tosearch.copy((argc != 0) ? vp[2] : sUndefinedValue);
|
||||
tosearch.copy((argc != 0) ? vp[2] : Value(UndefinedTag()));
|
||||
} else {
|
||||
jsdouble start;
|
||||
|
||||
|
@ -1311,7 +1311,7 @@ js_InternNonIntElementIdSlow(JSContext *cx, JSObject *obj, const Value &idval,
|
||||
}
|
||||
|
||||
if (js_ValueToStringId(cx, idval, idp)) {
|
||||
vp->setString(ATOM_TO_STRING(JSID_TO_ATOM(*idp)));
|
||||
vp->setString(JSID_TO_STRING(*idp));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -830,7 +830,7 @@ JS_SetWatchPoint(JSContext *cx, JSObject *obj, jsid id,
|
||||
sprop = js_FindWatchPoint(rt, obj->scope(), propid);
|
||||
if (!sprop) {
|
||||
/* Make a new property in obj so we can watch for the first set. */
|
||||
if (!js_DefineNativeProperty(cx, obj, propid, sUndefinedValue, NULL, NULL,
|
||||
if (!js_DefineNativeProperty(cx, obj, propid, Value(UndefinedTag()), NULL, NULL,
|
||||
JSPROP_ENUMERATE, 0, 0, &prop)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
@ -844,9 +844,10 @@ JS_SetWatchPoint(JSContext *cx, JSObject *obj, jsid id,
|
||||
intN shortid;
|
||||
|
||||
if (pobj->isNative()) {
|
||||
value.copy(SPROP_HAS_VALID_SLOT(sprop, pobj->scope())
|
||||
? pobj->lockedGetSlot(sprop->slot)
|
||||
: sUndefinedValue);
|
||||
if (SPROP_HAS_VALID_SLOT(sprop, pobj->scope()))
|
||||
value.copy(pobj->lockedGetSlot(sprop->slot));
|
||||
else
|
||||
value.setUndefined();
|
||||
getter = sprop->getter();
|
||||
setter = sprop->setter();
|
||||
attrs = sprop->attributes();
|
||||
|
@ -1041,8 +1041,7 @@ js_InitExceptionClasses(JSContext *cx, JSObject *obj)
|
||||
}
|
||||
|
||||
/* Add the name property to the prototype. */
|
||||
if (!JS_DefineProperty(cx, proto, js_name_str,
|
||||
STRING_TO_JSVAL(ATOM_TO_STRING(atom)),
|
||||
if (!JS_DefineProperty(cx, proto, js_name_str, ATOM_TO_JSVAL(atom),
|
||||
NULL, NULL, JSPROP_ENUMERATE)) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -602,7 +602,8 @@ args_resolve(JSContext *cx, JSObject *obj, jsid id, uintN flags,
|
||||
* XXX ECMA specs DontEnum even for indexed properties, contrary to
|
||||
* other array-like objects.
|
||||
*/
|
||||
if (!js_DefineProperty(cx, obj, id, &sUndefinedValue, ArgGetter, ArgSetter, JSPROP_SHARED))
|
||||
Value undef = undefinedValue();
|
||||
if (!js_DefineProperty(cx, obj, id, &undef, ArgGetter, ArgSetter, JSPROP_SHARED))
|
||||
return JS_FALSE;
|
||||
*objp = obj;
|
||||
}
|
||||
@ -1218,7 +1219,7 @@ call_resolve(JSContext *cx, JSObject *obj, jsid id, uintN flags,
|
||||
getter = js_GetCallVarChecked;
|
||||
}
|
||||
}
|
||||
if (!js_DefineNativeProperty(cx, obj, id, sUndefinedValue, getter, setter,
|
||||
if (!js_DefineNativeProperty(cx, obj, id, Value(UndefinedTag()), getter, setter,
|
||||
attrs, JSScopeProperty::HAS_SHORTID, (int16) slot,
|
||||
NULL, JSDNP_DONT_PURGE)) {
|
||||
return JS_FALSE;
|
||||
@ -1232,7 +1233,7 @@ call_resolve(JSContext *cx, JSObject *obj, jsid id, uintN flags,
|
||||
* arguments object reference in a Call prototype's |arguments| slot.
|
||||
*/
|
||||
if (id == ATOM_TO_JSID(cx->runtime->atomState.argumentsAtom)) {
|
||||
if (!js_DefineNativeProperty(cx, obj, id, sUndefinedValue,
|
||||
if (!js_DefineNativeProperty(cx, obj, id, Value(UndefinedTag()),
|
||||
GetCallArguments, SetCallArguments,
|
||||
JSPROP_PERMANENT | JSPROP_SHARED,
|
||||
0, 0, NULL, JSDNP_DONT_PURGE)) {
|
||||
@ -1499,7 +1500,7 @@ fun_resolve(JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp)
|
||||
JS_ASSERT(!IsInternalFunctionObject(obj));
|
||||
|
||||
if (!js_DefineNativeProperty(cx, obj,
|
||||
ATOM_TO_JSID(atom), sUndefinedValue,
|
||||
ATOM_TO_JSID(atom), Value(UndefinedTag()),
|
||||
fun_getProperty, PropertyStub,
|
||||
lfp->attrs, JSScopeProperty::HAS_SHORTID,
|
||||
lfp->tinyid, NULL)) {
|
||||
|
@ -1187,7 +1187,7 @@ js_AddRootRT(JSRuntime *rt, Value *vp, const char *name)
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_AddRootRT(JSRuntime *rt, void **rp, const char *name)
|
||||
js_AddGCThingRootRT(JSRuntime *rt, void **rp, const char *name)
|
||||
{
|
||||
/*
|
||||
* Due to the long-standing, but now removed, use of rt->gcLock across the
|
||||
|
@ -397,13 +397,13 @@ namespace js {
|
||||
|
||||
const Value::MaskType PrimitiveValue::Masks[PrimitiveValue::THISP_ARRAY_SIZE] = {
|
||||
0, /* 000 */
|
||||
Value::StringMask, /* 001 */
|
||||
Value::NumberMask, /* 010 */
|
||||
Value::NumberMask | Value::StringMask, /* 011 */
|
||||
Value::BooleanMask, /* 100 */
|
||||
Value::BooleanMask | Value::StringMask, /* 101 */
|
||||
Value::BooleanMask | Value::NumberMask, /* 110 */
|
||||
Value::BooleanMask | Value::NumberMask | Value::StringMask /* 111 */
|
||||
JSVAL_STRING_MASK, /* 001 */
|
||||
JSVAL_NUMBER_MASK, /* 010 */
|
||||
JSVAL_NUMBER_MASK | JSVAL_STRING_MASK, /* 011 */
|
||||
JSVAL_BOOLEAN_MASK, /* 100 */
|
||||
JSVAL_BOOLEAN_MASK | JSVAL_STRING_MASK, /* 101 */
|
||||
JSVAL_BOOLEAN_MASK | JSVAL_NUMBER_MASK, /* 110 */
|
||||
JSVAL_BOOLEAN_MASK | JSVAL_NUMBER_MASK | JSVAL_STRING_MASK /* 111 */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -486,7 +486,7 @@ Invoke(JSContext *cx, const InvokeArgsGuard &args, uintN flags)
|
||||
vp[1].setObjectOrNull(parent);
|
||||
} else if (vp[1].isPrimitive()) {
|
||||
JS_ASSERT(!(flags & JSINVOKE_CONSTRUCT));
|
||||
if (PrimitiveThisTest(fun, vp[1]))
|
||||
if (PrimitiveValue::test(fun, vp[1]))
|
||||
goto start_call;
|
||||
}
|
||||
}
|
||||
@ -960,7 +960,7 @@ EqualObjects(JSContext *cx, JSObject *lobj, JSObject *robj)
|
||||
bool
|
||||
StrictlyEqual(JSContext *cx, const Value &lval, const Value &rval)
|
||||
{
|
||||
JS_STATIC_ASSERT(Value::NullMask == 0);
|
||||
JS_STATIC_ASSERT(JSVAL_NULL_MASK == 0);
|
||||
|
||||
Value::MaskType lmask = lval.mask, rmask = rval.mask;
|
||||
Value::MaskType maskor = lmask | rmask;
|
||||
@ -968,27 +968,27 @@ StrictlyEqual(JSContext *cx, const Value &lval, const Value &rval)
|
||||
if (lmask == rmask) {
|
||||
if (Value::isSingleton(lmask))
|
||||
return true;
|
||||
if (lmask == Value::Int32Mask)
|
||||
if (lmask == JSVAL_INT32_MASK)
|
||||
return lval.data.i32 == rval.data.i32;
|
||||
if (lmask == Value::DoubleMask)
|
||||
if (lmask == JSVAL_DOUBLE_MASK)
|
||||
return JSDOUBLE_COMPARE(lval.data.dbl, ==, rval.data.dbl, JS_FALSE);
|
||||
if (lmask == Value::StringMask)
|
||||
if (lmask == JSVAL_STRING_MASK)
|
||||
return js_EqualStrings(lval.data.str, rval.data.str);
|
||||
if (lmask & Value::ObjectMask)
|
||||
if (lmask & JSVAL_OBJECT_MASK)
|
||||
return EqualObjects(cx, lval.data.obj, rval.data.obj);
|
||||
JS_ASSERT(lmask == Value::BooleanMask);
|
||||
JS_ASSERT(lmask == JSVAL_BOOLEAN_MASK);
|
||||
return lval.data.boo == rval.data.boo;
|
||||
}
|
||||
|
||||
/* Watch out for null */
|
||||
|
||||
if (maskor == Value::NumberMask) {
|
||||
double ld = lmask == Value::DoubleMask ? lval.data.dbl : lval.data.i32;
|
||||
double rd = rmask == Value::DoubleMask ? rval.data.dbl : rval.data.i32;
|
||||
if (maskor == JSVAL_NUMBER_MASK) {
|
||||
double ld = lmask == JSVAL_DOUBLE_MASK ? lval.data.dbl : lval.data.i32;
|
||||
double rd = rmask == JSVAL_DOUBLE_MASK ? rval.data.dbl : rval.data.i32;
|
||||
return JSDOUBLE_COMPARE(ld, ==, rd, JS_FALSE);
|
||||
}
|
||||
|
||||
if (maskor == Value::ObjectMask)
|
||||
if (maskor == JSVAL_OBJECT_MASK)
|
||||
return EqualObjects(cx, lval.data.obj, rval.data.obj);
|
||||
|
||||
return false;
|
||||
@ -1184,27 +1184,27 @@ IdToValue(jsid id)
|
||||
}
|
||||
|
||||
bool
|
||||
ValueToId(JSContext *cx, const Value *vp, jsid *idp)
|
||||
ValueToId(JSContext *cx, const Value &v, jsid *idp)
|
||||
{
|
||||
int32_t i;
|
||||
if (ValueFitsInInt32(*vp, &i) && INT32_FITS_IN_JSID(i)) {
|
||||
if (ValueFitsInInt32(v, &i) && INT32_FITS_IN_JSID(i)) {
|
||||
*idp = INT_TO_JSID(i);
|
||||
return true;
|
||||
}
|
||||
|
||||
#if JS_HAS_XML_SUPPORT
|
||||
if (vp->isObject()) {
|
||||
Class *clasp = vp->asObject().getClass();
|
||||
if (v.isObject()) {
|
||||
Class *clasp = v.asObject().getClass();
|
||||
if (JS_UNLIKELY(clasp == &js_QNameClass.base ||
|
||||
clasp == &js_AttributeNameClass ||
|
||||
clasp == &js_AnyNameClass)) {
|
||||
*idp = OBJECT_TO_JSID(&vp->asObject());
|
||||
*idp = OBJECT_TO_JSID(&v.asObject());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return js_ValueToStringId(cx, *vp, idp);
|
||||
return js_ValueToStringId(cx, v, idp);
|
||||
}
|
||||
|
||||
} /* namespace js */
|
||||
@ -2592,7 +2592,7 @@ Interpret(JSContext *cx)
|
||||
if (!ok)
|
||||
goto error;
|
||||
cx->throwing = true;
|
||||
cx->exception = tvr.value();
|
||||
cx->exception.copy(tvr.value());
|
||||
}
|
||||
}
|
||||
} while (++tn != tnlimit);
|
||||
|
@ -1014,7 +1014,7 @@ CloseGenerator(JSContext *cx, JSObject *obj)
|
||||
if (gen->state == JSGEN_CLOSED)
|
||||
return JS_TRUE;
|
||||
|
||||
return SendToGenerator(cx, JSGENOP_CLOSE, obj, gen, sUndefinedValue);
|
||||
return SendToGenerator(cx, JSGENOP_CLOSE, obj, gen, Value(UndefinedTag()));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1062,7 +1062,7 @@ generator_op(JSContext *cx, JSGeneratorOp op, Value *vp, uintN argc)
|
||||
case JSGENOP_SEND:
|
||||
return js_ThrowStopIteration(cx);
|
||||
case JSGENOP_THROW:
|
||||
SetPendingException(cx, argc >= 1 ? vp[2] : sUndefinedValue);
|
||||
SetPendingException(cx, argc >= 1 ? vp[2] : Value(UndefinedTag()));
|
||||
return JS_FALSE;
|
||||
default:
|
||||
JS_ASSERT(op == JSGENOP_CLOSE);
|
||||
@ -1071,7 +1071,7 @@ generator_op(JSContext *cx, JSGeneratorOp op, Value *vp, uintN argc)
|
||||
}
|
||||
|
||||
bool undef = ((op == JSGENOP_SEND || op == JSGENOP_THROW) && argc != 0);
|
||||
if (!SendToGenerator(cx, op, obj, gen, undef ? vp[2] : sUndefinedValue))
|
||||
if (!SendToGenerator(cx, op, obj, gen, undef ? vp[2] : Value(UndefinedTag())))
|
||||
return JS_FALSE;
|
||||
vp->copy(gen->getFloatingFrame()->rval);
|
||||
return JS_TRUE;
|
||||
|
@ -1510,7 +1510,7 @@ js_HasOwnPropertyHelper(JSContext *cx, JSLookupPropOp lookup, uintN argc,
|
||||
Value *vp)
|
||||
{
|
||||
jsid id;
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : sUndefinedValue, &id))
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : Value(UndefinedTag()), &id))
|
||||
return JS_FALSE;
|
||||
|
||||
JSObject *obj = ComputeThisObjectFromVp(cx, vp);
|
||||
@ -1586,7 +1586,7 @@ obj_isPrototypeOf(JSContext *cx, uintN argc, Value *vp)
|
||||
JSObject *obj = ComputeThisObjectFromVp(cx, vp);
|
||||
if (!obj)
|
||||
return JS_FALSE;
|
||||
const Value &v = argc != 0 ? vp[2] : sUndefinedValue;
|
||||
const Value &v = argc != 0 ? vp[2] : Value(UndefinedTag());
|
||||
vp->setBoolean(js_IsDelegate(cx, obj, v));
|
||||
return JS_TRUE;
|
||||
}
|
||||
@ -1596,7 +1596,7 @@ static JSBool
|
||||
obj_propertyIsEnumerable(JSContext *cx, uintN argc, Value *vp)
|
||||
{
|
||||
jsid id;
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : sUndefinedValue, &id))
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : Value(UndefinedTag()), &id))
|
||||
return JS_FALSE;
|
||||
|
||||
JSObject *obj = ComputeThisObjectFromVp(cx, vp);
|
||||
@ -1678,7 +1678,7 @@ js_obj_defineGetter(JSContext *cx, uintN argc, Value *vp)
|
||||
if (!obj->checkAccess(cx, id, JSACC_WATCH, &junk, &attrs))
|
||||
return JS_FALSE;
|
||||
vp->setUndefined();
|
||||
return obj->defineProperty(cx, id, sUndefinedValue, getter, PropertyStub,
|
||||
return obj->defineProperty(cx, id, Value(UndefinedTag()), getter, PropertyStub,
|
||||
JSPROP_ENUMERATE | JSPROP_GETTER | JSPROP_SHARED);
|
||||
}
|
||||
|
||||
@ -1708,7 +1708,7 @@ js_obj_defineSetter(JSContext *cx, uintN argc, Value *vp)
|
||||
if (!obj->checkAccess(cx, id, JSACC_WATCH, &junk, &attrs))
|
||||
return JS_FALSE;
|
||||
vp->setUndefined();
|
||||
return obj->defineProperty(cx, id, sUndefinedValue, PropertyStub, setter,
|
||||
return obj->defineProperty(cx, id, Value(UndefinedTag()), PropertyStub, setter,
|
||||
JSPROP_ENUMERATE | JSPROP_SETTER | JSPROP_SHARED);
|
||||
}
|
||||
|
||||
@ -1716,7 +1716,7 @@ static JSBool
|
||||
obj_lookupGetter(JSContext *cx, uintN argc, Value *vp)
|
||||
{
|
||||
jsid id;
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : sUndefinedValue, &id))
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : Value(UndefinedTag()), &id))
|
||||
return JS_FALSE;
|
||||
JSObject *obj = ComputeThisObjectFromVp(cx, vp);
|
||||
JSObject *pobj;
|
||||
@ -1739,7 +1739,7 @@ static JSBool
|
||||
obj_lookupSetter(JSContext *cx, uintN argc, Value *vp)
|
||||
{
|
||||
jsid id;
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : sUndefinedValue, &id))
|
||||
if (!ValueToId(cx, argc != 0 ? vp[2] : Value(UndefinedTag()), &id))
|
||||
return JS_FALSE;
|
||||
JSObject *obj = ComputeThisObjectFromVp(cx, vp);
|
||||
JSObject *pobj;
|
||||
@ -1864,7 +1864,7 @@ obj_getOwnPropertyDescriptor(JSContext *cx, uintN argc, Value *vp)
|
||||
}
|
||||
JSObject *obj = &vp[2].asObject();
|
||||
AutoIdRooter nameidr(cx);
|
||||
if (!ValueToId(cx, argc >= 2 ? vp[3] : sUndefinedValue, nameidr.addr()))
|
||||
if (!ValueToId(cx, argc >= 2 ? vp[3] : Value(UndefinedTag()), nameidr.addr()))
|
||||
return JS_FALSE;
|
||||
return js_GetOwnPropertyDescriptor(cx, obj, nameidr.id(), vp);
|
||||
}
|
||||
@ -1872,7 +1872,7 @@ obj_getOwnPropertyDescriptor(JSContext *cx, uintN argc, Value *vp)
|
||||
static JSBool
|
||||
obj_keys(JSContext *cx, uintN argc, Value *vp)
|
||||
{
|
||||
const Value &v = argc == 0 ? sUndefinedValue : vp[2];
|
||||
const Value &v = argc == 0 ? Value(UndefinedTag()) : vp[2];
|
||||
if (!v.isObject()) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_NOT_NONNULL_OBJECT);
|
||||
return JS_FALSE;
|
||||
@ -1902,7 +1902,7 @@ obj_keys(JSContext *cx, uintN argc, Value *vp)
|
||||
jsid id;
|
||||
if (!js_ValueToStringId(cx, idval, &id))
|
||||
return JS_FALSE;
|
||||
aobj->setDenseArrayElement(i, Value(ATOM_TO_STRING(JSID_TO_ATOM(id))));
|
||||
aobj->setDenseArrayElement(i, JSID_TO_STRING(id));
|
||||
} else {
|
||||
/*
|
||||
* Object-valued ids are a possibility admitted by SpiderMonkey for
|
||||
@ -2051,7 +2051,7 @@ Reject(JSContext *cx, uintN errorNumber, bool throwError, jsid id, bool *rval)
|
||||
if (!js_ValueToStringId(cx, IdToValue(id), &idstr))
|
||||
return JS_FALSE;
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, errorNumber,
|
||||
JS_GetStringBytes(ATOM_TO_STRING(JSID_TO_ATOM(idstr))));
|
||||
JS_GetStringBytes(JSID_TO_STRING(idstr)));
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
@ -2118,7 +2118,8 @@ DefinePropertyOnObject(JSContext *cx, JSObject *obj, const PropertyDescriptor &d
|
||||
if (!js_CheckAccess(cx, obj, desc.id, JSACC_WATCH, &dummy, &dummyAttrs))
|
||||
return JS_FALSE;
|
||||
|
||||
return js_DefineProperty(cx, obj, desc.id, &sUndefinedValue,
|
||||
Value undef = undefinedValue();
|
||||
return js_DefineProperty(cx, obj, desc.id, &undef,
|
||||
desc.getter(), desc.setter(), desc.attrs);
|
||||
}
|
||||
|
||||
@ -2428,7 +2429,7 @@ static JSBool
|
||||
obj_defineProperty(JSContext* cx, uintN argc, Value* vp)
|
||||
{
|
||||
/* 15.2.3.6 steps 1 and 5. */
|
||||
const Value &v = (argc == 0) ? sUndefinedValue : vp[2];
|
||||
const Value &v = (argc == 0) ? Value(UndefinedTag()) : vp[2];
|
||||
if (v.isPrimitive()) {
|
||||
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_NOT_NONNULL_OBJECT);
|
||||
return JS_FALSE;
|
||||
@ -2438,11 +2439,11 @@ obj_defineProperty(JSContext* cx, uintN argc, Value* vp)
|
||||
|
||||
/* 15.2.3.6 step 2. */
|
||||
AutoIdRooter nameidr(cx);
|
||||
if (!ValueToId(cx, argc >= 2 ? vp[3] : sUndefinedValue, nameidr.addr()))
|
||||
if (!ValueToId(cx, argc >= 2 ? vp[3] : Value(UndefinedTag()), nameidr.addr()))
|
||||
return JS_FALSE;
|
||||
|
||||
/* 15.2.3.6 step 3. */
|
||||
const Value &descval = argc >= 3 ? vp[4] : sUndefinedValue;
|
||||
const Value &descval = argc >= 3 ? vp[4] : Value(UndefinedTag());
|
||||
|
||||
/* 15.2.3.6 step 4 */
|
||||
JSBool junk;
|
||||
@ -3148,7 +3149,7 @@ js_DefineBlockVariable(JSContext *cx, JSObject *obj, jsid id, intN index)
|
||||
JS_ASSERT(!OBJ_IS_CLONED_BLOCK(obj));
|
||||
|
||||
/* Use JSPROP_ENUMERATE to aid the disassembler. */
|
||||
return js_DefineNativeProperty(cx, obj, id, sUndefinedValue,
|
||||
return js_DefineNativeProperty(cx, obj, id, Value(UndefinedTag()),
|
||||
block_getProperty,
|
||||
block_setProperty,
|
||||
JSPROP_ENUMERATE | JSPROP_PERMANENT | JSPROP_SHARED,
|
||||
@ -3836,7 +3837,7 @@ js_FreeSlot(JSContext *cx, JSObject *obj, uint32 slot)
|
||||
{
|
||||
JSScope *scope = obj->scope();
|
||||
JS_ASSERT(scope->object == obj);
|
||||
obj->lockedSetSlot(slot, sUndefinedValue);
|
||||
obj->lockedSetSlot(slot, Value(UndefinedTag()));
|
||||
if (scope->freeslot == slot + 1)
|
||||
scope->freeslot = slot;
|
||||
}
|
||||
@ -4877,7 +4878,7 @@ js_SetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, uintN defineHow,
|
||||
|
||||
if (!obj->getParent() &&
|
||||
(defineHow & JSDNP_UNQUALIFIED) &&
|
||||
!js_CheckUndeclaredVarAssignment(cx, ATOM_TO_STRING(JSID_TO_ATOM(id)))) {
|
||||
!js_CheckUndeclaredVarAssignment(cx, JSID_TO_STRING(id))) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
@ -5044,7 +5045,7 @@ js_SetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, uintN defineHow,
|
||||
* in js_DefineNativeProperty.
|
||||
*/
|
||||
if (SPROP_HAS_VALID_SLOT(sprop, scope))
|
||||
obj->lockedSetSlot(sprop->slot, sUndefinedValue);
|
||||
obj->lockedSetSlot(sprop->slot, Value(UndefinedTag()));
|
||||
|
||||
/* XXXbe called with obj locked */
|
||||
if (!AddPropertyHelper(cx, clasp, obj, scope, sprop, vp)) {
|
||||
@ -5794,7 +5795,7 @@ js_XDRObject(JSXDRState *xdr, JSObject **objp)
|
||||
classId = JS_XDRFindClassIdByName(xdr, clasp->name);
|
||||
classDef = !classId;
|
||||
if (classDef) {
|
||||
if (!JS_XDRRegisterClass(xdr, clasp, &classId))
|
||||
if (!JS_XDRRegisterClass(xdr, Jsvalify(clasp), &classId))
|
||||
return JS_FALSE;
|
||||
protoKey = JSCLASS_CACHED_PROTO_KEY(clasp);
|
||||
if (protoKey != JSProto_Null) {
|
||||
@ -5833,10 +5834,10 @@ js_XDRObject(JSXDRState *xdr, JSObject **objp)
|
||||
if (!js_GetClassPrototype(cx, NULL, protoKey, &proto, clasp))
|
||||
return JS_FALSE;
|
||||
clasp = proto->getClass();
|
||||
if (!JS_XDRRegisterClass(xdr, clasp, &classId))
|
||||
if (!JS_XDRRegisterClass(xdr, Jsvalify(clasp), &classId))
|
||||
return JS_FALSE;
|
||||
} else {
|
||||
clasp = JS_XDRFindClassById(xdr, classId);
|
||||
clasp = Valueify(JS_XDRFindClassById(xdr, classId));
|
||||
if (!clasp) {
|
||||
char numBuf[12];
|
||||
JS_snprintf(numBuf, sizeof numBuf, "%ld", (long)classId);
|
||||
@ -5932,7 +5933,7 @@ js_PrintObjectSlotName(JSTracer *trc, char *buf, size_t bufsize)
|
||||
if (JSID_IS_INT(id)) {
|
||||
JS_snprintf(buf, bufsize, "%ld", (long)JSID_TO_INT(id));
|
||||
} else if (JSID_IS_ATOM(id)) {
|
||||
js_PutEscapedString(buf, bufsize, ATOM_TO_STRING(JSID_TO_ATOM(id)), 0);
|
||||
js_PutEscapedString(buf, bufsize, JSID_TO_STRING(id), 0);
|
||||
} else {
|
||||
JS_snprintf(buf, bufsize, "**FINALIZED ATOM KEY**");
|
||||
}
|
||||
@ -6022,7 +6023,7 @@ js_Clear(JSContext *cx, JSObject *obj)
|
||||
i = obj->numSlots();
|
||||
n = JSSLOT_FREE(obj->getClass());
|
||||
while (--i >= n)
|
||||
obj->setSlot(i, sUndefinedValue);
|
||||
obj->setSlot(i, Value(UndefinedTag()));
|
||||
scope->freeslot = n;
|
||||
}
|
||||
JS_UNLOCK_OBJ(cx, obj);
|
||||
@ -6324,7 +6325,7 @@ dumpScopeProp(JSScopeProperty *sprop)
|
||||
if (attrs & JSPROP_SHARED) fprintf(stderr, "shared ");
|
||||
if (sprop->isAlias()) fprintf(stderr, "alias ");
|
||||
if (JSID_IS_ATOM(id))
|
||||
dumpString(ATOM_TO_STRING(JSID_TO_ATOM(id)));
|
||||
dumpString(JSID_TO_STRING(id));
|
||||
else if (JSID_IS_INT(id))
|
||||
fprintf(stderr, "%d", (int) JSID_TO_INT(id));
|
||||
else
|
||||
|
@ -433,10 +433,10 @@ struct JSObject {
|
||||
fslots[JSSLOT_PRIVATE].setPrivateVoidPtr(data);
|
||||
}
|
||||
|
||||
static const js::Value &defaultPrivate(js::Class *clasp) {
|
||||
return (clasp->flags & JSCLASS_HAS_PRIVATE)
|
||||
? js::sNullValue
|
||||
: js::sUndefinedValue;
|
||||
static js::CopyableValue defaultPrivate(js::Class *clasp) {
|
||||
if (clasp->flags & JSCLASS_HAS_PRIVATE)
|
||||
return copyable_cast(js::Value(js::NullTag()));
|
||||
return copyable_cast(js::Value(js::UndefinedTag()));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -653,56 +653,69 @@ NewObject(JSContext *cx, js::Class *clasp, JSObject *proto,
|
||||
JS_ALWAYS_INLINE
|
||||
ObjPtr::ObjPtr(ObjectTag arg)
|
||||
{
|
||||
mask = arg.obj.isFunction() ? FunObjMask : NonFunObjMask;
|
||||
mask = arg.obj.isFunction() ? JSVAL_FUNOBJ_MASK : JSVAL_NONFUNOBJ_MASK;
|
||||
obj = &arg.obj;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE
|
||||
ObjPtr::ObjPtr(ObjectOrNullTag arg)
|
||||
{
|
||||
mask = arg.obj ? arg.obj->isFunction() ? FunObjMask : NonFunObjMask : NullMask;
|
||||
if (arg.obj) {
|
||||
if (arg.obj->isFunction())
|
||||
mask = JSVAL_FUNOBJ_MASK;
|
||||
else
|
||||
mask = JSVAL_NONFUNOBJ_MASK;
|
||||
} else {
|
||||
mask = JSVAL_NULL_MASK;
|
||||
}
|
||||
obj = arg.obj;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE void
|
||||
ObjPtr::setObject(JSObject &arg)
|
||||
{
|
||||
mask = arg.isFunction() ? FunObjMask : NonFunObjMask;
|
||||
mask = arg.isFunction() ? JSVAL_FUNOBJ_MASK : JSVAL_NONFUNOBJ_MASK;
|
||||
obj = &arg;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE void
|
||||
ObjPtr::setObjectOrNull(JSObject *arg)
|
||||
{
|
||||
mask = arg ? arg->isFunction() ? FunObjMask : NonFunObjMask : NullMask;
|
||||
mask = arg ? arg->isFunction() ? JSVAL_FUNOBJ_MASK
|
||||
: JSVAL_NONFUNOBJ_MASK
|
||||
: JSVAL_NULL_MASK;
|
||||
obj = arg;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE
|
||||
Value::Value(ObjectTag arg)
|
||||
{
|
||||
mask = arg.obj.isFunction() ? FunObjMask : NonFunObjMask;
|
||||
mask = arg.obj.isFunction() ? JSVAL_FUNOBJ_MASK : JSVAL_NONFUNOBJ_MASK;
|
||||
data.obj = &arg.obj;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE
|
||||
Value::Value(ObjectOrNullTag arg)
|
||||
{
|
||||
mask = arg.obj ? arg.obj->isFunction() ? FunObjMask : NonFunObjMask : NullMask;
|
||||
mask = arg.obj ? arg.obj->isFunction() ? JSVAL_FUNOBJ_MASK
|
||||
: JSVAL_NONFUNOBJ_MASK
|
||||
: JSVAL_NULL_MASK;
|
||||
data.obj = arg.obj;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE void
|
||||
Value::setObject(JSObject &arg)
|
||||
{
|
||||
mask = arg.isFunction() ? FunObjMask : NonFunObjMask;
|
||||
mask = arg.isFunction() ? JSVAL_FUNOBJ_MASK : JSVAL_NONFUNOBJ_MASK;
|
||||
data.obj = &arg;
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE void
|
||||
Value::setObjectOrNull(JSObject *arg)
|
||||
{
|
||||
mask = arg ? arg->isFunction() ? FunObjMask : NonFunObjMask : NullMask;
|
||||
mask = arg ? arg->isFunction() ? JSVAL_FUNOBJ_MASK
|
||||
: JSVAL_NONFUNOBJ_MASK
|
||||
: JSVAL_NULL_MASK;
|
||||
data.obj = arg;
|
||||
}
|
||||
|
||||
|
@ -1188,7 +1188,7 @@ js_ConsumeJSONText(JSContext *cx, JSONParser *jp, const jschar *data, uint32 len
|
||||
static JSBool
|
||||
json_toSource(JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
*vp = STRING_TO_JSVAL(ATOM_TO_STRING(CLASS_ATOM(cx, JSON)));
|
||||
*vp = ATOM_TO_JSVAL(CLASS_ATOM(cx, JSON));
|
||||
return JS_TRUE;
|
||||
}
|
||||
#endif
|
||||
|
@ -45,8 +45,6 @@
|
||||
#define JSON_MAX_DEPTH 2048
|
||||
#define JSON_PARSER_BUFSIZE 1024
|
||||
|
||||
JS_BEGIN_EXTERN_C
|
||||
|
||||
extern js::Class js_JSONClass;
|
||||
|
||||
extern JSObject *
|
||||
@ -92,6 +90,4 @@ js_ConsumeJSONText(JSContext *cx, JSONParser *jp, const jschar *data, uint32 len
|
||||
extern bool
|
||||
js_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver);
|
||||
|
||||
JS_END_EXTERN_C
|
||||
|
||||
#endif /* json_h___ */
|
||||
|
@ -312,7 +312,7 @@ ToDisassemblySource(JSContext *cx, jsval v)
|
||||
|
||||
if (clasp == &js_RegExpClass) {
|
||||
AutoValueRooter tvr(cx);
|
||||
if (!js_regexp_toString(cx, obj, Jsvalify(tvr.addr())))
|
||||
if (!js_regexp_toString(cx, obj, tvr.addr()))
|
||||
return NULL;
|
||||
return js_GetStringBytes(cx, JSVAL_TO_STRING(Jsvalify(tvr.value())));
|
||||
}
|
||||
@ -372,7 +372,7 @@ js_Disassemble1(JSContext *cx, JSScript *script, jsbytecode *pc,
|
||||
index = js_GetIndexFromBytecode(cx, script, pc, 0);
|
||||
if (type == JOF_ATOM) {
|
||||
JS_GET_SCRIPT_ATOM(script, pc, index, atom);
|
||||
v = STRING_TO_JSVAL(ATOM_TO_STRING(atom));
|
||||
v = ATOM_TO_JSVAL(atom);
|
||||
} else {
|
||||
if (type == JOF_OBJECT)
|
||||
obj = script->getObject(index);
|
||||
@ -440,7 +440,7 @@ js_Disassemble1(JSContext *cx, JSScript *script, jsbytecode *pc,
|
||||
off = GetJumpOffset(pc, pc2);
|
||||
pc2 += jmplen;
|
||||
|
||||
bytes = ToDisassemblySource(cx, STRING_TO_JSVAL(ATOM_TO_STRING(atom)));
|
||||
bytes = ToDisassemblySource(cx, ATOM_TO_JSVAL(atom));
|
||||
if (!bytes)
|
||||
return 0;
|
||||
fprintf(fp, "\n\t%s: %d", bytes, (intN) off);
|
||||
@ -464,7 +464,7 @@ js_Disassemble1(JSContext *cx, JSScript *script, jsbytecode *pc,
|
||||
index = js_GetIndexFromBytecode(cx, script, pc, SLOTNO_LEN);
|
||||
if (type == JOF_SLOTATOM) {
|
||||
JS_GET_SCRIPT_ATOM(script, pc, index, atom);
|
||||
v = STRING_TO_JSVAL(ATOM_TO_STRING((atom)));
|
||||
v = ATOM_TO_JSVAL(atom);
|
||||
} else {
|
||||
obj = script->getObject(index);
|
||||
v = OBJECT_TO_JSVAL(obj);
|
||||
@ -4018,7 +4018,7 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop)
|
||||
|
||||
case JSOP_DOUBLE:
|
||||
GET_DOUBLE_FROM_BYTECODE(jp->script, pc, 0, atom);
|
||||
val = STRING_TO_JSVAL(ATOM_TO_STRING(atom));
|
||||
val = ATOM_TO_JSVAL(atom);
|
||||
LOCAL_ASSERT(JSVAL_IS_DOUBLE(val));
|
||||
todo = SprintDoubleValue(&ss->sprinter, val, &saveop);
|
||||
break;
|
||||
@ -4195,7 +4195,7 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop)
|
||||
case JSOP_REGEXP:
|
||||
GET_REGEXP_FROM_BYTECODE(jp->script, pc, 0, obj);
|
||||
do_regexp:
|
||||
if (!js_regexp_toString(cx, obj, &val))
|
||||
if (!js_regexp_toString(cx, obj, Valueify(&val)))
|
||||
return NULL;
|
||||
str = JSVAL_TO_STRING(val);
|
||||
goto sprint_string;
|
||||
@ -4304,7 +4304,7 @@ Decompile(SprintStack *ss, jsbytecode *pc, intN nb, JSOp nextop)
|
||||
pc2 += INDEX_LEN;
|
||||
off2 = GetJumpOffset(pc, pc2);
|
||||
pc2 += jmplen;
|
||||
table[k].key = STRING_TO_JSVAL(ATOM_TO_STRING(atom));
|
||||
table[k].key = ATOM_TO_JSVAL(atom);
|
||||
table[k].offset = off2;
|
||||
}
|
||||
|
||||
|
@ -823,8 +823,8 @@ END_CASE(JSOP_BITAND)
|
||||
*/
|
||||
#if JS_HAS_XML_SUPPORT
|
||||
#define XML_EQUALITY_OP(OP) \
|
||||
if ((lmask == Value::NonFunObjMask && lref.asObject().isXML()) || \
|
||||
(rmask == Value::NonFunObjMask && rref.asObject().isXML())) { \
|
||||
if ((lmask == JSVAL_NONFUNOBJ_MASK && lref.asObject().isXML()) || \
|
||||
(rmask == JSVAL_NONFUNOBJ_MASK && rref.asObject().isXML())) { \
|
||||
if (!js_TestXMLEquality(cx, lref, rref, &cond)) \
|
||||
goto error; \
|
||||
cond = cond OP true; \
|
||||
@ -856,41 +856,41 @@ END_CASE(JSOP_BITAND)
|
||||
if ((maskxor = lmask ^ rmask) == 0) { \
|
||||
if (Value::isSingleton(lmask)) { \
|
||||
cond = true OP true; \
|
||||
} else if (lmask == Value::Int32Mask) { \
|
||||
} else if (lmask == JSVAL_INT32_MASK) { \
|
||||
cond = lref.asInt32() OP rref.asInt32(); \
|
||||
} else if (lmask == Value::DoubleMask) { \
|
||||
} else if (lmask == JSVAL_DOUBLE_MASK) { \
|
||||
double l = lref.asDouble(), r = rref.asDouble(); \
|
||||
cond = JSDOUBLE_COMPARE(l, OP, r, IFNAN); \
|
||||
} else if (lmask & Value::ObjectMask) { \
|
||||
} else if (lmask & JSVAL_OBJECT_MASK) { \
|
||||
JSObject *l = &lref.asObject(), *r = &rref.asObject(); \
|
||||
EXTENDED_EQUALITY_OP(OP) \
|
||||
cond = l OP r; \
|
||||
} else if (lmask == Value::StringMask) { \
|
||||
} else if (lmask == JSVAL_STRING_MASK) { \
|
||||
JSString *l = lref.asString(), *r = rref.asString(); \
|
||||
cond = js_EqualStrings(l, r) OP true; \
|
||||
} else { \
|
||||
cond = lref.asBoolean() OP rref.asBoolean(); \
|
||||
} \
|
||||
} else { \
|
||||
if (maskxor == Value::UndefinedMask) { \
|
||||
if (maskxor == JSVAL_UNDEFINED_MASK) { \
|
||||
cond = true OP true; \
|
||||
} else { \
|
||||
JS_ASSERT(maskxor == (lmask | rmask)); \
|
||||
Value::MaskType maskor = maskxor; \
|
||||
if (maskor & Value::ObjectMask) { \
|
||||
if (lmask & Value::ObjectMask) { \
|
||||
if (maskor & JSVAL_OBJECT_MASK) { \
|
||||
if (lmask & JSVAL_OBJECT_MASK) { \
|
||||
if (!lref.asObject().defaultValue(cx, JSTYPE_VOID, &lref)) \
|
||||
goto error; \
|
||||
lmask = lref.mask; \
|
||||
} \
|
||||
if (rmask & Value::ObjectMask) { \
|
||||
if (rmask & JSVAL_OBJECT_MASK) { \
|
||||
if (!rref.asObject().defaultValue(cx, JSTYPE_VOID, &rref)) \
|
||||
goto error; \
|
||||
rmask = rref.mask; \
|
||||
} \
|
||||
maskor = lmask | rmask; \
|
||||
} \
|
||||
if (maskor == Value::StringMask) { \
|
||||
if (maskor == JSVAL_STRING_MASK) { \
|
||||
JSString *l = lref.asString(), *r = rref.asString(); \
|
||||
cond = js_EqualStrings(l, r) OP true; \
|
||||
} else { \
|
||||
@ -980,18 +980,18 @@ END_CASE(JSOP_CASEX)
|
||||
JSValueMaskType maskand = lmask & rmask; \
|
||||
bool cond; \
|
||||
/* Optimize for two int-tagged operands (typical loop control). */ \
|
||||
if (maskand == Value::Int32Mask) { \
|
||||
if (maskand == JSVAL_INT32_MASK) { \
|
||||
cond = lref.asInt32() OP rref.asInt32(); \
|
||||
} else { \
|
||||
if (lmask & Value::ObjectMask) { \
|
||||
if (lmask & JSVAL_OBJECT_MASK) { \
|
||||
if (!lref.asObject().defaultValue(cx, JSTYPE_NUMBER, &lref)) \
|
||||
goto error; \
|
||||
} \
|
||||
if (rmask & Value::ObjectMask) { \
|
||||
if (rmask & JSVAL_OBJECT_MASK) { \
|
||||
if (!rref.asObject().defaultValue(cx, JSTYPE_NUMBER, &rref)) \
|
||||
goto error; \
|
||||
} \
|
||||
if (maskand == Value::StringMask) { \
|
||||
if (maskand == JSVAL_STRING_MASK) { \
|
||||
JSString *l = lref.asString(), *r = rref.asString(); \
|
||||
cond = js_CompareStrings(l, r) OP 0; \
|
||||
} else { \
|
||||
@ -1072,7 +1072,7 @@ BEGIN_CASE(JSOP_ADD)
|
||||
Value::MaskType rmask = rref.mask;
|
||||
Value::MaskType lmask = lref.mask;
|
||||
|
||||
if ((lmask & rmask) == Value::Int32Mask) {
|
||||
if ((lmask & rmask) == JSVAL_INT32_MASK) {
|
||||
int32_t l = lref.asInt32(), r = rref.asInt32();
|
||||
int32_t sum = l + r;
|
||||
regs.sp--;
|
||||
@ -1082,8 +1082,8 @@ BEGIN_CASE(JSOP_ADD)
|
||||
regs.sp[-1].setInt32(sum);
|
||||
} else
|
||||
#if JS_HAS_XML_SUPPORT
|
||||
if (lmask == Value::NonFunObjMask && lref.asObject().isXML() &&
|
||||
rmask == Value::NonFunObjMask && rref.asObject().isXML()) {
|
||||
if (lmask == JSVAL_NONFUNOBJ_MASK && lref.asObject().isXML() &&
|
||||
rmask == JSVAL_NONFUNOBJ_MASK && rref.asObject().isXML()) {
|
||||
Value rval;
|
||||
if (!js_ConcatenateXML(cx, &lref.asObject(), &rref.asObject(), &rval))
|
||||
goto error;
|
||||
@ -1100,12 +1100,12 @@ BEGIN_CASE(JSOP_ADD)
|
||||
if (!rref.asObject().defaultValue(cx, JSTYPE_VOID, &rref))
|
||||
goto error;
|
||||
}
|
||||
if ((lmask | rmask) & Value::StringMask) {
|
||||
if ((lmask | rmask) & JSVAL_STRING_MASK) {
|
||||
JSString *str1, *str2;
|
||||
if (lmask == rmask) {
|
||||
str1 = lref.asString();
|
||||
str2 = rref.asString();
|
||||
} else if (lmask == Value::StringMask) {
|
||||
} else if (lmask == JSVAL_STRING_MASK) {
|
||||
str1 = lref.asString();
|
||||
str2 = js_ValueToString(cx, rref);
|
||||
if (!str2)
|
||||
@ -1832,8 +1832,8 @@ BEGIN_CASE(JSOP_CALLPROP)
|
||||
if (lval.isPrimitive()) {
|
||||
/* FIXME: https://bugzilla.mozilla.org/show_bug.cgi?id=412571 */
|
||||
if (!rval.isFunObj() ||
|
||||
!PrimitiveThisTest(GET_FUNCTION_PRIVATE(cx, &rval.asFunObj()),
|
||||
lval)) {
|
||||
!PrimitiveValue::test(GET_FUNCTION_PRIVATE(cx, &rval.asFunObj()),
|
||||
lval)) {
|
||||
if (!js_PrimitiveToObject(cx, ®s.sp[-1]))
|
||||
goto error;
|
||||
}
|
||||
@ -2403,7 +2403,7 @@ BEGIN_CASE(JSOP_APPLY)
|
||||
DTrace::enterJSFun(cx, NULL, fun, fp, argc, vp + 2, &lval);
|
||||
|
||||
JS_ASSERT(fun->u.n.extra == 0);
|
||||
JS_ASSERT(vp[1].isObject() || PrimitiveThisTest(fun, vp[1]));
|
||||
JS_ASSERT(vp[1].isObject() || PrimitiveValue::test(fun, vp[1]));
|
||||
JSBool ok = ((FastNative) fun->u.n.native)(cx, argc, vp);
|
||||
DTrace::exitJSFun(cx, NULL, fun, *vp, &lval);
|
||||
regs.sp = vp + 1;
|
||||
@ -3049,7 +3049,7 @@ BEGIN_CASE(JSOP_DEFVAR)
|
||||
|
||||
/* Bind a variable only if it's not yet defined. */
|
||||
if (!prop) {
|
||||
if (!js_DefineNativeProperty(cx, obj, id, sUndefinedValue, PropertyStub, PropertyStub,
|
||||
if (!js_DefineNativeProperty(cx, obj, id, Value(UndefinedTag()), PropertyStub, PropertyStub,
|
||||
attrs, 0, 0, &prop)) {
|
||||
goto error;
|
||||
}
|
||||
@ -3554,7 +3554,7 @@ BEGIN_CASE(JSOP_SETTER)
|
||||
if (!CheckRedeclaration(cx, obj, id, attrs, NULL, NULL))
|
||||
goto error;
|
||||
|
||||
if (!obj->defineProperty(cx, id, sUndefinedValue, getter, setter, attrs))
|
||||
if (!obj->defineProperty(cx, id, Value(UndefinedTag()), getter, setter, attrs))
|
||||
goto error;
|
||||
|
||||
regs.sp += i;
|
||||
|
@ -3922,7 +3922,7 @@ CheckDestructuring(JSContext *cx, BindData *data,
|
||||
ok = !!js_DefineNativeProperty(cx, tc->blockChain,
|
||||
ATOM_TO_JSID(cx->runtime->
|
||||
atomState.emptyAtom),
|
||||
sUndefinedValue, NULL, NULL,
|
||||
Value(UndefinedTag()), NULL, NULL,
|
||||
JSPROP_ENUMERATE |
|
||||
JSPROP_PERMANENT |
|
||||
JSPROP_SHARED,
|
||||
|
@ -623,7 +623,7 @@ JSScopeProperty::dump(JSContext *cx, FILE *fp)
|
||||
} else {
|
||||
JSString *str;
|
||||
if (JSID_IS_ATOM(id)) {
|
||||
str = ATOM_TO_STRING(JSID_TO_ATOM(id));
|
||||
str = JSID_TO_STRING(id);
|
||||
} else {
|
||||
JS_ASSERT(JSID_IS_OBJECT(id));
|
||||
str = js_ValueToString(cx, IdToValue(id));
|
||||
|
@ -183,10 +183,12 @@ typedef struct JSONParser JSONParser;
|
||||
typedef uint32 JSValueMaskType;
|
||||
# define JSVAL_TYPE_BITS 32
|
||||
# define JS_INSERT_VALUE_PADDING() uint32 padding;
|
||||
# define JS_PADDING_INIT_VALUE() 0,
|
||||
#elif JS_BITS_PER_WORD == 64
|
||||
typedef JSUint64 JSValueMaskType;
|
||||
# define JSVAL_TYPE_BITS 32
|
||||
# define JS_INSERT_VALUE_PADDING()
|
||||
# define JS_PADDING_INIT_VALUE()
|
||||
#else
|
||||
# error "Unsupported word size"
|
||||
#endif
|
||||
@ -201,6 +203,10 @@ typedef JSUint64 JSValueMaskType;
|
||||
#define JSVAL_BOOLEAN_MASK ((JSValueMaskType)0x40)
|
||||
#define JSVAL_MAGIC_MASK ((JSValueMaskType)0x80)
|
||||
|
||||
#define JSVAL_OBJECT_MASK (JSVAL_NONFUNOBJ_MASK | JSVAL_FUNOBJ_MASK)
|
||||
#define JSVAL_NUMBER_MASK (JSVAL_INT32_MASK | JSVAL_DOUBLE_MASK)
|
||||
#define JSVAL_GCTHING_MASK (JSVAL_OBJECT_MASK | JSVAL_STRING_MASK)
|
||||
|
||||
/*
|
||||
* Magic value enumeration (private engine detail)
|
||||
*
|
||||
@ -481,6 +487,7 @@ typedef jsboxedword jsid;
|
||||
#define JSID_IS_VOID(id) JSBOXEDWORD_IS_VOID((jsboxedword)(id))
|
||||
#define JSID_IS_ATOM(id) JSBOXEDWORD_IS_STRING((jsboxedword)(id))
|
||||
#define JSID_TO_ATOM(id) ((JSAtom *)(id))
|
||||
#define JSID_TO_STRING(id) ATOM_TO_STRING(JSID_TO_ATOM(id))
|
||||
#define ATOM_TO_JSID(atom) (JS_ASSERT(ATOM_IS_STRING(atom)), \
|
||||
(jsid)(atom))
|
||||
|
||||
|
@ -5028,7 +5028,8 @@ js_ExecuteRegExp(JSContext *cx, JSRegExp *re, JSString *str, size_t *indexp,
|
||||
if (test)
|
||||
continue;
|
||||
if (parsub->index == -1) {
|
||||
ok = js_DefineProperty(cx, obj, INT_TO_JSID(num + 1), &sUndefinedValue,
|
||||
Value undef = undefinedValue();
|
||||
ok = js_DefineProperty(cx, obj, INT_TO_JSID(num + 1), &undef,
|
||||
NULL, NULL, JSPROP_ENUMERATE);
|
||||
} else {
|
||||
parstr = js_NewDependentString(cx, str,
|
||||
|
@ -154,7 +154,7 @@ js_InitRegExpClass(JSContext *cx, JSObject *obj);
|
||||
* Export js_regexp_toString to the decompiler.
|
||||
*/
|
||||
extern JSBool
|
||||
js_regexp_toString(JSContext *cx, JSObject *obj, jsval *vp);
|
||||
js_regexp_toString(JSContext *cx, JSObject *obj, js::Value *vp);
|
||||
|
||||
/*
|
||||
* Create, serialize/deserialize, or clone a RegExp object.
|
||||
|
@ -1253,7 +1253,7 @@ PrintPropertyGetterOrSetter(JSTracer *trc, char *buf, size_t bufsize)
|
||||
|
||||
if (JSID_IS_ATOM(id)) {
|
||||
n = js_PutEscapedString(buf, bufsize - 1,
|
||||
ATOM_TO_STRING(JSID_TO_ATOM(id)), 0);
|
||||
JSID_TO_STRING(id), 0);
|
||||
if (n < bufsize - 1)
|
||||
JS_snprintf(buf + n, bufsize - n, " %s", name);
|
||||
} else if (JSID_IS_INT(sprop->id)) {
|
||||
@ -1276,7 +1276,7 @@ PrintPropertyMethod(JSTracer *trc, char *buf, size_t bufsize)
|
||||
JS_ASSERT(!JSID_IS_NULL(id));
|
||||
|
||||
JS_ASSERT(JSID_IS_ATOM(id));
|
||||
n = js_PutEscapedString(buf, bufsize - 1, ATOM_TO_STRING(JSID_TO_ATOM(id)), 0);
|
||||
n = js_PutEscapedString(buf, bufsize - 1, JSID_TO_STRING(id), 0);
|
||||
if (n < bufsize - 1)
|
||||
JS_snprintf(buf + n, bufsize - n, " method");
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ str_uneval(JSContext *cx, uintN argc, Value *vp)
|
||||
{
|
||||
JSString *str;
|
||||
|
||||
str = js_ValueToSource(cx, argc != 0 ? vp[2] : sUndefinedValue);
|
||||
str = js_ValueToSource(cx, argc != 0 ? vp[2] : undefinedValue());
|
||||
if (!str)
|
||||
return JS_FALSE;
|
||||
vp->setString(str);
|
||||
@ -3015,7 +3015,7 @@ js_InitStringClass(JSContext *cx, JSObject *obj)
|
||||
return NULL;
|
||||
proto->setPrimitiveThis(cx->runtime->emptyString);
|
||||
if (!js_DefineNativeProperty(cx, proto, ATOM_TO_JSID(cx->runtime->atomState.lengthAtom),
|
||||
sUndefinedValue, NULL, NULL,
|
||||
undefinedValue(), NULL, NULL,
|
||||
JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_SHARED, 0, 0,
|
||||
NULL)) {
|
||||
return JS_FALSE;
|
||||
|
@ -168,8 +168,6 @@ struct JS_FRIEND_API(TypedArray) {
|
||||
|
||||
/* Friend API methods */
|
||||
|
||||
JS_BEGIN_EXTERN_C
|
||||
|
||||
JS_FRIEND_API(JSObject *)
|
||||
js_InitTypedArrayClasses(JSContext *cx, JSObject *obj);
|
||||
|
||||
@ -217,6 +215,4 @@ js_CreateTypedArrayWithBuffer(JSContext *cx, jsint atype, JSObject *bufArg,
|
||||
JS_FRIEND_API(JSBool)
|
||||
js_ReparentTypedArrayToScope(JSContext *cx, JSObject *obj, JSObject *scope);
|
||||
|
||||
JS_END_EXTERN_C
|
||||
|
||||
#endif /* jstypedarray_h */
|
||||
|
@ -804,14 +804,14 @@ JS_XDRFindClassIdByName(JSXDRState *xdr, const char *name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(Class *)
|
||||
JS_PUBLIC_API(JSClass *)
|
||||
JS_XDRFindClassById(JSXDRState *xdr, uint32 id)
|
||||
{
|
||||
uintN i = CLASS_ID_TO_INDEX(id);
|
||||
|
||||
if (i >= xdr->numclasses)
|
||||
return NULL;
|
||||
return Valueify(xdr->registry[i]);
|
||||
return xdr->registry[i];
|
||||
}
|
||||
|
||||
#endif /* JS_HAS_XDR */
|
||||
|
@ -173,12 +173,12 @@ extern JS_PUBLIC_API(JSBool)
|
||||
JS_XDRScript(JSXDRState *xdr, JSScript **scriptp);
|
||||
|
||||
extern JS_PUBLIC_API(JSBool)
|
||||
JS_XDRRegisterClass(JSXDRState *xdr, js::Class *clasp, uint32 *lp);
|
||||
JS_XDRRegisterClass(JSXDRState *xdr, JSClass *clasp, uint32 *lp);
|
||||
|
||||
extern JS_PUBLIC_API(uint32)
|
||||
JS_XDRFindClassIdByName(JSXDRState *xdr, const char *name);
|
||||
|
||||
extern JS_PUBLIC_API(js::Class *)
|
||||
extern JS_PUBLIC_API(JSClass *)
|
||||
JS_XDRFindClassById(JSXDRState *xdr, uint32 id);
|
||||
|
||||
/*
|
||||
|
101
js/src/jsxml.cpp
101
js/src/jsxml.cpp
@ -530,23 +530,23 @@ NewXMLQName(JSContext *cx, JSString *uri, JSString *prefix, JSString *localName,
|
||||
}
|
||||
|
||||
JSObject *
|
||||
js_ConstructXMLQNameObject(JSContext *cx, jsval nsval, jsval lnval)
|
||||
js_ConstructXMLQNameObject(JSContext *cx, const Value &nsval, const Value &lnval)
|
||||
{
|
||||
jsval argv[2];
|
||||
Value argv[2];
|
||||
|
||||
/*
|
||||
* ECMA-357 11.1.2,
|
||||
* The _QualifiedIdentifier : PropertySelector :: PropertySelector_
|
||||
* production, step 2.
|
||||
*/
|
||||
if (!JSVAL_IS_PRIMITIVE(nsval) &&
|
||||
JSVAL_TO_OBJECT(nsval)->getClass() == &js_AnyNameClass) {
|
||||
nsval = JSVAL_NULL;
|
||||
if (nsval.isObject() &&
|
||||
nsval.asObject().getClass() == &js_AnyNameClass) {
|
||||
argv[0].setNull();
|
||||
} else {
|
||||
argv[0].copy(nsval);
|
||||
}
|
||||
|
||||
argv[0] = nsval;
|
||||
argv[1] = lnval;
|
||||
return js_ConstructObject(cx, &js_QNameClass.base, NULL, NULL, 2, Valueify(argv));
|
||||
argv[1].copy(lnval);
|
||||
return js_ConstructObject(cx, &js_QNameClass.base, NULL, NULL, 2, argv);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
@ -4945,7 +4945,7 @@ xml_defaultValue(JSContext *cx, JSObject *obj, JSType hint, Value *vp)
|
||||
if (!obj)
|
||||
return JS_FALSE;
|
||||
}
|
||||
vp->setObject(*obj);
|
||||
vp->setNonFunObj(*obj);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
@ -5175,10 +5175,10 @@ js_TestXMLEquality(JSContext *cx, const Value &v1, const Value &v2, JSBool *bp)
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_ConcatenateXML(JSContext *cx, JSObject *obj, jsval v, jsval *vp)
|
||||
js_ConcatenateXML(JSContext *cx, JSObject *obj, JSObject *robj, Value *vp)
|
||||
{
|
||||
JSBool ok;
|
||||
JSObject *listobj, *robj;
|
||||
JSObject *listobj;
|
||||
JSXML *list, *lxml, *rxml;
|
||||
|
||||
JS_ASSERT(JS_InstanceOf(cx, obj, Jsvalify(&js_XMLClass), NULL));
|
||||
@ -5198,23 +5198,15 @@ js_ConcatenateXML(JSContext *cx, JSObject *obj, jsval v, jsval *vp)
|
||||
if (!ok)
|
||||
goto out;
|
||||
|
||||
if (VALUE_IS_XML(cx, v)) {
|
||||
rxml = (JSXML *) JSVAL_TO_OBJECT(v)->getPrivate();
|
||||
} else {
|
||||
robj = ToXML(cx, v);
|
||||
if (!robj) {
|
||||
ok = JS_FALSE;
|
||||
goto out;
|
||||
}
|
||||
rxml = (JSXML *) robj->getPrivate();
|
||||
}
|
||||
JS_ASSERT(robj->isXML());
|
||||
rxml = (JSXML *) robj->getPrivate();
|
||||
ok = Append(cx, list, rxml);
|
||||
if (!ok)
|
||||
goto out;
|
||||
|
||||
*vp = OBJECT_TO_JSVAL(listobj);
|
||||
vp->setNonFunObj(*listobj);
|
||||
out:
|
||||
js_LeaveLocalRootScopeWithResult(cx, Valueify(*vp));
|
||||
js_LeaveLocalRootScopeWithResult(cx, *vp);
|
||||
return ok;
|
||||
}
|
||||
|
||||
@ -5386,7 +5378,7 @@ xml_attribute(JSContext *cx, uintN argc, jsval *vp)
|
||||
static JSBool
|
||||
xml_attributes(JSContext *cx, uintN argc, jsval *vp)
|
||||
{
|
||||
jsval name = STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.starAtom));
|
||||
jsval name = ATOM_TO_JSVAL(cx->runtime->atomState.starAtom);
|
||||
JSObject *qn = ToAttributeName(cx, name);
|
||||
if (!qn)
|
||||
return JS_FALSE;
|
||||
@ -5644,7 +5636,7 @@ xml_descendants(JSContext *cx, uintN argc, jsval *vp)
|
||||
|
||||
XML_METHOD_PROLOG;
|
||||
|
||||
name = argc == 0 ? STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.starAtom)) : vp[2];
|
||||
name = argc == 0 ? ATOM_TO_JSVAL(cx->runtime->atomState.starAtom) : vp[2];
|
||||
|
||||
/*
|
||||
* N.B. name is not actually a jsid: name may contain an non-interned
|
||||
@ -5725,7 +5717,7 @@ xml_elements(JSContext *cx, uintN argc, jsval *vp)
|
||||
|
||||
XML_METHOD_PROLOG;
|
||||
|
||||
name = (argc == 0) ? STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.starAtom)) : vp[2];
|
||||
name = (argc == 0) ? ATOM_TO_JSVAL(cx->runtime->atomState.starAtom) : vp[2];
|
||||
nameqn = ToXMLName(cx, name, &funid);
|
||||
if (!nameqn)
|
||||
return JS_FALSE;
|
||||
@ -5887,7 +5879,7 @@ class AutoNamespaceArray : public js::AutoNamespaces {
|
||||
JSObject *ns = XMLARRAY_MEMBER(&array, i, JSObject);
|
||||
if (!ns)
|
||||
continue;
|
||||
tvr.addr()->setObject(*ns);
|
||||
tvr.addr()->setNonFunObj(*ns);
|
||||
if (!arrayobj->setProperty(context, INT_TO_JSID(i), tvr.addr()))
|
||||
return false;
|
||||
}
|
||||
@ -6286,7 +6278,7 @@ xml_processingInstructions(JSContext *cx, uintN argc, jsval *vp)
|
||||
|
||||
XML_METHOD_PROLOG;
|
||||
|
||||
name = (argc == 0) ? STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.starAtom)) : vp[2];
|
||||
name = (argc == 0) ? ATOM_TO_JSVAL(cx->runtime->atomState.starAtom) : vp[2];
|
||||
nameqn = ToXMLName(cx, name, &funid);
|
||||
if (!nameqn)
|
||||
return JS_FALSE;
|
||||
@ -6424,8 +6416,7 @@ xml_replace(JSContext *cx, uintN argc, jsval *vp)
|
||||
goto done;
|
||||
|
||||
if (argc <= 1) {
|
||||
value = STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.
|
||||
typeAtoms[JSTYPE_VOID]));
|
||||
value = ATOM_TO_JSVAL(cx->runtime->atomState.typeAtoms[JSTYPE_VOID]);
|
||||
} else {
|
||||
value = vp[3];
|
||||
vxml = VALUE_IS_XML(cx, value)
|
||||
@ -6553,8 +6544,7 @@ xml_setName(JSContext *cx, uintN argc, jsval *vp)
|
||||
return JS_TRUE;
|
||||
|
||||
if (argc == 0) {
|
||||
name = STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.
|
||||
typeAtoms[JSTYPE_VOID]));
|
||||
name = ATOM_TO_JSVAL(cx->runtime->atomState.typeAtoms[JSTYPE_VOID]);
|
||||
} else {
|
||||
name = vp[2];
|
||||
if (!JSVAL_IS_PRIMITIVE(name) &&
|
||||
@ -7306,7 +7296,7 @@ js_InitXMLClasses(JSContext *cx, JSObject *obj)
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_GetFunctionNamespace(JSContext *cx, jsval *vp)
|
||||
js_GetFunctionNamespace(JSContext *cx, Value *vp)
|
||||
{
|
||||
JSRuntime *rt;
|
||||
JSObject *obj;
|
||||
@ -7360,7 +7350,7 @@ js_GetFunctionNamespace(JSContext *cx, jsval *vp)
|
||||
}
|
||||
JS_UNLOCK_GC(rt);
|
||||
}
|
||||
*vp = OBJECT_TO_JSVAL(obj);
|
||||
vp->setNonFunObj(*obj);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
@ -7415,22 +7405,21 @@ js_GetDefaultXMLNamespace(JSContext *cx, jsval *vp)
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_SetDefaultXMLNamespace(JSContext *cx, jsval v)
|
||||
js_SetDefaultXMLNamespace(JSContext *cx, const Value &v)
|
||||
{
|
||||
jsval argv[2];
|
||||
Value argv[2];
|
||||
JSObject *ns, *varobj;
|
||||
JSStackFrame *fp;
|
||||
|
||||
argv[0] = STRING_TO_JSVAL(cx->runtime->emptyString);
|
||||
argv[1] = v;
|
||||
ns = js_ConstructObject(cx, &js_NamespaceClass.base, NULL, NULL, 2, Valueify(argv));
|
||||
argv[0].setString(cx->runtime->emptyString);
|
||||
argv[1].copy(v);
|
||||
ns = js_ConstructObject(cx, &js_NamespaceClass.base, NULL, NULL, 2, argv);
|
||||
if (!ns)
|
||||
return JS_FALSE;
|
||||
v = OBJECT_TO_JSVAL(ns);
|
||||
|
||||
fp = js_GetTopStackFrame(cx);
|
||||
varobj = fp->varobj(cx);
|
||||
if (!varobj->defineProperty(cx, JS_DEFAULT_XML_NAMESPACE_ID, Valueify(v),
|
||||
if (!varobj->defineProperty(cx, JS_DEFAULT_XML_NAMESPACE_ID, NonFunObjTag(*ns),
|
||||
PropertyStub, PropertyStub,
|
||||
JSPROP_PERMANENT)) {
|
||||
return JS_FALSE;
|
||||
@ -7439,14 +7428,14 @@ js_SetDefaultXMLNamespace(JSContext *cx, jsval v)
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_ToAttributeName(JSContext *cx, jsval *vp)
|
||||
js_ToAttributeName(JSContext *cx, Value *vp)
|
||||
{
|
||||
JSObject *qn;
|
||||
|
||||
qn = ToAttributeName(cx, *vp);
|
||||
qn = ToAttributeName(cx, Jsvalify(*vp));
|
||||
if (!qn)
|
||||
return JS_FALSE;
|
||||
*vp = OBJECT_TO_JSVAL(qn);
|
||||
vp->setObject(*qn);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
@ -7509,16 +7498,16 @@ js_EscapeElementValue(JSContext *cx, JSString *str)
|
||||
}
|
||||
|
||||
JSString *
|
||||
js_ValueToXMLString(JSContext *cx, jsval v)
|
||||
js_ValueToXMLString(JSContext *cx, const Value &v)
|
||||
{
|
||||
return ToXMLString(cx, v, 0);
|
||||
return ToXMLString(cx, Jsvalify(v), 0);
|
||||
}
|
||||
|
||||
static JSBool
|
||||
anyname_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
*rval = STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.starAtom));
|
||||
*rval = ATOM_TO_JSVAL(cx->runtime->atomState.starAtom);
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
@ -7589,7 +7578,7 @@ js_GetAnyName(JSContext *cx, jsid *idp)
|
||||
}
|
||||
|
||||
JSBool
|
||||
js_FindXMLProperty(JSContext *cx, jsval nameval, JSObject **objp, jsid *idp)
|
||||
js_FindXMLProperty(JSContext *cx, const Value &nameval, JSObject **objp, jsid *idp)
|
||||
{
|
||||
JSObject *nameobj;
|
||||
jsval v;
|
||||
@ -7601,10 +7590,10 @@ js_FindXMLProperty(JSContext *cx, jsval nameval, JSObject **objp, jsid *idp)
|
||||
JSProperty *prop;
|
||||
const char *printable;
|
||||
|
||||
JS_ASSERT(!JSVAL_IS_PRIMITIVE(nameval));
|
||||
nameobj = JSVAL_TO_OBJECT(nameval);
|
||||
JS_ASSERT(nameval.isObject());
|
||||
nameobj = &nameval.asObject();
|
||||
if (nameobj->getClass() == &js_AnyNameClass) {
|
||||
v = STRING_TO_JSVAL(ATOM_TO_STRING(cx->runtime->atomState.starAtom));
|
||||
v = ATOM_TO_JSVAL(cx->runtime->atomState.starAtom);
|
||||
nameobj = js_ConstructObject(cx, &js_QNameClass.base, NULL, NULL, 1,
|
||||
Valueify(&v));
|
||||
if (!nameobj)
|
||||
@ -7891,15 +7880,15 @@ js_StepXMLListFilter(JSContext *cx, JSBool initialized)
|
||||
}
|
||||
|
||||
JSObject *
|
||||
js_ValueToXMLObject(JSContext *cx, jsval v)
|
||||
js_ValueToXMLObject(JSContext *cx, const Value &v)
|
||||
{
|
||||
return ToXML(cx, v);
|
||||
return ToXML(cx, Jsvalify(v));
|
||||
}
|
||||
|
||||
JSObject *
|
||||
js_ValueToXMLListObject(JSContext *cx, jsval v)
|
||||
js_ValueToXMLListObject(JSContext *cx, const Value &v)
|
||||
{
|
||||
return ToXMLList(cx, v);
|
||||
return ToXMLList(cx, Jsvalify(v));
|
||||
}
|
||||
|
||||
JSObject *
|
||||
|
@ -256,7 +256,7 @@ extern JSObject *
|
||||
js_InitXMLClasses(JSContext *cx, JSObject *obj);
|
||||
|
||||
extern JSBool
|
||||
js_GetFunctionNamespace(JSContext *cx, const js::Value *vp);
|
||||
js_GetFunctionNamespace(JSContext *cx, js::Value *vp);
|
||||
|
||||
/*
|
||||
* If obj is QName corresponding to function::name, set *funidp to name's id,
|
||||
|
@ -38,6 +38,8 @@
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#define __STDC_LIMIT_MACROS
|
||||
|
||||
/*
|
||||
* JS shell.
|
||||
*/
|
||||
@ -223,10 +225,10 @@ public:
|
||||
if (!JS_ReportPendingException(cx))
|
||||
JS_ClearPendingException(cx);
|
||||
}
|
||||
JS_AddNamedRoot(cx, &mStr, "Value ToString helper");
|
||||
JS_AddNamedStringRoot(cx, &mStr, "Value ToString helper");
|
||||
}
|
||||
~ToString() {
|
||||
JS_RemoveRoot(cx, &mStr);
|
||||
JS_RemoveStringRoot(cx, &mStr);
|
||||
}
|
||||
JSBool threw() { return !mStr; }
|
||||
jsval getJSVal() { return STRING_TO_JSVAL(mStr); }
|
||||
@ -1328,7 +1330,7 @@ CountHeap(JSContext *cx, uintN argc, jsval *vp)
|
||||
if (JSVAL_IS_TRACEABLE(v)) {
|
||||
startThing = JSVAL_TO_TRACEABLE(v);
|
||||
startTraceKind = JSVAL_TRACE_KIND(v);
|
||||
} else if (v != JSVAL_NULL) {
|
||||
} else if (!JSVAL_IS_NULL(v)) {
|
||||
JS_ReportError(cx,
|
||||
"the first argument is not null or a heap-allocated "
|
||||
"thing");
|
||||
|
Loading…
Reference in New Issue
Block a user