summaryrefslogtreecommitdiff
path: root/quickjs.c
diff options
context:
space:
mode:
authorKasper Isager Dalsgarð <kasperisager@hey.com>2024-05-09 13:07:40 +0200
committerGitHub <noreply@github.com>2024-05-09 13:07:40 +0200
commitf3f2f4271785827d1be2ff97363b70b3320ee8cd (patch)
treeeec64bf4fb7119315b4211664f6d767a04faace5 /quickjs.c
parent6f9d05fd2b9de2f132b22518dabf201cea1c4fba (diff)
downloadquickjs-f3f2f4271785827d1be2ff97363b70b3320ee8cd.tar.gz
quickjs-f3f2f4271785827d1be2ff97363b70b3320ee8cd.zip
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.
Diffstat (limited to 'quickjs.c')
-rw-r--r--quickjs.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/quickjs.c b/quickjs.c
index fd2edd8..2ef43b7 100644
--- a/quickjs.c
+++ b/quickjs.c
@@ -1132,7 +1132,7 @@ typedef enum JSStrictEqModeEnum {
static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2,
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_zero(JSContext *ctx, JSValueConst op1, JSValueConst op2);
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;
}
}
- res = js_strict_eq(ctx, op1, op2);
+ res = js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT);
} else if (tag1 == JS_TAG_BOOL) {
op1 = JS_NewInt32(ctx, JS_VALUE_GET_INT(op1));
goto redo;
@@ -14557,9 +14557,16 @@ static BOOL js_strict_eq2(JSContext *ctx, JSValue op1, JSValue op2,
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,
+ JS_DupValue(ctx, op1), JS_DupValue(ctx, op2),
+ JS_EQ_STRICT);
+}
+
+BOOL JS_StrictEq(JSContext *ctx, JSValueConst op1, JSValueConst op2)
{
- return js_strict_eq2(ctx, op1, op2, JS_EQ_STRICT);
+ return js_strict_eq(ctx, op1, 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);
}
+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)
{
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);
}
+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,
BOOL is_neq)
{
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);
return 0;
}