1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 20:27:34 +00:00

LibJS: Implement Infinity

This commit is contained in:
Linus Groh 2020-04-02 16:59:01 +01:00 committed by Andreas Kling
parent 40b3203941
commit 543c6e00db
5 changed files with 40 additions and 0 deletions

View file

@ -18,7 +18,10 @@ GlobalObject::GlobalObject()
put_native_function("gc", gc);
put_native_function("isNaN", is_nan);
// FIXME: These are read-only in ES5
put("NaN", js_nan());
put("Infinity", js_infinity());
put("console", heap().allocate<ConsoleObject>());
put("Date", heap().allocate<DateConstructor>());
put("Error", heap().allocate<ErrorConstructor>());

View file

@ -57,6 +57,9 @@ String Value::to_string() const
if (is_nan())
return "NaN";
if (is_infinity())
return as_double() < 0 ? "-Infinity" : "Infinity";
// FIXME: This needs improvement.
if ((double)to_i32() == as_double())
return String::number(to_i32());

View file

@ -54,6 +54,7 @@ public:
bool is_array() const;
bool is_nan() const { return is_number() && __builtin_isnan(as_double()); }
bool is_infinity() const { return is_number() && __builtin_isinf(as_double()); }
Value()
: m_type(Type::Undefined)
@ -173,6 +174,11 @@ inline Value js_nan()
return Value(__builtin_nan(""));
}
inline Value js_infinity()
{
return Value(__builtin_huge_val());
}
Value greater_than(Value lhs, Value rhs);
Value greater_than_equals(Value lhs, Value rhs);
Value less_than(Value lhs, Value rhs);