diff options
author | Conrad Pankoff <deoxxa@fknsrs.biz> | 2020-03-18 06:33:32 +1100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-03-17 21:28:02 +0100 |
commit | 46a897b59b600703effc02fc07e31323c8967d5f (patch) | |
tree | 68b2241393220e1d2c25a6f8e0f2f407db4dc2cf /Libraries/LibJS/AST.cpp | |
parent | 0a71533afff8ccef5801cdbfc9c424c3a6f0330a (diff) | |
download | serenity-46a897b59b600703effc02fc07e31323c8967d5f.zip |
LibJS: Implement typeof operator
Diffstat (limited to 'Libraries/LibJS/AST.cpp')
-rw-r--r-- | Libraries/LibJS/AST.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index d1e9d53828..a815a6715a 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -199,6 +199,23 @@ Value UnaryExpression::execute(Interpreter& interpreter) const return bitwise_not(lhs_result); case UnaryOp::Not: return Value(!lhs_result.to_boolean()); + case UnaryOp::Typeof: + switch (lhs_result.type()) { + case Value::Type::Undefined: + return js_string(interpreter.heap(), "undefined"); + case Value::Type::Null: + // yes, this is on purpose. yes, this is how javascript works. + // yes, it's silly. + return js_string(interpreter.heap(), "object"); + case Value::Type::Number: + return js_string(interpreter.heap(), "number"); + case Value::Type::String: + return js_string(interpreter.heap(), "string"); + case Value::Type::Object: + return js_string(interpreter.heap(), "object"); + case Value::Type::Boolean: + return js_string(interpreter.heap(), "boolean"); + } } ASSERT_NOT_REACHED(); @@ -318,6 +335,9 @@ void UnaryExpression::dump(int indent) const case UnaryOp::Not: op_string = "!"; break; + case UnaryOp::Typeof: + op_string = "typeof "; + break; } print_indent(indent); |