Add JS_StrictEq()
, JS_SameValue()
, and JS_SameValueZero()
(#264)
* add `JS_StrictEq()`, `JS_SameValue()`, and `JS_SameValueZero()` all accepting `JSValueConst` * make `js_strict_eq` accept `JSValueConst`, remove uses of this function internally and replace them with `js_strict_eq2` instead.
This commit is contained in:
parent
6f9d05fd2b
commit
f3f2f42717
2 changed files with 26 additions and 5 deletions
27
quickjs.c
27
quickjs.c
|
@ -1132,7 +1132,7 @@ typedef enum JSStrictEqModeEnum {
|
||||||
|
|
||||||
static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2,
|
static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2,
|
||||||
JSStrictEqModeEnum eq_mode);
|
JSStrictEqModeEnum eq_mode);
|
||||||
static BOOL js_strict_eq(JSContext *ctx, JSValue op1, JSValue op2);
|
static BOOL js_strict_eq(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
||||||
static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
||||||
static BOOL js_same_value_zero(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
static BOOL js_same_value_zero(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
||||||
static JSValue JS_ToObject(JSContext *ctx, JSValueConst val);
|
static JSValue JS_ToObject(JSContext *ctx, JSValueConst val);
|
||||||
|
@ -14239,7 +14239,7 @@ static no_inline __exception int js_eq_slow(JSContext *ctx, JSValue *sp,
|
||||||
goto exception;
|
goto exception;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res = js_strict_eq(ctx, op1, op2);
|
res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT);
|
||||||
} else if (tag1 == JS_TAG_BOOL) {
|
} else if (tag1 == JS_TAG_BOOL) {
|
||||||
op1 = JS_NewInt32(ctx, JS_VALUE_GET_INT(op1));
|
op1 = JS_NewInt32(ctx, JS_VALUE_GET_INT(op1));
|
||||||
goto redo;
|
goto redo;
|
||||||
|
@ -14557,9 +14557,16 @@ static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL js_strict_eq(JSContext *ctx, JSValue op1, JSValue op2)
|
static BOOL js_strict_eq(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
{
|
{
|
||||||
return js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT);
|
return js_strict_eq2(ctx,
|
||||||
|
JS_DupValue(ctx, op1), JS_DupValue(ctx, op2),
|
||||||
|
JS_EQ_STRICT);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL JS_StrictEq(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
|
{
|
||||||
|
return js_strict_eq(ctx, op1, op2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
|
@ -14569,6 +14576,11 @@ static BOOL js_same_value(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
JS_EQ_SAME_VALUE);
|
JS_EQ_SAME_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL JS_SameValue(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
|
{
|
||||||
|
return js_same_value(ctx, op1, op2);
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL js_same_value_zero(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
static BOOL js_same_value_zero(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
{
|
{
|
||||||
return js_strict_eq2(ctx,
|
return js_strict_eq2(ctx,
|
||||||
|
@ -14576,11 +14588,16 @@ static BOOL js_same_value_zero(JSContext *ctx, JSValueConst op1, JSValueConst op
|
||||||
JS_EQ_SAME_VALUE_ZERO);
|
JS_EQ_SAME_VALUE_ZERO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL JS_SameValueZero(JSContext *ctx, JSValueConst op1, JSValueConst op2)
|
||||||
|
{
|
||||||
|
return js_same_value_zero(ctx, op1, op2);
|
||||||
|
}
|
||||||
|
|
||||||
static no_inline int js_strict_eq_slow(JSContext *ctx, JSValue *sp,
|
static no_inline int js_strict_eq_slow(JSContext *ctx, JSValue *sp,
|
||||||
BOOL is_neq)
|
BOOL is_neq)
|
||||||
{
|
{
|
||||||
BOOL res;
|
BOOL res;
|
||||||
res = js_strict_eq(ctx, sp[-2], sp[-1]);
|
res = js_strict_eq2(ctx, sp[-2], sp[-1], JS_EQ_STRICT);
|
||||||
sp[-2] = JS_NewBool(ctx, res ^ is_neq);
|
sp[-2] = JS_NewBool(ctx, res ^ is_neq);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -684,6 +684,10 @@ static inline JSValue JS_DupValueRT(JSRuntime *rt, JSValueConst v)
|
||||||
return (JSValue)v;
|
return (JSValue)v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JS_BOOL JS_StrictEq(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
||||||
|
JS_BOOL JS_SameValue(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
||||||
|
JS_BOOL JS_SameValueZero(JSContext *ctx, JSValueConst op1, JSValueConst op2);
|
||||||
|
|
||||||
int JS_ToBool(JSContext *ctx, JSValueConst val); /* return -1 for JS_EXCEPTION */
|
int JS_ToBool(JSContext *ctx, JSValueConst val); /* return -1 for JS_EXCEPTION */
|
||||||
int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValueConst val);
|
int JS_ToInt32(JSContext *ctx, int32_t *pres, JSValueConst val);
|
||||||
static inline int JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValueConst val)
|
static inline int JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValueConst val)
|
||||||
|
|
Loading…
Reference in a new issue