| Index: src/preparser.h
|
| diff --git a/src/preparser.h b/src/preparser.h
|
| index be27be75f75a66ad6b21590808467e91b081d210..5be009d66a39c5227795067b53e183cf3dd268aa 100644
|
| --- a/src/preparser.h
|
| +++ b/src/preparser.h
|
| @@ -90,7 +90,8 @@ class ParserBase : public Traits {
|
| allow_harmony_object_literals_(false),
|
| allow_harmony_sloppy_(false),
|
| allow_harmony_computed_property_names_(false),
|
| - allow_harmony_rest_params_(false) {}
|
| + allow_harmony_rest_params_(false),
|
| + allow_strong_mode_(false) {}
|
|
|
| // Getters that indicate whether certain syntactical constructs are
|
| // allowed to be parsed by this instance of the parser.
|
| @@ -118,6 +119,8 @@ class ParserBase : public Traits {
|
| return allow_harmony_rest_params_;
|
| }
|
|
|
| + bool allow_strong_mode() const { return allow_strong_mode_; }
|
| +
|
| // Setters that determine whether certain syntactical constructs are
|
| // allowed to be parsed by this instance of the parser.
|
| void set_allow_lazy(bool allow) { allow_lazy_ = allow; }
|
| @@ -155,6 +158,7 @@ class ParserBase : public Traits {
|
| void set_allow_harmony_rest_params(bool allow) {
|
| allow_harmony_rest_params_ = allow;
|
| }
|
| + void set_allow_strong_mode(bool allow) { allow_strong_mode_ = allow; }
|
|
|
| protected:
|
| enum AllowEvalOrArgumentsAsIdentifier {
|
| @@ -634,6 +638,7 @@ class ParserBase : public Traits {
|
| bool allow_harmony_sloppy_;
|
| bool allow_harmony_computed_property_names_;
|
| bool allow_harmony_rest_params_;
|
| + bool allow_strong_mode_;
|
| };
|
|
|
|
|
| @@ -754,8 +759,7 @@ class PreParserExpression {
|
| }
|
|
|
| static PreParserExpression StringLiteral() {
|
| - return PreParserExpression(TypeField::encode(kStringLiteralExpression) |
|
| - IsUseStrictField::encode(false));
|
| + return PreParserExpression(TypeField::encode(kStringLiteralExpression));
|
| }
|
|
|
| static PreParserExpression UseStrictStringLiteral() {
|
| @@ -763,6 +767,11 @@ class PreParserExpression {
|
| IsUseStrictField::encode(true));
|
| }
|
|
|
| + static PreParserExpression UseStrongStringLiteral() {
|
| + return PreParserExpression(TypeField::encode(kStringLiteralExpression) |
|
| + IsUseStrongField::encode(true));
|
| + }
|
| +
|
| static PreParserExpression This() {
|
| return PreParserExpression(TypeField::encode(kExpression) |
|
| ExpressionTypeField::encode(kThisExpression));
|
| @@ -814,6 +823,11 @@ class PreParserExpression {
|
| IsUseStrictField::decode(code_);
|
| }
|
|
|
| + bool IsUseStrongLiteral() const {
|
| + return TypeField::decode(code_) == kStringLiteralExpression &&
|
| + IsUseStrongField::decode(code_);
|
| + }
|
| +
|
| bool IsThis() const {
|
| return TypeField::decode(code_) == kExpression &&
|
| ExpressionTypeField::decode(code_) == kThisExpression;
|
| @@ -922,6 +936,7 @@ class PreParserExpression {
|
| typedef BitField<ExpressionType, ParenthesizationField::kNext, 3>
|
| ExpressionTypeField;
|
| typedef BitField<bool, ParenthesizationField::kNext, 1> IsUseStrictField;
|
| + typedef BitField<bool, IsUseStrictField::kNext, 1> IsUseStrongField;
|
| typedef BitField<bool, ParenthesizationField::kNext, 1>
|
| IsValidArrowParamListField;
|
| typedef BitField<PreParserIdentifier::Type, ParenthesizationField::kNext, 10>
|
| @@ -963,6 +978,9 @@ class PreParserStatement {
|
| if (expression.IsUseStrictLiteral()) {
|
| return PreParserStatement(kUseStrictExpressionStatement);
|
| }
|
| + if (expression.IsUseStrongLiteral()) {
|
| + return PreParserStatement(kUseStrongExpressionStatement);
|
| + }
|
| if (expression.IsStringLiteral()) {
|
| return PreParserStatement(kStringLiteralExpressionStatement);
|
| }
|
| @@ -977,6 +995,8 @@ class PreParserStatement {
|
| return code_ == kUseStrictExpressionStatement;
|
| }
|
|
|
| + bool IsUseStrongLiteral() { return code_ == kUseStrongExpressionStatement; }
|
| +
|
| bool IsFunctionDeclaration() {
|
| return code_ == kFunctionDeclaration;
|
| }
|
| @@ -986,6 +1006,7 @@ class PreParserStatement {
|
| kUnknownStatement,
|
| kStringLiteralExpressionStatement,
|
| kUseStrictExpressionStatement,
|
| + kUseStrongExpressionStatement,
|
| kFunctionDeclaration
|
| };
|
|
|
|
|