Ignore:
Timestamp:
Jan 22, 2015, 10:07:16 AM (10 years ago)
Author:
[email protected]
Message:

PropertyListNode::emitNode duplicates the code to put a constant property
https://bugs.webkit.org/show_bug.cgi?id=140761

Reviewed by Geoffrey Garen.

Extracted PropertyListNode::emitPutConstantProperty to share the code.

Also made PropertyListNode::emitBytecode private since nobody is calling this function directly.

  • bytecompiler/NodesCodegen.cpp:

(JSC::PropertyListNode::emitBytecode):
(JSC::PropertyListNode::emitPutConstantProperty): Added.

  • parser/Nodes.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r178882 r178918  
    292292    // Fast case: this loop just handles regular value properties.
    293293    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);
    302296
    303297    // Were there any get/set properties?
     
    325319            // Handle regular values.
    326320            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);
    333322                continue;
    334323            }
    335            
     324
    336325            RegisterID* value = generator.emitNode(node->m_assign);
    337326
     
    376365
    377366    return generator.moveToDestinationIfNeeded(dst, newObj.get());
     367}
     368
     369void 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));
    378377}
    379378
Note: See TracChangeset for help on using the changeset viewer.