diff --git a/source/runtime.c b/source/runtime.c index f99557e8..124efe28 100644 --- a/source/runtime.c +++ b/source/runtime.c @@ -3955,8 +3955,10 @@ JSValue JS_ToNumber (JSContext *ctx, JSValue val) { ret = val; break; case JS_TAG_BOOL: + ret = JS_NewInt32 (ctx, JS_ToBool (ctx, val)); + break; case JS_TAG_NULL: - ret = JS_NewInt32 (ctx, JS_VALUE_GET_INT (val)); + ret = JS_NewInt32 (ctx, 0); break; case JS_TAG_STRING_IMM: return JS_ThrowTypeError (ctx, "cannot convert text to a number"); @@ -4015,10 +4017,14 @@ redo: tag = JS_VALUE_GET_NORM_TAG (val); switch (tag) { case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: ret = JS_VALUE_GET_INT (val); break; + case JS_TAG_BOOL: + ret = JS_VALUE_GET_BOOL (val); + break; + case JS_TAG_NULL: + ret = 0; + break; case JS_TAG_EXCEPTION: *pres = 0; return -1; @@ -4064,10 +4070,14 @@ redo: tag = JS_VALUE_GET_NORM_TAG (val); switch (tag) { case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: *pres = JS_VALUE_GET_INT (val); return 0; + case JS_TAG_BOOL: + *pres = JS_VALUE_GET_BOOL (val); + return 0; + case JS_TAG_NULL: + *pres = 0; + return 0; case JS_TAG_EXCEPTION: *pres = 0; return -1; @@ -4115,10 +4125,14 @@ redo: tag = JS_VALUE_GET_NORM_TAG (val); switch (tag) { case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: ret = JS_VALUE_GET_INT (val); break; + case JS_TAG_BOOL: + ret = JS_VALUE_GET_BOOL (val); + break; + case JS_TAG_NULL: + ret = 0; + break; case JS_TAG_FLOAT64: { JSFloat64Union u; double d; @@ -4162,10 +4176,14 @@ redo: tag = JS_VALUE_GET_NORM_TAG (val); switch (tag) { case JS_TAG_INT: - case JS_TAG_BOOL: - case JS_TAG_NULL: ret = JS_VALUE_GET_INT (val); break; + case JS_TAG_BOOL: + ret = JS_VALUE_GET_BOOL (val); + break; + case JS_TAG_NULL: + ret = 0; + break; case JS_TAG_FLOAT64: { JSFloat64Union u; double d;