Changeset 229608 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Mar 14, 2018, 1:00:21 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r228725 r229608 509 509 } 510 510 511 RegisterID* PropertyListNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst )511 RegisterID* PropertyListNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dstOrConstructor, RegisterID* prototype) 512 512 { 513 513 // Fast case: this loop just handles regular value properties. 514 514 PropertyListNode* p = this; 515 for (; p && (p->m_node->m_type & PropertyNode::Constant); p = p->m_next) 515 RegisterID* dst = nullptr; 516 for (; p && (p->m_node->m_type & PropertyNode::Constant); p = p->m_next) { 517 dst = p->m_node->isInstanceClassProperty() ? prototype : dstOrConstructor; 516 518 emitPutConstantProperty(generator, dst, *p->m_node); 519 } 517 520 518 521 // Were there any get/set properties? … … 524 527 typedef std::pair<PropertyNode*, PropertyNode*> GetterSetterPair; 525 528 typedef HashMap<UniquedStringImpl*, GetterSetterPair, IdentifierRepHash> GetterSetterMap; 526 GetterSetterMap map; 529 GetterSetterMap instanceMap; 530 GetterSetterMap staticMap; 527 531 528 532 // Build a map, pairing get/set values together. … … 539 543 // Duplicates are possible. 540 544 GetterSetterPair pair(node, static_cast<PropertyNode*>(nullptr)); 545 GetterSetterMap& map = node->isStaticClassProperty() ? staticMap : instanceMap; 541 546 GetterSetterMap::AddResult result = map.add(node->name()->impl(), pair); 542 547 auto& resultPair = result.iterator->value; … … 556 561 for (; p; p = p->m_next) { 557 562 PropertyNode* node = p->m_node; 563 dst = node->isInstanceClassProperty() ? prototype : dstOrConstructor; 558 564 559 565 // Handle regular values. … … 596 602 597 603 // This is a get/set property pair. 604 GetterSetterMap& map = node->isStaticClassProperty() ? staticMap : instanceMap; 598 605 GetterSetterMap::iterator it = map.find(node->name()->impl()); 599 606 ASSERT(it != map.end()); … … 640 647 } 641 648 642 return dst ;649 return dstOrConstructor; 643 650 } 644 651 … … 3952 3959 generator.emitCallDefineProperty(constructor.get(), prototypeNameRegister.get(), prototype.get(), nullptr, nullptr, 0, m_position); 3953 3960 3954 if (m_staticMethods) 3955 generator.emitNode(constructor.get(), m_staticMethods); 3956 3957 if (m_instanceMethods) 3958 generator.emitNode(prototype.get(), m_instanceMethods); 3961 if (m_classElements) 3962 generator.emitDefineClassElements(m_classElements, constructor.get(), prototype.get()); 3959 3963 3960 3964 if (!m_name.isNull()) {
Note:
See TracChangeset
for help on using the changeset viewer.