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

Unified Diff: src/parsing/parser.h

Issue 2472063002: Preparse lazy function parameters (Closed)
Patch Set: IsArrowFunction 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ast/variables.h ('k') | src/parsing/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/parser.h
diff --git a/src/parsing/parser.h b/src/parsing/parser.h
index b1a0c1a9c0716a55c549b534a3f9c46a408f2b6c..bc6f7044bac7c7d927f53adc32f14e201d4f2dd9 100644
--- a/src/parsing/parser.h
+++ b/src/parsing/parser.h
@@ -31,11 +31,11 @@ class FunctionEntry BASE_EMBEDDED {
enum {
kStartPositionIndex,
kEndPositionIndex,
+ kNumParametersIndex,
+ kFunctionLengthIndex,
kLiteralCountIndex,
kPropertyCountIndex,
- kLanguageModeIndex,
- kUsesSuperPropertyIndex,
- kCallsEvalIndex,
+ kFlagsIndex,
kSize
};
@@ -44,18 +44,43 @@ class FunctionEntry BASE_EMBEDDED {
FunctionEntry() : backing_() { }
- int start_pos() { return backing_[kStartPositionIndex]; }
- int end_pos() { return backing_[kEndPositionIndex]; }
- int literal_count() { return backing_[kLiteralCountIndex]; }
- int property_count() { return backing_[kPropertyCountIndex]; }
- LanguageMode language_mode() {
- DCHECK(is_valid_language_mode(backing_[kLanguageModeIndex]));
- return static_cast<LanguageMode>(backing_[kLanguageModeIndex]);
+ class LanguageModeField : public BitField<LanguageMode, 0, 1> {};
+ class UsesSuperPropertyField
+ : public BitField<bool, LanguageModeField::kNext, 1> {};
+ class CallsEvalField
+ : public BitField<bool, UsesSuperPropertyField::kNext, 1> {};
+ class HasDuplicateParametersField
+ : public BitField<bool, CallsEvalField::kNext, 1> {};
+
+ static uint32_t EncodeFlags(LanguageMode language_mode,
+ bool uses_super_property, bool calls_eval,
+ bool has_duplicate_parameters) {
+ return LanguageModeField::encode(language_mode) |
+ UsesSuperPropertyField::encode(uses_super_property) |
+ CallsEvalField::encode(calls_eval) |
+ HasDuplicateParametersField::encode(has_duplicate_parameters);
+ }
+
+ int start_pos() const { return backing_[kStartPositionIndex]; }
+ int end_pos() const { return backing_[kEndPositionIndex]; }
+ int num_parameters() const { return backing_[kNumParametersIndex]; }
+ int function_length() const { return backing_[kFunctionLengthIndex]; }
+ int literal_count() const { return backing_[kLiteralCountIndex]; }
+ int property_count() const { return backing_[kPropertyCountIndex]; }
+ LanguageMode language_mode() const {
+ return LanguageModeField::decode(backing_[kFlagsIndex]);
+ }
+ bool uses_super_property() const {
+ return UsesSuperPropertyField::decode(backing_[kFlagsIndex]);
+ }
+ bool calls_eval() const {
+ return CallsEvalField::decode(backing_[kFlagsIndex]);
+ }
+ bool has_duplicate_parameters() const {
+ return HasDuplicateParametersField::decode(backing_[kFlagsIndex]);
}
- bool uses_super_property() { return backing_[kUsesSuperPropertyIndex]; }
- bool calls_eval() { return backing_[kCallsEvalIndex]; }
- bool is_valid() { return !backing_.is_empty(); }
+ bool is_valid() const { return !backing_.is_empty(); }
private:
Vector<unsigned> backing_;
@@ -490,13 +515,17 @@ class V8_EXPORT_PRIVATE Parser : public NON_EXPORTED_BASE(ParserBase<Parser>) {
// by parsing the function with PreParser. Consumes the ending }.
// If may_abort == true, the (pre-)parser may decide to abort skipping
// in order to force the function to be eagerly parsed, after all.
- LazyParsingResult SkipLazyFunctionBody(int* materialized_literal_count,
- int* expected_property_count,
- bool is_inner_function, bool may_abort,
- bool* ok);
-
- PreParser::PreParseResult ParseFunctionBodyWithPreParser(
- SingletonLogger* logger, bool is_inner_function, bool may_abort);
+ LazyParsingResult SkipFunction(
+ FunctionKind kind, DeclarationScope* function_scope, int* num_parameters,
+ int* function_length, bool* has_duplicate_parameters,
+ int* materialized_literal_count, int* expected_property_count,
+ bool is_inner_function, bool may_abort, bool* ok);
+
+ PreParser::PreParseResult ParseFunctionWithPreParser(FunctionKind kind,
+ DeclarationScope* scope,
+ SingletonLogger* logger,
+ bool is_inner_function,
+ bool may_abort);
Block* BuildParameterInitializationBlock(
const ParserFormalParameters& parameters, bool* ok);
@@ -508,6 +537,13 @@ class V8_EXPORT_PRIVATE Parser : public NON_EXPORTED_BASE(ParserBase<Parser>) {
const ParserFormalParameters& parameters, FunctionKind kind,
FunctionLiteral::FunctionType function_type, bool* ok);
+ ZoneList<Statement*>* ParseFunction(
+ const AstRawString* function_name, int pos, FunctionKind kind,
+ FunctionLiteral::FunctionType function_type,
+ DeclarationScope* function_scope, int* num_parameters,
+ int* function_length, bool* has_duplicate_parameters,
+ int* materialized_literal_count, int* expected_property_count, bool* ok);
+
void ThrowPendingError(Isolate* isolate, Handle<Script> script);
class TemplateLiteral : public ZoneObject {
« no previous file with comments | « src/ast/variables.h ('k') | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698