1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_BACKGROUND_PARSING_TASK_H_ 6#define V8_BACKGROUND_PARSING_TASK_H_ 7 8#include "src/base/platform/platform.h" 9#include "src/base/platform/semaphore.h" 10#include "src/compiler.h" 11#include "src/parser.h" 12#include "src/smart-pointers.h" 13 14namespace v8 { 15namespace internal { 16 17class Parser; 18 19// Internal representation of v8::ScriptCompiler::StreamedSource. Contains all 20// data which needs to be transmitted between threads for background parsing, 21// finalizing it on the main thread, and compiling on the main thread. 22struct StreamedSource { 23 StreamedSource(ScriptCompiler::ExternalSourceStream* source_stream, 24 ScriptCompiler::StreamedSource::Encoding encoding) 25 : source_stream(source_stream), 26 encoding(encoding), 27 hash_seed(0), 28 allow_lazy(false) {} 29 30 // Internal implementation of v8::ScriptCompiler::StreamedSource. 31 SmartPointer<ScriptCompiler::ExternalSourceStream> source_stream; 32 ScriptCompiler::StreamedSource::Encoding encoding; 33 SmartPointer<ScriptCompiler::CachedData> cached_data; 34 35 // Data needed for parsing, and data needed to to be passed between thread 36 // between parsing and compilation. These need to be initialized before the 37 // compilation starts. 38 UnicodeCache unicode_cache; 39 SmartPointer<CompilationInfo> info; 40 uint32_t hash_seed; 41 bool allow_lazy; 42 SmartPointer<Parser> parser; 43 44 private: 45 // Prevent copying. Not implemented. 46 StreamedSource(const StreamedSource&); 47 StreamedSource& operator=(const StreamedSource&); 48}; 49 50 51class BackgroundParsingTask : public ScriptCompiler::ScriptStreamingTask { 52 public: 53 BackgroundParsingTask(StreamedSource* source, 54 ScriptCompiler::CompileOptions options, int stack_size, 55 Isolate* isolate); 56 57 virtual void Run(); 58 59 private: 60 StreamedSource* source_; // Not owned. 61 ScriptCompiler::CompileOptions options_; 62 int stack_size_; 63}; 64} 65} // namespace v8::internal 66 67#endif // V8_BACKGROUND_PARSING_TASK_H_ 68