Changeset 47304 in webkit for trunk/JavaScriptCore/bytecode
- Timestamp:
- Aug 14, 2009, 6:14:00 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/bytecode
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bytecode/CodeBlock.h
r47089 r47304 251 251 class CodeBlock : public FastAllocBase { 252 252 friend class JIT; 253 p ublic:253 protected: 254 254 CodeBlock(ScopeNode* ownerNode); 255 255 CodeBlock(ScopeNode* ownerNode, CodeType, PassRefPtr<SourceProvider>, unsigned sourceOffset); 256 public: 256 257 ~CodeBlock(); 257 258 … … 551 552 // responsible for marking it. 552 553 553 class ProgramCodeBlock : public CodeBlock { 554 class GlobalCodeBlock : public CodeBlock { 555 public: 556 GlobalCodeBlock(ScopeNode* ownerNode, CodeType codeType, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset, JSGlobalObject* globalObject) 557 : CodeBlock(ownerNode, codeType, sourceProvider, sourceOffset) 558 , m_globalObject(globalObject) 559 { 560 m_globalObject->codeBlocks().add(this); 561 } 562 563 ~GlobalCodeBlock() 564 { 565 if (m_globalObject) 566 m_globalObject->codeBlocks().remove(this); 567 } 568 569 void clearGlobalObject() { m_globalObject = 0; } 570 571 private: 572 JSGlobalObject* m_globalObject; // For program and eval nodes, the global object that marks the constant pool. 573 }; 574 575 class ProgramCodeBlock : public GlobalCodeBlock { 554 576 public: 555 577 ProgramCodeBlock(ScopeNode* ownerNode, CodeType codeType, JSGlobalObject* globalObject, PassRefPtr<SourceProvider> sourceProvider) 556 : CodeBlock(ownerNode, codeType, sourceProvider, 0) 557 , m_globalObject(globalObject) 558 { 559 m_globalObject->codeBlocks().add(this); 560 } 561 562 ~ProgramCodeBlock() 563 { 564 if (m_globalObject) 565 m_globalObject->codeBlocks().remove(this); 566 } 567 568 void clearGlobalObject() { m_globalObject = 0; } 569 570 private: 571 JSGlobalObject* m_globalObject; // For program and eval nodes, the global object that marks the constant pool. 572 }; 573 574 class EvalCodeBlock : public ProgramCodeBlock { 578 : GlobalCodeBlock(ownerNode, codeType, sourceProvider, 0, globalObject) 579 { 580 } 581 }; 582 583 class EvalCodeBlock : public GlobalCodeBlock { 575 584 public: 576 585 EvalCodeBlock(ScopeNode* ownerNode, JSGlobalObject* globalObject, PassRefPtr<SourceProvider> sourceProvider, int baseScopeDepth) 577 : ProgramCodeBlock(ownerNode, EvalCode, globalObject, sourceProvider)586 : GlobalCodeBlock(ownerNode, EvalCode, sourceProvider, 0, globalObject) 578 587 , m_baseScopeDepth(baseScopeDepth) 579 588 { … … 584 593 private: 585 594 int m_baseScopeDepth; 595 }; 596 597 class FunctionCodeBlock : public CodeBlock { 598 public: 599 FunctionCodeBlock(ScopeNode* ownerNode, CodeType codeType, PassRefPtr<SourceProvider> sourceProvider, unsigned sourceOffset) 600 : CodeBlock(ownerNode, codeType, sourceProvider, sourceOffset) 601 { 602 } 603 }; 604 605 class NativeCodeBlock : public CodeBlock { 606 public: 607 NativeCodeBlock(ScopeNode* ownerNode) 608 : CodeBlock(ownerNode) 609 { 610 } 586 611 }; 587 612 -
trunk/JavaScriptCore/bytecode/EvalCodeCache.h
r47022 r47304 30 30 #define EvalCodeCache_h 31 31 32 #include "Executable.h" 32 33 #include "JSGlobalObject.h" 33 34 #include "Nodes.h" … … 42 43 class EvalCodeCache { 43 44 public: 44 PassRefPtr<Eval Node> get(ExecState* exec, const UString& evalSource, ScopeChainNode* scopeChain, JSValue& exceptionValue)45 PassRefPtr<EvalExecutable> get(ExecState* exec, const UString& evalSource, ScopeChainNode* scopeChain, JSValue& exceptionValue) 45 46 { 46 RefPtr<Eval Node> evalNode;47 RefPtr<EvalExecutable> evalExecutable; 47 48 48 49 if (evalSource.size() < maxCacheableSourceLength && (*scopeChain->begin())->isVariableObject()) 49 eval Node = m_cacheMap.get(evalSource.rep());50 evalExecutable = m_cacheMap.get(evalSource.rep()); 50 51 51 if (!evalNode) { 52 int errorLine; 53 UString errorMessage; 54 55 SourceCode source = makeSource(evalSource); 56 evalNode = exec->globalData().parser->parse<EvalNode>(exec, exec->dynamicGlobalObject()->debugger(), source, &errorLine, &errorMessage); 57 if (evalNode) { 58 if (evalSource.size() < maxCacheableSourceLength && (*scopeChain->begin())->isVariableObject() && m_cacheMap.size() < maxCacheEntries) 59 m_cacheMap.set(evalSource.rep(), evalNode); 60 } else { 61 exceptionValue = Error::create(exec, SyntaxError, errorMessage, errorLine, source.provider()->asID(), 0); 52 if (!evalExecutable) { 53 evalExecutable = new EvalExecutable(makeSource(evalSource)); 54 exceptionValue = evalExecutable->parse(exec); 55 if (exceptionValue) 62 56 return 0; 63 } 57 58 if (evalSource.size() < maxCacheableSourceLength && (*scopeChain->begin())->isVariableObject() && m_cacheMap.size() < maxCacheEntries) 59 m_cacheMap.set(evalSource.rep(), evalExecutable); 64 60 } 65 61 66 return eval Node.release();62 return evalExecutable.release(); 67 63 } 68 64 … … 79 75 static const int maxCacheEntries = 64; 80 76 81 typedef HashMap<RefPtr<UString::Rep>, RefPtr<Eval Node> > EvalCacheMap;77 typedef HashMap<RefPtr<UString::Rep>, RefPtr<EvalExecutable> > EvalCacheMap; 82 78 EvalCacheMap m_cacheMap; 83 79 };
Note:
See TracChangeset
for help on using the changeset viewer.