| 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 #include "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
| 9 #include "src/ast/ast-expression-rewriter.h" | 9 #include "src/ast/ast-expression-rewriter.h" |
| 10 #include "src/ast/ast-expression-visitor.h" | 10 #include "src/ast/ast-expression-visitor.h" |
| (...skipping 4190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4201 ParseFormalParameterList(&formals, &formals_classifier, CHECK_OK); | 4201 ParseFormalParameterList(&formals, &formals_classifier, CHECK_OK); |
| 4202 arity = formals.Arity(); | 4202 arity = formals.Arity(); |
| 4203 Expect(Token::RPAREN, CHECK_OK); | 4203 Expect(Token::RPAREN, CHECK_OK); |
| 4204 int formals_end_position = scanner()->location().end_pos; | 4204 int formals_end_position = scanner()->location().end_pos; |
| 4205 | 4205 |
| 4206 CheckArityRestrictions(arity, arity_restriction, | 4206 CheckArityRestrictions(arity, arity_restriction, |
| 4207 formals.has_rest, start_position, | 4207 formals.has_rest, start_position, |
| 4208 formals_end_position, CHECK_OK); | 4208 formals_end_position, CHECK_OK); |
| 4209 Expect(Token::LBRACE, CHECK_OK); | 4209 Expect(Token::LBRACE, CHECK_OK); |
| 4210 | 4210 |
| 4211 // Don't include the rest parameter into the function's formal parameter |
| 4212 // count (esp. the SharedFunctionInfo::internal_formal_parameter_count, |
| 4213 // which says whether we need to create an arguments adaptor frame). |
| 4214 if (formals.has_rest) arity--; |
| 4215 |
| 4211 // Determine if the function can be parsed lazily. Lazy parsing is different | 4216 // Determine if the function can be parsed lazily. Lazy parsing is different |
| 4212 // from lazy compilation; we need to parse more eagerly than we compile. | 4217 // from lazy compilation; we need to parse more eagerly than we compile. |
| 4213 | 4218 |
| 4214 // We can only parse lazily if we also compile lazily. The heuristics for | 4219 // We can only parse lazily if we also compile lazily. The heuristics for |
| 4215 // lazy compilation are: | 4220 // lazy compilation are: |
| 4216 // - It must not have been prohibited by the caller to Parse (some callers | 4221 // - It must not have been prohibited by the caller to Parse (some callers |
| 4217 // need a full AST). | 4222 // need a full AST). |
| 4218 // - The outer scope must allow lazy compilation of inner functions. | 4223 // - The outer scope must allow lazy compilation of inner functions. |
| 4219 // - The function mustn't be a function expression with an open parenthesis | 4224 // - The function mustn't be a function expression with an open parenthesis |
| 4220 // before; we consider that a hint that the function will be called | 4225 // before; we consider that a hint that the function will be called |
| (...skipping 2104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6325 | 6330 |
| 6326 statements->Add(get_return, zone); | 6331 statements->Add(get_return, zone); |
| 6327 statements->Add(check_return, zone); | 6332 statements->Add(check_return, zone); |
| 6328 statements->Add(call_return, zone); | 6333 statements->Add(call_return, zone); |
| 6329 statements->Add(validate_output, zone); | 6334 statements->Add(validate_output, zone); |
| 6330 } | 6335 } |
| 6331 | 6336 |
| 6332 | 6337 |
| 6333 } // namespace internal | 6338 } // namespace internal |
| 6334 } // namespace v8 | 6339 } // namespace v8 |
| OLD | NEW |