Changeset 178918 in webkit for trunk/Source/JavaScriptCore
- Timestamp:
- Jan 22, 2015, 10:07:16 AM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r178894 r178918 1 2015-01-22 Ryosuke Niwa <[email protected]> 2 3 PropertyListNode::emitNode duplicates the code to put a constant property 4 https://bugs.webkit.org/show_bug.cgi?id=140761 5 6 Reviewed by Geoffrey Garen. 7 8 Extracted PropertyListNode::emitPutConstantProperty to share the code. 9 10 Also made PropertyListNode::emitBytecode private since nobody is calling this function directly. 11 12 * bytecompiler/NodesCodegen.cpp: 13 (JSC::PropertyListNode::emitBytecode): 14 (JSC::PropertyListNode::emitPutConstantProperty): Added. 15 * parser/Nodes.h: 16 1 17 2015-01-22 Yusuke Suzuki <[email protected]> 2 18 -
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r178882 r178918 292 292 // Fast case: this loop just handles regular value properties. 293 293 PropertyListNode* p = this; 294 for (; p && p->m_node->m_type == PropertyNode::Constant; p = p->m_next) { 295 if (p->m_node->m_name) { 296 generator.emitDirectPutById(newObj.get(), *p->m_node->name(), generator.emitNode(p->m_node->m_assign)); 297 continue; 298 } 299 RefPtr<RegisterID> propertyName = generator.emitNode(p->m_node->m_expression); 300 generator.emitDirectPutByVal(newObj.get(), propertyName.get(), generator.emitNode(p->m_node->m_assign)); 301 } 294 for (; p && p->m_node->m_type == PropertyNode::Constant; p = p->m_next) 295 emitPutConstantProperty(generator, newObj.get(), *p->m_node); 302 296 303 297 // Were there any get/set properties? … … 325 319 // Handle regular values. 326 320 if (node->m_type == PropertyNode::Constant) { 327 if (node->name()) { 328 generator.emitDirectPutById(newObj.get(), *node->name(), generator.emitNode(node->m_assign)); 329 continue; 330 } 331 RefPtr<RegisterID> propertyName = generator.emitNode(p->m_node->m_expression); 332 generator.emitDirectPutByVal(newObj.get(), propertyName.get(), generator.emitNode(p->m_node->m_assign)); 321 emitPutConstantProperty(generator, newObj.get(), *node); 333 322 continue; 334 323 } 335 324 336 325 RegisterID* value = generator.emitNode(node->m_assign); 337 326 … … 376 365 377 366 return generator.moveToDestinationIfNeeded(dst, newObj.get()); 367 } 368 369 void PropertyListNode::emitPutConstantProperty(BytecodeGenerator& generator, RegisterID* newObj, PropertyNode& node) 370 { 371 if (node.name()) { 372 generator.emitDirectPutById(newObj, *node.name(), generator.emitNode(node.m_assign)); 373 return; 374 } 375 RefPtr<RegisterID> propertyName = generator.emitNode(node.m_expression); 376 generator.emitDirectPutByVal(newObj, propertyName.get(), generator.emitNode(node.m_assign)); 378 377 } 379 378 -
trunk/Source/JavaScriptCore/parser/Nodes.h
r177010 r178918 505 505 PropertyListNode(const JSTokenLocation&, PropertyNode*, PropertyListNode*); 506 506 507 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override; 508 509 private: 507 private: 508 virtual RegisterID* emitBytecode(BytecodeGenerator&, RegisterID* = 0) override; 509 void emitPutConstantProperty(BytecodeGenerator&, RegisterID*, PropertyNode&); 510 510 511 PropertyNode* m_node; 511 512 PropertyListNode* m_next;
Note:
See TracChangeset
for help on using the changeset viewer.