Changeset 190827 in webkit for trunk/Source/JavaScriptCore/runtime/Executable.cpp
- Timestamp:
- Oct 9, 2015, 4:10:16 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/Executable.cpp
r190809 r190827 61 61 m_numParametersForCall = NUM_PARAMETERS_NOT_COMPILED; 62 62 m_numParametersForConstruct = NUM_PARAMETERS_NOT_COMPILED; 63 64 if (classInfo() == FunctionExecutable::info()) { 65 FunctionExecutable* executable = jsCast<FunctionExecutable*>(this); 66 executable->m_codeBlockForCall.clear(); 67 executable->m_codeBlockForConstruct.clear(); 68 return; 69 } 70 71 if (classInfo() == EvalExecutable::info()) { 72 EvalExecutable* executable = jsCast<EvalExecutable*>(this); 73 executable->m_evalCodeBlock.clear(); 74 executable->m_unlinkedEvalCodeBlock.clear(); 75 return; 76 } 77 78 if (classInfo() == ProgramExecutable::info()) { 79 ProgramExecutable* executable = jsCast<ProgramExecutable*>(this); 80 executable->m_programCodeBlock.clear(); 81 executable->m_unlinkedProgramCodeBlock.clear(); 82 return; 83 } 84 85 if (classInfo() == ModuleProgramExecutable::info()) { 86 ModuleProgramExecutable* executable = jsCast<ModuleProgramExecutable*>(this); 87 executable->m_moduleProgramCodeBlock.clear(); 88 executable->m_unlinkedModuleProgramCodeBlock.clear(); 89 executable->m_moduleEnvironmentSymbolTable.clear(); 90 return; 91 } 92 93 #if ENABLE(WEBASSEMBLY) 94 if (classInfo() == WebAssemblyExecutable::info()) { 95 WebAssemblyExecutable* executable = jsCast<WebAssemblyExecutable*>(this); 96 executable->m_codeBlockForCall.clear(); 97 return; 98 } 99 #endif 100 101 ASSERT(classInfo() == NativeExecutable::info()); 63 102 } 64 103 … … 124 163 ASSERT(vm.heap.isDeferred()); 125 164 126 RefPtr<CodeBlock> oldCodeBlock;165 CodeBlock* oldCodeBlock = nullptr; 127 166 128 167 switch (codeType) { … … 133 172 ASSERT(kind == CodeForCall); 134 173 135 oldCodeBlock = executable->m_programCodeBlock ;136 executable->m_programCodeBlock = codeBlock;174 oldCodeBlock = executable->m_programCodeBlock.get(); 175 executable->m_programCodeBlock.setMayBeNull(vm, this, codeBlock); 137 176 break; 138 177 } … … 144 183 ASSERT(kind == CodeForCall); 145 184 146 oldCodeBlock = executable->m_moduleProgramCodeBlock ;147 executable->m_moduleProgramCodeBlock = codeBlock;185 oldCodeBlock = executable->m_moduleProgramCodeBlock.get(); 186 executable->m_moduleProgramCodeBlock.setMayBeNull(vm, this, codeBlock); 148 187 break; 149 188 } … … 155 194 ASSERT(kind == CodeForCall); 156 195 157 oldCodeBlock = executable->m_evalCodeBlock ;158 executable->m_evalCodeBlock = codeBlock;196 oldCodeBlock = executable->m_evalCodeBlock.get(); 197 executable->m_evalCodeBlock.setMayBeNull(vm, this, codeBlock); 159 198 break; 160 199 } … … 166 205 switch (kind) { 167 206 case CodeForCall: 168 oldCodeBlock = executable->m_codeBlockForCall ;169 executable->m_codeBlockForCall = codeBlock;207 oldCodeBlock = executable->m_codeBlockForCall.get(); 208 executable->m_codeBlockForCall.setMayBeNull(vm, this, codeBlock); 170 209 break; 171 210 case CodeForConstruct: 172 oldCodeBlock = executable->m_codeBlockForConstruct ;173 executable->m_codeBlockForConstruct = codeBlock;211 oldCodeBlock = executable->m_codeBlockForConstruct.get(); 212 executable->m_codeBlockForConstruct.setMayBeNull(vm, this, codeBlock); 174 213 break; 175 214 } … … 211 250 } 212 251 213 RefPtr<CodeBlock>ScriptExecutable::newCodeBlockFor(252 CodeBlock* ScriptExecutable::newCodeBlockFor( 214 253 CodeSpecializationKind kind, JSFunction* function, JSScope* scope, JSObject*& exception) 215 254 { … … 225 264 RELEASE_ASSERT(!executable->m_evalCodeBlock); 226 265 RELEASE_ASSERT(!function); 227 return adoptRef(new EvalCodeBlock(266 return EvalCodeBlock::create(vm, 228 267 executable, executable->m_unlinkedEvalCodeBlock.get(), scope, 229 executable->source().provider()) );268 executable->source().provider()); 230 269 } 231 270 … … 235 274 RELEASE_ASSERT(!executable->m_programCodeBlock); 236 275 RELEASE_ASSERT(!function); 237 return adoptRef(new ProgramCodeBlock(276 return ProgramCodeBlock::create(vm, 238 277 executable, executable->m_unlinkedProgramCodeBlock.get(), scope, 239 executable->source().provider(), executable->source().startColumn()) );278 executable->source().provider(), executable->source().startColumn()); 240 279 } 241 280 … … 245 284 RELEASE_ASSERT(!executable->m_moduleProgramCodeBlock); 246 285 RELEASE_ASSERT(!function); 247 return adoptRef(new ModuleProgramCodeBlock(286 return ModuleProgramCodeBlock::create(vm, 248 287 executable, executable->m_unlinkedModuleProgramCodeBlock.get(), scope, 249 executable->source().provider(), executable->source().startColumn()) );288 executable->source().provider(), executable->source().startColumn()); 250 289 } 251 290 … … 277 316 unsigned startColumn = executable->source().startColumn(); 278 317 279 return adoptRef(new FunctionCodeBlock(280 executable, unlinkedCodeBlock, scope, provider, sourceOffset, startColumn) );281 } 282 283 PassRefPtr<CodeBlock>ScriptExecutable::newReplacementCodeBlockFor(318 return FunctionCodeBlock::create(vm, 319 executable, unlinkedCodeBlock, scope, provider, sourceOffset, startColumn); 320 } 321 322 CodeBlock* ScriptExecutable::newReplacementCodeBlockFor( 284 323 CodeSpecializationKind kind) 285 324 { … … 289 328 EvalCodeBlock* baseline = static_cast<EvalCodeBlock*>( 290 329 executable->m_evalCodeBlock->baselineVersion()); 291 RefPtr<EvalCodeBlock> result = adoptRef(new EvalCodeBlock(292 CodeBlock::CopyParsedBlock, *baseline) );293 result->setAlternative( baseline);330 EvalCodeBlock* result = EvalCodeBlock::create(vm(), 331 CodeBlock::CopyParsedBlock, *baseline); 332 result->setAlternative(*vm(), baseline); 294 333 return result; 295 334 } … … 300 339 ProgramCodeBlock* baseline = static_cast<ProgramCodeBlock*>( 301 340 executable->m_programCodeBlock->baselineVersion()); 302 RefPtr<ProgramCodeBlock> result = adoptRef(new ProgramCodeBlock(303 CodeBlock::CopyParsedBlock, *baseline) );304 result->setAlternative( baseline);341 ProgramCodeBlock* result = ProgramCodeBlock::create(vm(), 342 CodeBlock::CopyParsedBlock, *baseline); 343 result->setAlternative(*vm(), baseline); 305 344 return result; 306 345 } … … 311 350 ModuleProgramCodeBlock* baseline = static_cast<ModuleProgramCodeBlock*>( 312 351 executable->m_moduleProgramCodeBlock->baselineVersion()); 313 RefPtr<ModuleProgramCodeBlock> result = adoptRef(new ModuleProgramCodeBlock(314 CodeBlock::CopyParsedBlock, *baseline) );315 result->setAlternative( baseline);352 ModuleProgramCodeBlock* result = ModuleProgramCodeBlock::create(vm(), 353 CodeBlock::CopyParsedBlock, *baseline); 354 result->setAlternative(*vm(), baseline); 316 355 return result; 317 356 } … … 321 360 FunctionCodeBlock* baseline = static_cast<FunctionCodeBlock*>( 322 361 executable->codeBlockFor(kind)->baselineVersion()); 323 RefPtr<FunctionCodeBlock> result = adoptRef(new FunctionCodeBlock(324 CodeBlock::CopyParsedBlock, *baseline) );325 result->setAlternative( baseline);362 FunctionCodeBlock* result = FunctionCodeBlock::create(vm(), 363 CodeBlock::CopyParsedBlock, *baseline); 364 result->setAlternative(*vm(), baseline); 326 365 return result; 327 366 } … … 351 390 352 391 JSObject* exception = 0; 353 RefPtr<CodeBlock>codeBlock = newCodeBlockFor(kind, function, scope, exception);392 CodeBlock* codeBlock = newCodeBlockFor(kind, function, scope, exception); 354 393 if (!codeBlock) { 355 394 RELEASE_ASSERT(exception); … … 361 400 362 401 if (Options::useLLInt()) 363 setupLLInt(vm, codeBlock .get());402 setupLLInt(vm, codeBlock); 364 403 else 365 setupJIT(vm, codeBlock .get());366 367 installCode(*codeBlock->vm(), codeBlock .get(), codeBlock->codeType(), codeBlock->specializationKind());404 setupJIT(vm, codeBlock); 405 406 installCode(*codeBlock->vm(), codeBlock, codeBlock->codeType(), codeBlock->specializationKind()); 368 407 return 0; 369 408 } … … 503 542 ASSERT_GC_OBJECT_INHERITS(thisObject, info()); 504 543 ScriptExecutable::visitChildren(thisObject, visitor); 544 visitor.append(&thisObject->m_unlinkedEvalCodeBlock); 505 545 if (thisObject->m_evalCodeBlock) 506 thisObject->m_evalCodeBlock->visitAggregate(visitor); 507 visitor.append(&thisObject->m_unlinkedEvalCodeBlock); 508 } 509 510 void EvalExecutable::clearCode() 511 { 512 m_evalCodeBlock = nullptr; 513 m_unlinkedEvalCodeBlock.clear(); 514 Base::clearCode(); 546 thisObject->m_evalCodeBlock->visitWeakly(visitor); 515 547 } 516 548 … … 619 651 visitor.append(&thisObject->m_unlinkedProgramCodeBlock); 620 652 if (thisObject->m_programCodeBlock) 621 thisObject->m_programCodeBlock->visitAggregate(visitor); 622 } 623 624 void ProgramExecutable::clearCode() 625 { 626 m_programCodeBlock = nullptr; 627 m_unlinkedProgramCodeBlock.clear(); 628 Base::clearCode(); 653 thisObject->m_programCodeBlock->visitWeakly(visitor); 629 654 } 630 655 … … 637 662 visitor.append(&thisObject->m_moduleEnvironmentSymbolTable); 638 663 if (thisObject->m_moduleProgramCodeBlock) 639 thisObject->m_moduleProgramCodeBlock->visitAggregate(visitor); 640 } 641 642 void ModuleProgramExecutable::clearCode() 643 { 644 m_moduleProgramCodeBlock = nullptr; 645 m_unlinkedModuleProgramCodeBlock.clear(); 646 m_moduleEnvironmentSymbolTable.clear(); 647 Base::clearCode(); 664 thisObject->m_moduleProgramCodeBlock->visitWeakly(visitor); 648 665 } 649 666 … … 668 685 ScriptExecutable::visitChildren(thisObject, visitor); 669 686 if (thisObject->m_codeBlockForCall) 670 thisObject->m_codeBlockForCall->visit Aggregate(visitor);687 thisObject->m_codeBlockForCall->visitWeakly(visitor); 671 688 if (thisObject->m_codeBlockForConstruct) 672 thisObject->m_codeBlockForConstruct->visit Aggregate(visitor);689 thisObject->m_codeBlockForConstruct->visitWeakly(visitor); 673 690 visitor.append(&thisObject->m_unlinkedExecutable); 674 691 visitor.append(&thisObject->m_singletonFunction); 675 }676 677 void FunctionExecutable::clearCode()678 {679 m_codeBlockForCall = nullptr;680 m_codeBlockForConstruct = nullptr;681 Base::clearCode();682 692 } 683 693 … … 717 727 ExecutableBase::visitChildren(thisObject, visitor); 718 728 if (thisObject->m_codeBlockForCall) 719 thisObject->m_codeBlockForCall->visit Aggregate(visitor);729 thisObject->m_codeBlockForCall->visitWeakly(visitor); 720 730 visitor.append(&thisObject->m_module); 721 }722 723 void WebAssemblyExecutable::clearCode()724 {725 m_codeBlockForCall = nullptr;726 Base::clearCode();727 731 } 728 732 … … 735 739 DeferGC deferGC(vm.heap); 736 740 737 RefPtr<WebAssemblyCodeBlock> codeBlock = adoptRef(new WebAssemblyCodeBlock(738 this, vm,exec->lexicalGlobalObject()));739 740 WASMFunctionParser::compile(vm, codeBlock .get(), m_module.get(), m_source, m_functionIndex);741 WebAssemblyCodeBlock* codeBlock = WebAssemblyCodeBlock::create(vm, 742 this, exec->lexicalGlobalObject())); 743 744 WASMFunctionParser::compile(vm, codeBlock, m_module.get(), m_source, m_functionIndex); 741 745 742 746 m_jitCodeForCall = codeBlock->jitCode(); … … 744 748 m_numParametersForCall = codeBlock->numParameters(); 745 749 746 m_codeBlockForCall = codeBlock;750 m_codeBlockForCall.set(vm, this, codeBlock); 747 751 748 752 Heap::heap(this)->writeBarrier(this);
Note:
See TracChangeset
for help on using the changeset viewer.