From 00feef86427b7a370ba292f7eca426839ae5699d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 21 Mar 2020 13:05:43 +0100 Subject: LibJS: Some optimizations for ObjectExpression - move() the property map when constructing ObjectExpression instead of making a copy. - Use key+value iterators to traverse the property map in the execute() and dump() functions. --- Libraries/LibJS/AST.cpp | 12 +++++------- Libraries/LibJS/AST.h | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) (limited to 'Libraries/LibJS') diff --git a/Libraries/LibJS/AST.cpp b/Libraries/LibJS/AST.cpp index 95cb322e74..f6c9847bb3 100644 --- a/Libraries/LibJS/AST.cpp +++ b/Libraries/LibJS/AST.cpp @@ -623,10 +623,10 @@ void VariableDeclaration::dump(int indent) const void ObjectExpression::dump(int indent) const { ASTNode::dump(indent); - for (String property_key : m_properties.keys()) { + for (auto it : m_properties) { print_indent(indent + 1); - printf("%s: ", property_key.characters()); - m_properties.get(property_key).value()->dump(0); + printf("%s: ", it.key.characters()); + it.value->dump(0); } } @@ -639,10 +639,8 @@ void ExpressionStatement::dump(int indent) const Value ObjectExpression::execute(Interpreter& interpreter) const { auto object = interpreter.heap().allocate(); - for (String property_key : m_properties.keys()) { - object->put(property_key, m_properties.get(property_key).value()->execute(interpreter)); - } - + for (auto it : m_properties) + object->put(it.key, it.value->execute(interpreter)); return object; } diff --git a/Libraries/LibJS/AST.h b/Libraries/LibJS/AST.h index e8a0039ad8..a1bac10849 100644 --- a/Libraries/LibJS/AST.h +++ b/Libraries/LibJS/AST.h @@ -574,7 +574,7 @@ private: class ObjectExpression : public Expression { public: ObjectExpression(HashMap> properties = {}) - : m_properties(properties) + : m_properties(move(properties)) { } -- cgit v1.2.3