Index: src/preparser.cc |
diff --git a/src/preparser.cc b/src/preparser.cc |
index 170c9e725135818e3ff81a9914b16429b387dfa1..861011346355b40c5e2465d39ee4d8f717596a91 100644 |
--- a/src/preparser.cc |
+++ b/src/preparser.cc |
@@ -940,33 +940,22 @@ PreParser::Expression PreParser::ParseFunctionLiteral( |
// Validate strict mode. We can do this only after parsing the function, |
// since the function can declare itself strict. |
// Concise methods use StrictFormalParameters. |
- if (is_strict(language_mode()) || IsConciseMethod(kind) || is_rest) { |
- if (function_name.IsEvalOrArguments()) { |
- ReportMessageAt(function_name_location, "strict_eval_arguments"); |
- *ok = false; |
- return Expression::Default(); |
- } |
- if (name_is_strict_reserved) { |
- ReportMessageAt(function_name_location, "unexpected_strict_reserved"); |
- *ok = false; |
- return Expression::Default(); |
- } |
- if (eval_args_error_loc.IsValid()) { |
- ReportMessageAt(eval_args_error_loc, "strict_eval_arguments"); |
- *ok = false; |
- return Expression::Default(); |
- } |
- if (dupe_error_loc.IsValid()) { |
- ReportMessageAt(dupe_error_loc, "strict_param_dupe"); |
- *ok = false; |
- return Expression::Default(); |
- } |
- if (reserved_error_loc.IsValid()) { |
- ReportMessageAt(reserved_error_loc, "unexpected_strict_reserved"); |
- *ok = false; |
- return Expression::Default(); |
+ bool check_params = |
+ is_strict(language_mode()) || IsConciseMethod(kind) || is_rest; |
+ if (check_params) { |
+ bool check_name = is_strict(language_mode()) && !IsConciseMethod(kind) && |
+ !IsAccessorFunction(kind); |
+ if (!check_name) { |
+ CheckStrictFunctionParameters(eval_args_error_loc, dupe_error_loc, |
arv (Not doing code reviews)
2015/02/06 00:03:55
Another option might be to pass in language_mode()
adamk
2015/02/06 00:23:58
Yeah, I think that's a better move than having to
|
+ reserved_error_loc, CHECK_OK); |
+ } else { |
+ CheckStrictFunctionNameAndParameters( |
+ function_name, name_is_strict_reserved, function_name_location, |
+ eval_args_error_loc, dupe_error_loc, reserved_error_loc, CHECK_OK); |
} |
+ } |
+ if (is_strict(language_mode())) { |
int end_position = scanner()->location().end_pos; |
CheckStrictOctalLiteral(start_position, end_position, CHECK_OK); |
} |