Home | History | Annotate | Download | only in src
      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 
     14 namespace v8 {
     15 namespace internal {
     16 
     17 class 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.
     22 struct 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 
     51 class 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