Unreviewed, rolling out r241612.
[WebKit-https.git] / Source / JavaScriptCore / jsc.cpp
index 37ff1d7..2da8f91 100644 (file)
@@ -955,110 +955,12 @@ static bool fetchScriptFromLocalFileSystem(const String& fileName, Vector<char>&
     return true;
 }
 
-class ShellSourceProvider : public StringSourceProvider {
-public:
-    static Ref<ShellSourceProvider> create(const String& source, const SourceOrigin& sourceOrigin, URL&& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
-    {
-        return adoptRef(*new ShellSourceProvider(source, sourceOrigin, WTFMove(url), startPosition, sourceType));
-    }
-
-    ~ShellSourceProvider()
-    {
-#if OS(DARWIN)
-        if (m_cachedBytecode.size())
-            munmap(const_cast<void*>(m_cachedBytecode.data()), m_cachedBytecode.size());
-#endif
-    }
-
-    const CachedBytecode* cachedBytecode() const override
-    {
-        return &m_cachedBytecode;
-    }
-
-    bool cacheBytecode(const CachedBytecode& cachedBytecode) const override
-    {
-#if OS(DARWIN)
-        String filename = cachePath();
-        if (filename.isNull())
-            return false;
-        int fd = open(filename.utf8().data(), O_CREAT | O_WRONLY, 0666);
-        if (fd == -1)
-            return false;
-        int rc = flock(fd, LOCK_EX | LOCK_NB);
-        if (!rc)
-            write(fd, cachedBytecode.data(), cachedBytecode.size());
-        close(fd);
-        return !rc;
-#else
-        return false;
-#endif
-    }
-
-private:
-    String cachePath() const
-    {
-        const char* cachePath = Options::diskCachePath();
-        if (!cachePath)
-            return String(static_cast<const char*>(nullptr));
-
-        String filename = sourceOrigin().string();
-        filename.replace('/', '_');
-        return makeString(cachePath, '/', source().toString().hash(), '-', filename, ".bytecode-cache");
-    }
-
-    void loadBytecode()
-    {
-#if OS(DARWIN)
-        String filename = cachePath();
-        if (filename.isNull())
-            return;
-
-        int fd = open(filename.utf8().data(), O_RDONLY);
-        if (fd == -1)
-            return;
-
-        int rc = flock(fd, LOCK_SH | LOCK_NB);
-        if (rc) {
-            close(fd);
-            return;
-        }
-
-        struct stat sb;
-        int res = fstat(fd, &sb);
-        size_t size = static_cast<size_t>(sb.st_size);
-        if (res || !size) {
-            close(fd);
-            return;
-        }
-
-        void* buffer = mmap(nullptr, size, PROT_READ, MAP_PRIVATE, fd, 0);
-        close(fd);
-        if (buffer == MAP_FAILED)
-            return;
-        m_cachedBytecode = CachedBytecode { buffer, size };
-#endif
-    }
-
-    ShellSourceProvider(const String& source, const SourceOrigin& sourceOrigin, URL&& url, const TextPosition& startPosition, SourceProviderSourceType sourceType)
-        : StringSourceProvider(source, sourceOrigin, WTFMove(url), startPosition, sourceType)
-    {
-        loadBytecode();
-    }
-
-    CachedBytecode m_cachedBytecode;
-};
-
-static inline SourceCode jscSource(const String& source, const SourceOrigin& sourceOrigin, URL&& url = URL(), const TextPosition& startPosition = TextPosition(), SourceProviderSourceType sourceType = SourceProviderSourceType::Program)
-{
-    return SourceCode(ShellSourceProvider::create(source, sourceOrigin, WTFMove(url), startPosition, sourceType), startPosition.m_line.oneBasedInt(), startPosition.m_column.oneBasedInt());
-}
-
 template<typename Vector>
 static inline SourceCode jscSource(const Vector& utf8, const SourceOrigin& sourceOrigin, const String& filename)
 {
     // FIXME: This should use an absolute file URL https://bugs.webkit.org/show_bug.cgi?id=193077
     String str = stringFromUTF(utf8);
-    return jscSource(str, sourceOrigin, URL({ }, filename));
+    return makeSource(str, sourceOrigin, URL({ }, filename));
 }
 
 template<typename Vector>
@@ -1141,7 +1043,7 @@ JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalObject,
     }
 #endif
 
-    auto sourceCode = JSSourceCode::create(vm, jscSource(stringFromUTF(buffer), SourceOrigin { moduleKey }, WTFMove(moduleURL), TextPosition(), SourceProviderSourceType::Module));
+    auto sourceCode = JSSourceCode::create(vm, makeSource(stringFromUTF(buffer), SourceOrigin { moduleKey }, WTFMove(moduleURL), TextPosition(), SourceProviderSourceType::Module));
     catchScope.releaseAssertNoException();
     auto result = deferred->resolve(exec, sourceCode);
     catchScope.clearException();
@@ -1814,7 +1716,7 @@ EncodedJSValue JSC_HOST_CALL functionDollarEvalScript(ExecState* exec)
         return JSValue::encode(throwException(exec, scope, createError(exec, "Expected global to point to a global object"_s)));
     
     NakedPtr<Exception> evaluationException;
-    JSValue result = evaluate(globalObject->globalExec(), jscSource(sourceCode, exec->callerSourceOrigin()), JSValue(), evaluationException);
+    JSValue result = evaluate(globalObject->globalExec(), makeSource(sourceCode, exec->callerSourceOrigin()), JSValue(), evaluationException);
     if (evaluationException)
         throwException(exec, scope, evaluationException);
     return JSValue::encode(result);
@@ -2572,7 +2474,7 @@ static void runWithOptions(GlobalObject* globalObject, CommandLine& options, boo
         if (isModule) {
             if (!promise) {
                 // FIXME: This should use an absolute file URL https://bugs.webkit.org/show_bug.cgi?id=193077
-                promise = loadAndEvaluateModule(globalObject->globalExec(), jscSource(stringFromUTF(scriptBuffer), SourceOrigin { absolutePath(fileName) }, URL({ }, fileName), TextPosition(), SourceProviderSourceType::Module), jsUndefined());
+                promise = loadAndEvaluateModule(globalObject->globalExec(), makeSource(stringFromUTF(scriptBuffer), SourceOrigin { absolutePath(fileName) }, URL({ }, fileName), TextPosition(), SourceProviderSourceType::Module), jsUndefined());
             }
             scope.clearException();