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