Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Side by Side Diff: src/parsing/preparse-data.cc

Issue 2474393003: [parser] Give preparser and parser independent loggers (Closed)
Patch Set: Addressed comment Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/parsing/preparse-data.h ('k') | src/parsing/preparser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/parsing/preparse-data.h" 5 #include "src/parsing/preparse-data.h"
6 #include "src/base/hashmap.h" 6 #include "src/base/hashmap.h"
7 #include "src/base/logging.h" 7 #include "src/base/logging.h"
8 #include "src/globals.h" 8 #include "src/globals.h"
9 #include "src/parsing/parser.h" 9 #include "src/parsing/parser.h"
10 #include "src/parsing/preparse-data-format.h" 10 #include "src/parsing/preparse-data-format.h"
11 11
12 namespace v8 { 12 namespace v8 {
13 namespace internal { 13 namespace internal {
14 14
15 void CompleteParserRecorder::LogFunction( 15 void ParserLogger::LogFunction(int start, int end, int num_parameters,
16 int start, int end, int num_parameters, int function_length, 16 int function_length,
17 bool has_duplicate_parameters, int literals, int properties, 17 bool has_duplicate_parameters, int literals,
18 LanguageMode language_mode, bool uses_super_property, bool calls_eval) { 18 int properties, LanguageMode language_mode,
19 bool uses_super_property, bool calls_eval) {
19 function_store_.Add(start); 20 function_store_.Add(start);
20 function_store_.Add(end); 21 function_store_.Add(end);
21 function_store_.Add(num_parameters); 22 function_store_.Add(num_parameters);
22 function_store_.Add(function_length); 23 function_store_.Add(function_length);
23 function_store_.Add(literals); 24 function_store_.Add(literals);
24 function_store_.Add(properties); 25 function_store_.Add(properties);
25 function_store_.Add( 26 function_store_.Add(
26 FunctionEntry::EncodeFlags(language_mode, uses_super_property, calls_eval, 27 FunctionEntry::EncodeFlags(language_mode, uses_super_property, calls_eval,
27 has_duplicate_parameters)); 28 has_duplicate_parameters));
28 } 29 }
29 30
30 CompleteParserRecorder::CompleteParserRecorder() { 31 ParserLogger::ParserLogger() {
31 preamble_[PreparseDataConstants::kMagicOffset] = 32 preamble_[PreparseDataConstants::kMagicOffset] =
32 PreparseDataConstants::kMagicNumber; 33 PreparseDataConstants::kMagicNumber;
33 preamble_[PreparseDataConstants::kVersionOffset] = 34 preamble_[PreparseDataConstants::kVersionOffset] =
34 PreparseDataConstants::kCurrentVersion; 35 PreparseDataConstants::kCurrentVersion;
35 preamble_[PreparseDataConstants::kHasErrorOffset] = false; 36 preamble_[PreparseDataConstants::kHasErrorOffset] = false;
36 preamble_[PreparseDataConstants::kFunctionsSizeOffset] = 0; 37 preamble_[PreparseDataConstants::kFunctionsSizeOffset] = 0;
37 preamble_[PreparseDataConstants::kSizeOffset] = 0; 38 preamble_[PreparseDataConstants::kSizeOffset] = 0;
38 DCHECK_EQ(5, PreparseDataConstants::kHeaderSize); 39 DCHECK_EQ(5, PreparseDataConstants::kHeaderSize);
39 #ifdef DEBUG 40 #ifdef DEBUG
40 prev_start_ = -1; 41 prev_start_ = -1;
41 #endif 42 #endif
42 } 43 }
43 44
44 45 void ParserLogger::LogMessage(int start_pos, int end_pos,
45 void CompleteParserRecorder::LogMessage(int start_pos, int end_pos, 46 MessageTemplate::Template message,
46 MessageTemplate::Template message, 47 const char* arg_opt, ParseErrorType error_type) {
47 const char* arg_opt,
48 ParseErrorType error_type) {
49 if (HasError()) return; 48 if (HasError()) return;
50 preamble_[PreparseDataConstants::kHasErrorOffset] = true; 49 preamble_[PreparseDataConstants::kHasErrorOffset] = true;
51 function_store_.Reset(); 50 function_store_.Reset();
52 STATIC_ASSERT(PreparseDataConstants::kMessageStartPos == 0); 51 STATIC_ASSERT(PreparseDataConstants::kMessageStartPos == 0);
53 function_store_.Add(start_pos); 52 function_store_.Add(start_pos);
54 STATIC_ASSERT(PreparseDataConstants::kMessageEndPos == 1); 53 STATIC_ASSERT(PreparseDataConstants::kMessageEndPos == 1);
55 function_store_.Add(end_pos); 54 function_store_.Add(end_pos);
56 STATIC_ASSERT(PreparseDataConstants::kMessageArgCountPos == 2); 55 STATIC_ASSERT(PreparseDataConstants::kMessageArgCountPos == 2);
57 function_store_.Add((arg_opt == NULL) ? 0 : 1); 56 function_store_.Add((arg_opt == NULL) ? 0 : 1);
58 STATIC_ASSERT(PreparseDataConstants::kParseErrorTypePos == 3); 57 STATIC_ASSERT(PreparseDataConstants::kParseErrorTypePos == 3);
59 function_store_.Add(error_type); 58 function_store_.Add(error_type);
60 STATIC_ASSERT(PreparseDataConstants::kMessageTemplatePos == 4); 59 STATIC_ASSERT(PreparseDataConstants::kMessageTemplatePos == 4);
61 function_store_.Add(static_cast<unsigned>(message)); 60 function_store_.Add(static_cast<unsigned>(message));
62 STATIC_ASSERT(PreparseDataConstants::kMessageArgPos == 5); 61 STATIC_ASSERT(PreparseDataConstants::kMessageArgPos == 5);
63 if (arg_opt != NULL) WriteString(CStrVector(arg_opt)); 62 if (arg_opt != NULL) WriteString(CStrVector(arg_opt));
64 } 63 }
65 64
66 65 void ParserLogger::WriteString(Vector<const char> str) {
67 void CompleteParserRecorder::WriteString(Vector<const char> str) {
68 function_store_.Add(str.length()); 66 function_store_.Add(str.length());
69 for (int i = 0; i < str.length(); i++) { 67 for (int i = 0; i < str.length(); i++) {
70 function_store_.Add(str[i]); 68 function_store_.Add(str[i]);
71 } 69 }
72 } 70 }
73 71
74 72 ScriptData* ParserLogger::GetScriptData() {
75 ScriptData* CompleteParserRecorder::GetScriptData() {
76 int function_size = function_store_.size(); 73 int function_size = function_store_.size();
77 int total_size = PreparseDataConstants::kHeaderSize + function_size; 74 int total_size = PreparseDataConstants::kHeaderSize + function_size;
78 unsigned* data = NewArray<unsigned>(total_size); 75 unsigned* data = NewArray<unsigned>(total_size);
79 preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size; 76 preamble_[PreparseDataConstants::kFunctionsSizeOffset] = function_size;
80 MemCopy(data, preamble_, sizeof(preamble_)); 77 MemCopy(data, preamble_, sizeof(preamble_));
81 if (function_size > 0) { 78 if (function_size > 0) {
82 function_store_.WriteTo(Vector<unsigned>( 79 function_store_.WriteTo(Vector<unsigned>(
83 data + PreparseDataConstants::kHeaderSize, function_size)); 80 data + PreparseDataConstants::kHeaderSize, function_size));
84 } 81 }
85 DCHECK(IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment)); 82 DCHECK(IsAligned(reinterpret_cast<intptr_t>(data), kPointerAlignment));
86 ScriptData* result = new ScriptData(reinterpret_cast<byte*>(data), 83 ScriptData* result = new ScriptData(reinterpret_cast<byte*>(data),
87 total_size * sizeof(unsigned)); 84 total_size * sizeof(unsigned));
88 result->AcquireDataOwnership(); 85 result->AcquireDataOwnership();
89 return result; 86 return result;
90 } 87 }
91 88
92 89
93 } // namespace internal 90 } // namespace internal
94 } // namespace v8. 91 } // namespace v8.
OLDNEW
« no previous file with comments | « src/parsing/preparse-data.h ('k') | src/parsing/preparser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698