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

Side by Side Diff: src/preparse-data.h

Issue 923683002: Fix lazy parsing for functions that use super. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Increment the PreparserData version Created 5 years, 10 months 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/parser.cc ('k') | src/preparse-data-format.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 #ifndef V8_PREPARSE_DATA_H_ 5 #ifndef V8_PREPARSE_DATA_H_
6 #define V8_PREPARSE_DATA_H_ 6 #define V8_PREPARSE_DATA_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/hashmap.h" 9 #include "src/hashmap.h"
10 #include "src/preparse-data-format.h" 10 #include "src/preparse-data-format.h"
11 #include "src/utils-inl.h" 11 #include "src/utils-inl.h"
12 12
13 namespace v8 { 13 namespace v8 {
14 namespace internal { 14 namespace internal {
15 15
16 class ScriptData; 16 class ScriptData;
17 17
18 18
19 // Abstract interface for preparse data recorder. 19 // Abstract interface for preparse data recorder.
20 class ParserRecorder { 20 class ParserRecorder {
21 public: 21 public:
22 ParserRecorder() { } 22 ParserRecorder() { }
23 virtual ~ParserRecorder() { } 23 virtual ~ParserRecorder() { }
24 24
25 // Logs the scope and some details of a function literal in the source. 25 // Logs the scope and some details of a function literal in the source.
26 virtual void LogFunction(int start, int end, int literals, int properties, 26 virtual void LogFunction(int start, int end, int literals, int properties,
27 LanguageMode language_mode) = 0; 27 LanguageMode language_mode,
28 bool uses_super_property) = 0;
28 29
29 // Logs an error message and marks the log as containing an error. 30 // Logs an error message and marks the log as containing an error.
30 // Further logging will be ignored, and ExtractData will return a vector 31 // Further logging will be ignored, and ExtractData will return a vector
31 // representing the error only. 32 // representing the error only.
32 virtual void LogMessage(int start, 33 virtual void LogMessage(int start,
33 int end, 34 int end,
34 const char* message, 35 const char* message,
35 const char* argument_opt, 36 const char* argument_opt,
36 bool is_reference_error) = 0; 37 bool is_reference_error) = 0;
37 private: 38 private:
38 DISALLOW_COPY_AND_ASSIGN(ParserRecorder); 39 DISALLOW_COPY_AND_ASSIGN(ParserRecorder);
39 }; 40 };
40 41
41 42
42 class SingletonLogger : public ParserRecorder { 43 class SingletonLogger : public ParserRecorder {
43 public: 44 public:
44 SingletonLogger() 45 SingletonLogger()
45 : has_error_(false), start_(-1), end_(-1), is_reference_error_(false) {} 46 : has_error_(false), start_(-1), end_(-1), is_reference_error_(false) {}
46 virtual ~SingletonLogger() {} 47 virtual ~SingletonLogger() {}
47 48
48 void Reset() { has_error_ = false; } 49 void Reset() { has_error_ = false; }
49 50
50 virtual void LogFunction(int start, int end, int literals, int properties, 51 virtual void LogFunction(int start, int end, int literals, int properties,
51 LanguageMode language_mode) { 52 LanguageMode language_mode,
53 bool scope_uses_super_property) {
52 DCHECK(!has_error_); 54 DCHECK(!has_error_);
53 start_ = start; 55 start_ = start;
54 end_ = end; 56 end_ = end;
55 literals_ = literals; 57 literals_ = literals;
56 properties_ = properties; 58 properties_ = properties;
57 language_mode_ = language_mode; 59 language_mode_ = language_mode;
60 scope_uses_super_property_ = scope_uses_super_property;
58 } 61 }
59 62
60 // Logs an error message and marks the log as containing an error. 63 // Logs an error message and marks the log as containing an error.
61 // Further logging will be ignored, and ExtractData will return a vector 64 // Further logging will be ignored, and ExtractData will return a vector
62 // representing the error only. 65 // representing the error only.
63 virtual void LogMessage(int start, 66 virtual void LogMessage(int start,
64 int end, 67 int end,
65 const char* message, 68 const char* message,
66 const char* argument_opt, 69 const char* argument_opt,
67 bool is_reference_error) { 70 bool is_reference_error) {
(...skipping 15 matching lines...) Expand all
83 return literals_; 86 return literals_;
84 } 87 }
85 int properties() const { 88 int properties() const {
86 DCHECK(!has_error_); 89 DCHECK(!has_error_);
87 return properties_; 90 return properties_;
88 } 91 }
89 LanguageMode language_mode() const { 92 LanguageMode language_mode() const {
90 DCHECK(!has_error_); 93 DCHECK(!has_error_);
91 return language_mode_; 94 return language_mode_;
92 } 95 }
96 bool scope_uses_super_property() const {
97 DCHECK(!has_error_);
98 return scope_uses_super_property_;
99 }
93 int is_reference_error() const { return is_reference_error_; } 100 int is_reference_error() const { return is_reference_error_; }
94 const char* message() { 101 const char* message() {
95 DCHECK(has_error_); 102 DCHECK(has_error_);
96 return message_; 103 return message_;
97 } 104 }
98 const char* argument_opt() const { 105 const char* argument_opt() const {
99 DCHECK(has_error_); 106 DCHECK(has_error_);
100 return argument_opt_; 107 return argument_opt_;
101 } 108 }
102 109
103 private: 110 private:
104 bool has_error_; 111 bool has_error_;
105 int start_; 112 int start_;
106 int end_; 113 int end_;
107 // For function entries. 114 // For function entries.
108 int literals_; 115 int literals_;
109 int properties_; 116 int properties_;
110 LanguageMode language_mode_; 117 LanguageMode language_mode_;
118 bool scope_uses_super_property_;
111 // For error messages. 119 // For error messages.
112 const char* message_; 120 const char* message_;
113 const char* argument_opt_; 121 const char* argument_opt_;
114 bool is_reference_error_; 122 bool is_reference_error_;
115 }; 123 };
116 124
117 125
118 class CompleteParserRecorder : public ParserRecorder { 126 class CompleteParserRecorder : public ParserRecorder {
119 public: 127 public:
120 struct Key { 128 struct Key {
121 bool is_one_byte; 129 bool is_one_byte;
122 Vector<const byte> literal_bytes; 130 Vector<const byte> literal_bytes;
123 }; 131 };
124 132
125 CompleteParserRecorder(); 133 CompleteParserRecorder();
126 virtual ~CompleteParserRecorder() {} 134 virtual ~CompleteParserRecorder() {}
127 135
128 virtual void LogFunction(int start, int end, int literals, int properties, 136 virtual void LogFunction(int start, int end, int literals, int properties,
129 LanguageMode language_mode) { 137 LanguageMode language_mode,
138 bool scope_uses_super_property) {
130 function_store_.Add(start); 139 function_store_.Add(start);
131 function_store_.Add(end); 140 function_store_.Add(end);
132 function_store_.Add(literals); 141 function_store_.Add(literals);
133 function_store_.Add(properties); 142 function_store_.Add(properties);
134 function_store_.Add(language_mode); 143 function_store_.Add(language_mode);
144 function_store_.Add(scope_uses_super_property);
135 } 145 }
136 146
137 // Logs an error message and marks the log as containing an error. 147 // Logs an error message and marks the log as containing an error.
138 // Further logging will be ignored, and ExtractData will return a vector 148 // Further logging will be ignored, and ExtractData will return a vector
139 // representing the error only. 149 // representing the error only.
140 virtual void LogMessage(int start, 150 virtual void LogMessage(int start,
141 int end, 151 int end,
142 const char* message, 152 const char* message,
143 const char* argument_opt, 153 const char* argument_opt,
144 bool is_reference_error_); 154 bool is_reference_error_);
(...skipping 18 matching lines...) Expand all
163 173
164 #ifdef DEBUG 174 #ifdef DEBUG
165 int prev_start_; 175 int prev_start_;
166 #endif 176 #endif
167 }; 177 };
168 178
169 179
170 } } // namespace v8::internal. 180 } } // namespace v8::internal.
171 181
172 #endif // V8_PREPARSE_DATA_H_ 182 #endif // V8_PREPARSE_DATA_H_
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/preparse-data-format.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698