+ SourceCodeKey key = SourceCodeKey(source, String(), CacheTypes<UnlinkedCodeBlockType>::codeType, builtinMode, strictMode, thisTDZMode);
+ SourceCodeValue* cache = m_sourceCode.findCacheAndUpdateAge(key);
+ bool canCache = debuggerMode == DebuggerOff && profilerMode == ProfilerOff && !vm.typeProfiler() && !vm.controlFlowProfiler();
+ if (cache && canCache) {
+ UnlinkedCodeBlockType* unlinkedCodeBlock = jsCast<UnlinkedCodeBlockType*>(cache->cell.get());
+ unsigned firstLine = source.firstLine() + unlinkedCodeBlock->firstLine();
+ unsigned lineCount = unlinkedCodeBlock->lineCount();
+ unsigned startColumn = unlinkedCodeBlock->startColumn() + source.startColumn();
+ bool endColumnIsOnStartLine = !lineCount;
+ unsigned endColumn = unlinkedCodeBlock->endColumn() + (endColumnIsOnStartLine ? startColumn : 1);
+ executable->recordParse(unlinkedCodeBlock->codeFeatures(), unlinkedCodeBlock->hasCapturedVariables(), firstLine, firstLine + lineCount, startColumn, endColumn);
+ return unlinkedCodeBlock;
+ }
+