Changeset 178692 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Jan 19, 2015, 8:47:55 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r178591 r178692 2111 2111 this->emitLoopHeader(generator, propertyName.get()); 2112 2112 2113 generator.emitProfileControlFlow(m_statement->startOffset()); 2114 2113 2115 generator.pushIndexedForInScope(local.get(), i.get()); 2114 2116 generator.emitNode(dst, m_statement); 2115 2117 generator.popIndexedForInScope(local.get()); 2118 2119 generator.emitProfileControlFlow(m_statement->endOffset()); 2116 2120 2117 2121 generator.emitLabel(scope->continueTarget()); … … 2145 2149 this->emitLoopHeader(generator, propertyName.get()); 2146 2150 2151 generator.emitProfileControlFlow(m_statement->startOffset()); 2152 2147 2153 generator.pushStructureForInScope(local.get(), i.get(), propertyName.get(), structureEnumerator.get()); 2148 2154 generator.emitNode(dst, m_statement); 2149 2155 generator.popStructureForInScope(local.get()); 2156 2157 generator.emitProfileControlFlow(m_statement->endOffset()); 2150 2158 2151 2159 generator.emitLabel(scope->continueTarget()); … … 2178 2186 this->emitLoopHeader(generator, propertyName.get()); 2179 2187 2188 generator.emitProfileControlFlow(m_statement->startOffset()); 2189 2180 2190 generator.emitNode(dst, m_statement); 2181 2191 … … 2197 2207 generator.emitDebugHook(WillExecuteStatement, firstLine(), startOffset(), lineStartOffset()); 2198 2208 generator.emitLabel(end.get()); 2209 generator.emitProfileControlFlow(m_statement->endOffset()); 2199 2210 } 2200 2211 … … 2248 2259 assignNode->bindings()->bindValue(generator, value); 2249 2260 } 2261 generator.emitProfileControlFlow(m_statement->startOffset()); 2250 2262 generator.emitNode(dst, m_statement); 2251 2263 }; 2252 2264 generator.emitEnumeration(this, m_expr, extractor); 2265 generator.emitProfileControlFlow(m_statement->endOffset()); 2253 2266 } 2254 2267 … … 2609 2622 RefPtr<Label> finallyEndLabel = generator.newLabel(); 2610 2623 2611 // FIXME: To the JS programmer, running the normal path is the same basic block as running the uncaught exception path. 2612 // But, we generate two different code paths for this, but we shouldn't generate two op_profile_control_flows for these because they 2613 // logically represent the same basic block. 2614 // https://bugs.webkit.org/show_bug.cgi?id=139287 2615 if (m_catchBlock) 2616 generator.emitProfileControlFlow(m_catchBlock->endOffset()); 2617 else 2618 generator.emitProfileControlFlow(m_tryBlock->endOffset()); 2624 int finallyStartOffset = m_catchBlock ? m_catchBlock->endOffset() : m_tryBlock->endOffset(); 2619 2625 2620 2626 // Normal path: run the finally code, and jump to the end. 2627 generator.emitProfileControlFlow(finallyStartOffset); 2621 2628 generator.emitNode(dst, m_finallyBlock); 2629 generator.emitProfileControlFlow(m_finallyBlock->endOffset()); 2622 2630 generator.emitJump(finallyEndLabel.get()); 2623 2631 2624 2632 // Uncaught exception path: invoke the finally block, then re-throw the exception. 2625 2633 RefPtr<RegisterID> tempExceptionRegister = generator.popTryAndEmitCatch(tryData, generator.newTemporary(), preFinallyLabel.get()); 2634 generator.emitProfileControlFlow(finallyStartOffset); 2626 2635 generator.emitNode(dst, m_finallyBlock); 2627 2636 generator.emitThrow(tempExceptionRegister.get()); 2628 2637 2629 2638 generator.emitLabel(finallyEndLabel.get()); 2630 } else 2639 generator.emitProfileControlFlow(m_finallyBlock->endOffset()); 2640 } else 2631 2641 generator.emitProfileControlFlow(m_catchBlock->endOffset()); 2632 2642
Note:
See TracChangeset
for help on using the changeset viewer.