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

Unified Diff: src/parsing/preparser.h

Issue 1810943002: Add parsing for tuple types (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@types
Patch Set: Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: src/parsing/preparser.h
diff --git a/src/parsing/preparser.h b/src/parsing/preparser.h
index 3b7663c9407a1e99eedf192b1eac64bd49a95ae0..bc7b735918a6529775b1cb169b08c597b0edea51 100644
--- a/src/parsing/preparser.h
+++ b/src/parsing/preparser.h
@@ -436,14 +436,14 @@ class PreParserFormalParameter {
V8_INLINE static PreParserFormalParameter Unnamed(const PreParserType& type);
bool IsValidType() const { return valid_type_; }
- bool IsSimpleIdentifier() const { return simple_identifier_; }
+ bool IsValidBindingIdentifierOrPattern() const { return valid_binder_; }
private:
- PreParserFormalParameter(bool valid, bool simple)
- : valid_type_(valid), simple_identifier_(simple) {}
+ PreParserFormalParameter(bool valid_type, bool valid_binder)
+ : valid_type_(valid_type), valid_binder_(valid_binder) {}
bool valid_type_;
- bool simple_identifier_;
+ bool valid_binder_;
};
@@ -472,14 +472,15 @@ class PreParserFormalParameters
class PreParserType {
public:
- static PreParserType Default(bool valid = true) {
- return PreParserType(valid, false, false);
+ static PreParserType Default(bool valid_type = true,
+ bool valid_binder = false) {
+ return PreParserType(valid_type, valid_binder, false);
}
static PreParserType Reference(bool simple) {
return PreParserType(true, simple, false);
}
- static PreParserType Parenthesized(bool valid, int arity) {
- return PreParserType(valid, false, false, arity);
+ static PreParserType Parenthesized(bool valid_type, int arity) {
+ return PreParserType(valid_type, false, false, arity);
}
static PreParserType StringLiteral() {
return PreParserType(true, false, true);
@@ -501,34 +502,29 @@ class PreParserType {
}
bool IsValidType() const { return valid_type_; }
- bool IsSimpleIdentifier() const { return simple_identifier_; }
+ bool IsValidBindingIdentifierOrPattern() const { return valid_binder_; }
bool IsStringLiteralType() const { return string_; }
- PreParserIdentifier AsSimpleIdentifier() const {
- DCHECK(simple_identifier_);
- return PreParserIdentifier::Default();
- }
-
private:
- PreParserType(bool valid, bool simple, bool string, int arity = -1)
- : valid_type_(valid),
- simple_identifier_(simple),
+ PreParserType(bool valid_type, bool valid_binder, bool string, int arity = -1)
+ : valid_type_(valid_type),
+ valid_binder_(valid_binder),
string_(string),
arity_(arity) {}
bool valid_type_;
- bool simple_identifier_;
+ bool valid_binder_;
bool string_;
int arity_;
};
-typedef PreParserList<PreParserType> PreParserTypeArguments;
+typedef PreParserList<PreParserType> PreParserTypeList;
V8_INLINE PreParserFormalParameter
PreParserFormalParameter::Unnamed(const PreParserType& type) {
return PreParserFormalParameter(type.IsValidType(),
- type.IsSimpleIdentifier());
+ type.IsValidBindingIdentifierOrPattern());
}
@@ -674,7 +670,8 @@ class PreParserFactory {
typesystem::PreParserType NewPredefinedType(
typesystem::PredefinedType::Kind kind, int pos) {
- return typesystem::PreParserType::Default();
+ return typesystem::PreParserType::Default(
+ true, kind != typesystem::PredefinedType::kVoidType);
}
typesystem::PreParserType NewThisType(int pos) {
@@ -698,6 +695,12 @@ class PreParserFactory {
return typesystem::PreParserType::Default();
}
+ typesystem::PreParserType NewTupleType(
+ const typesystem::PreParserTypeList& elements, bool valid_type,
+ bool valid_binder, bool spread, int pos) {
+ return typesystem::PreParserType::Default(valid_type, valid_binder);
+ }
+
typesystem::PreParserType NewFunctionType(
const typesystem::PreParserTypeParameters& type_parameters,
const typesystem::PreParserFormalParameters& parameters,
@@ -713,7 +716,7 @@ class PreParserFactory {
typesystem::PreParserType NewTypeReference(
const PreParserIdentifier& name,
- const typesystem::PreParserTypeArguments& type_arguments, int pos) {
+ const typesystem::PreParserTypeList& type_arguments, int pos) {
return typesystem::PreParserType::Reference(type_arguments.length() == 0);
}
@@ -724,7 +727,7 @@ class PreParserFactory {
}
typesystem::PreParserFormalParameter NewFormalParameter(
- const PreParserIdentifier& name, bool optional, bool spread,
+ const typesystem::PreParserType& binder, bool optional, bool spread,
const typesystem::PreParserType& type, int pos) {
return typesystem::PreParserFormalParameter::Named();
}
@@ -800,7 +803,7 @@ class PreParserTraits {
struct TypeSystem {
typedef typesystem::PreParserType Type;
- typedef typesystem::PreParserTypeArguments TypeArguments;
+ typedef typesystem::PreParserTypeList TypeList;
typedef typesystem::PreParserTypeParameter TypeParameter;
typedef typesystem::PreParserTypeParameters TypeParameters;
typedef typesystem::PreParserFormalParameter FormalParameter;
@@ -963,8 +966,8 @@ class PreParserTraits {
static typesystem::PreParserType EmptyType() {
return typesystem::PreParserType::Default(false);
}
- static typesystem::PreParserTypeArguments NullTypeArguments() {
- return typesystem::PreParserTypeArguments();
+ static typesystem::PreParserTypeList NullTypeList() {
+ return typesystem::PreParserTypeList();
}
static typesystem::PreParserTypeParameters NullTypeParameters() {
return typesystem::PreParserTypeParameters();
@@ -973,8 +976,8 @@ class PreParserTraits {
const typesystem::PreParserTypeParameters& typ_pars) {
return typ_pars.length() == 0;
}
- static typesystem::PreParserTypeArguments EmptyTypeArguments() {
- return typesystem::PreParserTypeArguments();
+ static typesystem::PreParserTypeList EmptyTypeList() {
+ return typesystem::PreParserTypeList();
}
static typesystem::PreParserTypeParameters EmptyTypeParameters() {
return typesystem::PreParserTypeParameters();
@@ -988,6 +991,9 @@ class PreParserTraits {
static PreParserIdentifierList EmptyIdentifierList() {
return PreParserIdentifierList();
}
+ static typesystem::PreParserType HoleTypeElement() {
+ return typesystem::PreParserType::Default(false);
+ }
// Odd-ball literal creators.
static PreParserExpression GetLiteralTheHole(int position,

Powered by Google App Engine
This is Rietveld 408576698