mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
LibJS: Support array holes, encoded as empty JS::Value
This patch adds a new kind of JS::Value, the empty value. It's what you get when you do JSValue() (or most commonly, {} in C++.) An empty Value signifies the absence of a value, and should never be visible to JavaScript itself. As of right now, it's used for array holes and as a return value when an exception has been thrown and we just want to unwind. This patch is a bit of a mess as I had to fix a whole bunch of code that was relying on JSValue() being undefined, etc.
This commit is contained in:
parent
5495f06af5
commit
bdffc9e7fb
9 changed files with 102 additions and 35 deletions
|
@ -36,6 +36,7 @@ namespace JS {
|
|||
class Value {
|
||||
public:
|
||||
enum class Type {
|
||||
Empty,
|
||||
Undefined,
|
||||
Null,
|
||||
Number,
|
||||
|
@ -44,6 +45,7 @@ public:
|
|||
Boolean,
|
||||
};
|
||||
|
||||
bool is_empty() const { return m_type == Type::Empty; }
|
||||
bool is_undefined() const { return m_type == Type::Undefined; }
|
||||
bool is_null() const { return m_type == Type::Null; }
|
||||
bool is_number() const { return m_type == Type::Number; }
|
||||
|
@ -56,10 +58,7 @@ public:
|
|||
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)
|
||||
{
|
||||
}
|
||||
Value();
|
||||
|
||||
explicit Value(bool value)
|
||||
: m_type(Type::Boolean)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue