mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-03-06 21:45:29 +00:00
LibJS: Make typeof return undefined for undefined variables
This makes `typeof i_dont_exist` return `undefined` instead of throwing an error.
This commit is contained in:
committed by
Andreas Kling
parent
b0932b0aec
commit
0b74ea3d6a
@@ -585,9 +585,25 @@ Value UnaryExpression::execute(Interpreter& interpreter) const
|
||||
return base_object->delete_property(reference.name());
|
||||
}
|
||||
|
||||
auto lhs_result = m_lhs->execute(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
Value lhs_result;
|
||||
if (m_op == UnaryOp::Typeof && m_lhs->is_identifier()) {
|
||||
auto reference = m_lhs->to_reference(interpreter);
|
||||
if (interpreter.exception()) {
|
||||
return {};
|
||||
}
|
||||
// FIXME: standard recommends checking with is_unresolvable but it ALWAYS return false here
|
||||
if (reference.is_local_variable() || reference.is_global_variable()) {
|
||||
auto name = reference.name();
|
||||
lhs_result = interpreter.get_variable(name.to_string()).value_or(js_undefined());
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
}
|
||||
} else {
|
||||
lhs_result = m_lhs->execute(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
}
|
||||
|
||||
switch (m_op) {
|
||||
case UnaryOp::BitwiseNot:
|
||||
return bitwise_not(interpreter, lhs_result);
|
||||
|
||||
Reference in New Issue
Block a user