// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_BACKGROUND_PARSING_TASK_H_ #define V8_BACKGROUND_PARSING_TASK_H_ #include <memory> #include "include/v8.h" #include "src/base/platform/platform.h" #include "src/base/platform/semaphore.h" #include "src/parsing/parse-info.h" #include "src/unicode-cache.h" namespace v8 { namespace internal { class Parser; class ScriptData; // Internal representation of v8::ScriptCompiler::StreamedSource. Contains all // data which needs to be transmitted between threads for background parsing, // finalizing it on the main thread, and compiling on the main thread. struct StreamedSource { StreamedSource(ScriptCompiler::ExternalSourceStream* source_stream, ScriptCompiler::StreamedSource::Encoding encoding) : source_stream(source_stream), encoding(encoding) {} void Release(); // Internal implementation of v8::ScriptCompiler::StreamedSource. std::unique_ptr<ScriptCompiler::ExternalSourceStream> source_stream; ScriptCompiler::StreamedSource::Encoding encoding; std::unique_ptr<ScriptCompiler::CachedData> cached_data; // Data needed for parsing, and data needed to to be passed between thread // between parsing and compilation. These need to be initialized before the // compilation starts. UnicodeCache unicode_cache; std::unique_ptr<ParseInfo> info; std::unique_ptr<Parser> parser; // Prevent copying. StreamedSource(const StreamedSource&) = delete; StreamedSource& operator=(const StreamedSource&) = delete; }; class BackgroundParsingTask : public ScriptCompiler::ScriptStreamingTask { public: BackgroundParsingTask(StreamedSource* source, ScriptCompiler::CompileOptions options, int stack_size, Isolate* isolate); virtual void Run(); private: StreamedSource* source_; // Not owned. int stack_size_; ScriptData* script_data_; }; } // namespace internal } // namespace v8 #endif // V8_BACKGROUND_PARSING_TASK_H_