| 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,
|
|
|