Changeset 179371 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Jan 29, 2015, 2:59:19 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r178918 r179371 274 274 RegisterID* ObjectLiteralNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 275 275 { 276 if (!m_list) { 277 if (dst == generator.ignoredResult()) 278 return 0; 279 return generator.emitNewObject(generator.finalDestination(dst)); 280 } 281 return generator.emitNode(dst, m_list); 276 if (!m_list) { 277 if (dst == generator.ignoredResult()) 278 return 0; 279 return generator.emitNewObject(generator.finalDestination(dst)); 280 } 281 RefPtr<RegisterID> newObj = generator.emitNewObject(generator.tempDestination(dst)); 282 generator.emitNode(newObj.get(), m_list); 283 return generator.moveToDestinationIfNeeded(dst, newObj.get()); 282 284 } 283 285 … … 286 288 RegisterID* PropertyListNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 287 289 { 288 RefPtr<RegisterID> newObj = generator.tempDestination(dst);289 290 generator.emitNewObject(newObj.get());291 292 290 // Fast case: this loop just handles regular value properties. 293 291 PropertyListNode* p = this; 294 292 for (; p && p->m_node->m_type == PropertyNode::Constant; p = p->m_next) 295 emitPutConstantProperty(generator, newObj.get(), *p->m_node);293 emitPutConstantProperty(generator, dst, *p->m_node); 296 294 297 295 // Were there any get/set properties? … … 319 317 // Handle regular values. 320 318 if (node->m_type == PropertyNode::Constant) { 321 emitPutConstantProperty(generator, newObj.get(), *node);319 emitPutConstantProperty(generator, dst, *node); 322 320 continue; 323 321 } … … 360 358 } 361 359 362 generator.emitPutGetterSetter( newObj.get(), *node->name(), getterReg.get(), setterReg.get());363 } 364 } 365 366 return generator.moveToDestinationIfNeeded(dst, newObj.get());360 generator.emitPutGetterSetter(dst, *node->name(), getterReg.get(), setterReg.get()); 361 } 362 } 363 364 return dst; 367 365 } 368 366 … … 2754 2752 return generator.emitNewFunctionExpression(generator.finalDestination(dst), this); 2755 2753 } 2754 2755 #if ENABLE(ES6_CLASS_SYNTAX) 2756 // ------------------------------ ClassDeclNode --------------------------------- 2757 2758 void ClassDeclNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 2759 { 2760 generator.emitNode(dst, m_classDeclaration); 2761 } 2762 2763 // ------------------------------ ClassExprNode --------------------------------- 2764 2765 RegisterID* ClassExprNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst) 2766 { 2767 ASSERT(!m_parentClassExpression); 2768 2769 RefPtr<RegisterID> constructor = generator.emitNode(dst, m_constructorExpression); 2770 RefPtr<RegisterID> prototype = generator.emitGetById(generator.newTemporary(), constructor.get(), generator.propertyNames().prototype); 2771 2772 if (m_staticMethods) 2773 generator.emitNode(constructor.get(), m_staticMethods); 2774 2775 if (m_instanceMethods) 2776 generator.emitNode(prototype.get(), m_instanceMethods); 2777 2778 return generator.moveToDestinationIfNeeded(dst, constructor.get()); 2779 } 2780 #endif 2756 2781 2757 2782 // ------------------------------ DeconstructingAssignmentNode -----------------
Note:
See TracChangeset
for help on using the changeset viewer.