- if (symbolTable) {
- if (symbolTable->captureCount()) {
- unsigned captureStartLocal = allocation[
- VirtualRegister(codeBlock()->symbolTable()->captureStart()).toLocal()];
- ASSERT(captureStartLocal != UINT_MAX);
- m_graph.m_machineCaptureStart = virtualRegisterForLocal(captureStartLocal).offset();
- } else
- m_graph.m_machineCaptureStart = virtualRegisterForLocal(0).offset();
-
- // This is an abomination. If we had captured an argument then the argument ends
- // up being "slow", meaning that loads of the argument go through an extra lookup
- // table.
- if (const SlowArgument* slowArguments = symbolTable->slowArguments()) {
- auto newSlowArguments = std::make_unique<SlowArgument[]>(
- symbolTable->parameterCount());
- for (size_t i = symbolTable->parameterCount(); i--;) {
- newSlowArguments[i] = slowArguments[i];
- VirtualRegister reg = VirtualRegister(slowArguments[i].index);
- if (reg.isLocal())
- newSlowArguments[i].index = virtualRegisterForLocal(allocation[reg.toLocal()]).offset();
- }
-
- m_graph.m_slowArguments = WTF::move(newSlowArguments);
- }
- }
-