OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_PARSING_PARSER_H_ | 5 #ifndef V8_PARSING_PARSER_H_ |
6 #define V8_PARSING_PARSER_H_ | 6 #define V8_PARSING_PARSER_H_ |
7 | 7 |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
10 #include "src/base/compiler-specific.h" | 10 #include "src/base/compiler-specific.h" |
(...skipping 1048 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1059 const ThreadedList<ParserFormalParameters::Parameter>& parameters) { | 1059 const ThreadedList<ParserFormalParameters::Parameter>& parameters) { |
1060 for (auto parameter : parameters) { | 1060 for (auto parameter : parameters) { |
1061 bool is_duplicate = false; | 1061 bool is_duplicate = false; |
1062 bool is_simple = classifier()->is_simple_parameter_list(); | 1062 bool is_simple = classifier()->is_simple_parameter_list(); |
1063 auto name = is_simple || parameter->is_rest | 1063 auto name = is_simple || parameter->is_rest |
1064 ? parameter->name | 1064 ? parameter->name |
1065 : ast_value_factory()->empty_string(); | 1065 : ast_value_factory()->empty_string(); |
1066 auto mode = is_simple || parameter->is_rest ? VAR : TEMPORARY; | 1066 auto mode = is_simple || parameter->is_rest ? VAR : TEMPORARY; |
1067 if (!is_simple) scope->SetHasNonSimpleParameters(); | 1067 if (!is_simple) scope->SetHasNonSimpleParameters(); |
1068 bool is_optional = parameter->initializer != nullptr; | 1068 bool is_optional = parameter->initializer != nullptr; |
1069 Variable* var = | 1069 scope->DeclareParameter(name, mode, is_optional, parameter->is_rest, |
1070 scope->DeclareParameter(name, mode, is_optional, parameter->is_rest, | 1070 &is_duplicate, ast_value_factory()); |
1071 &is_duplicate, ast_value_factory()); | |
1072 if (is_duplicate && | 1071 if (is_duplicate && |
1073 classifier()->is_valid_formal_parameter_list_without_duplicates()) { | 1072 classifier()->is_valid_formal_parameter_list_without_duplicates()) { |
1074 classifier()->RecordDuplicateFormalParameterError( | 1073 classifier()->RecordDuplicateFormalParameterError( |
1075 scanner()->location()); | 1074 scanner()->location()); |
1076 } | 1075 } |
1077 if (is_sloppy(scope->language_mode())) { | |
1078 // TODO(sigurds) Mark every parameter as maybe assigned. This is a | |
1079 // conservative approximation necessary to account for parameters | |
1080 // that are assigned via the arguments array. | |
1081 var->set_maybe_assigned(); | |
1082 } | |
1083 } | 1076 } |
1084 } | 1077 } |
1085 | 1078 |
1086 void DeclareArrowFunctionFormalParameters(ParserFormalParameters* parameters, | 1079 void DeclareArrowFunctionFormalParameters(ParserFormalParameters* parameters, |
1087 Expression* params, | 1080 Expression* params, |
1088 const Scanner::Location& params_loc, | 1081 const Scanner::Location& params_loc, |
1089 Scanner::Location* duplicate_loc, | 1082 Scanner::Location* duplicate_loc, |
1090 bool* ok); | 1083 bool* ok); |
1091 | 1084 |
1092 void ReindexLiterals(const ParserFormalParameters& parameters); | 1085 void ReindexLiterals(const ParserFormalParameters& parameters); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 | 1181 |
1189 private: | 1182 private: |
1190 ParserTarget** variable_; | 1183 ParserTarget** variable_; |
1191 ParserTarget* previous_; | 1184 ParserTarget* previous_; |
1192 }; | 1185 }; |
1193 | 1186 |
1194 } // namespace internal | 1187 } // namespace internal |
1195 } // namespace v8 | 1188 } // namespace v8 |
1196 | 1189 |
1197 #endif // V8_PARSING_PARSER_H_ | 1190 #endif // V8_PARSING_PARSER_H_ |
OLD | NEW |