• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2010 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 #include "src/parsing/preparse-data.h"
6 #include "src/base/hashmap.h"
7 #include "src/base/logging.h"
8 #include "src/globals.h"
9 #include "src/parsing/parser.h"
10 #include "src/parsing/preparse-data-format.h"
11 
12 namespace v8 {
13 namespace internal {
14 
LogFunction(int start,int end,int num_parameters,int function_length,bool has_duplicate_parameters,int literals,int properties,LanguageMode language_mode,bool uses_super_property,bool calls_eval)15 void ParserLogger::LogFunction(int start, int end, int num_parameters,
16                                int function_length,
17                                bool has_duplicate_parameters, int literals,
18                                int properties, LanguageMode language_mode,
19                                bool uses_super_property, bool calls_eval) {
20   function_store_.Add(start);
21   function_store_.Add(end);
22   function_store_.Add(num_parameters);
23   function_store_.Add(function_length);
24   function_store_.Add(literals);
25   function_store_.Add(properties);
26   function_store_.Add(
27       FunctionEntry::EncodeFlags(language_mode, uses_super_property, calls_eval,
28                                  has_duplicate_parameters));
29 }
30 
ParserLogger()31 ParserLogger::ParserLogger() {
32   preamble_[PreparseDataConstants::kMagicOffset] =
33       PreparseDataConstants::kMagicNumber;
34   preamble_[PreparseDataConstants::kVersionOffset] =
35       PreparseDataConstants::kCurrentVersion;
36   preamble_[PreparseDataConstants::kFunctionsSizeOffset] = 0;
37   preamble_[PreparseDataConstants::kSizeOffset] = 0;
38   DCHECK_EQ(4, PreparseDataConstants::kHeaderSize);
39 #ifdef DEBUG
40   prev_start_ = -1;
41 #endif
42 }
43 
GetScriptData()44 ScriptData* ParserLogger::GetScriptData() {
45   int function_size = function_store_.size();
46   int total_size = PreparseDataConstants::kHeaderSize + function_size;
47   unsigned* data = NewArray<unsigned>(total_size);
48   preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size;
49   MemCopy(data, preamble_, sizeof(preamble_));
50   if (function_size > 0) {
51     function_store_.WriteTo(Vector<unsigned>(
52         data + PreparseDataConstants::kHeaderSize, function_size));
53   }
54   DCHECK(IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment));
55   ScriptData* result = new ScriptData(reinterpret_cast<byte*>(data),
56                                       total_size * sizeof(unsigned));
57   result->AcquireDataOwnership();
58   return result;
59 }
60 
61 
62 }  // namespace internal
63 }  // namespace v8.
64