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 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
776 cached_parse_data_(NULL), | 776 cached_parse_data_(NULL), |
777 total_preparse_skipped_(0), | 777 total_preparse_skipped_(0), |
778 pre_parse_timer_(NULL), | 778 pre_parse_timer_(NULL), |
779 parsing_on_main_thread_(true) { | 779 parsing_on_main_thread_(true) { |
780 // Even though we were passed ParseInfo, we should not store it in | 780 // Even though we were passed ParseInfo, we should not store it in |
781 // Parser - this makes sure that Isolate is not accidentally accessed via | 781 // Parser - this makes sure that Isolate is not accidentally accessed via |
782 // ParseInfo during background parsing. | 782 // ParseInfo during background parsing. |
783 DCHECK(!info->script().is_null() || info->source_stream() != NULL); | 783 DCHECK(!info->script().is_null() || info->source_stream() != NULL); |
784 set_allow_lazy(info->allow_lazy_parsing()); | 784 set_allow_lazy(info->allow_lazy_parsing()); |
785 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); | 785 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); |
| 786 set_allow_tailcalls(FLAG_harmony_tailcalls && !info->is_native()); |
786 set_allow_harmony_sloppy(FLAG_harmony_sloppy); | 787 set_allow_harmony_sloppy(FLAG_harmony_sloppy); |
787 set_allow_harmony_sloppy_function(FLAG_harmony_sloppy_function); | 788 set_allow_harmony_sloppy_function(FLAG_harmony_sloppy_function); |
788 set_allow_harmony_sloppy_let(FLAG_harmony_sloppy_let); | 789 set_allow_harmony_sloppy_let(FLAG_harmony_sloppy_let); |
789 set_allow_legacy_const(FLAG_legacy_const); | 790 set_allow_legacy_const(FLAG_legacy_const); |
790 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); | 791 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); |
791 set_allow_harmony_function_name(FLAG_harmony_function_name); | 792 set_allow_harmony_function_name(FLAG_harmony_function_name); |
792 set_allow_harmony_function_sent(FLAG_harmony_function_sent); | 793 set_allow_harmony_function_sent(FLAG_harmony_function_sent); |
793 set_allow_harmony_restrictive_declarations( | 794 set_allow_harmony_restrictive_declarations( |
794 FLAG_harmony_restrictive_declarations); | 795 FLAG_harmony_restrictive_declarations); |
795 set_allow_harmony_exponentiation_operator( | 796 set_allow_harmony_exponentiation_operator( |
(...skipping 1877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2673 Token::EQ_STRICT, assign, | 2674 Token::EQ_STRICT, assign, |
2674 factory()->NewUndefinedLiteral(RelocInfo::kNoPosition), pos); | 2675 factory()->NewUndefinedLiteral(RelocInfo::kNoPosition), pos); |
2675 | 2676 |
2676 // is_undefined ? this : is_object_conditional | 2677 // is_undefined ? this : is_object_conditional |
2677 return_value = factory()->NewConditional( | 2678 return_value = factory()->NewConditional( |
2678 is_undefined, ThisExpression(scope_, factory(), pos), | 2679 is_undefined, ThisExpression(scope_, factory(), pos), |
2679 is_object_conditional, pos); | 2680 is_object_conditional, pos); |
2680 } | 2681 } |
2681 | 2682 |
2682 // ES6 14.6.1 Static Semantics: IsInTailPosition | 2683 // ES6 14.6.1 Static Semantics: IsInTailPosition |
2683 if (FLAG_harmony_tailcalls && !is_sloppy(language_mode())) { | 2684 if (allow_tailcalls() && !is_sloppy(language_mode())) { |
2684 function_state_->AddExpressionInTailPosition(return_value); | 2685 function_state_->AddExpressionInTailPosition(return_value); |
2685 } | 2686 } |
2686 } | 2687 } |
2687 ExpectSemicolon(CHECK_OK); | 2688 ExpectSemicolon(CHECK_OK); |
2688 | 2689 |
2689 if (is_generator()) { | 2690 if (is_generator()) { |
2690 return_value = BuildIteratorResult(return_value, true); | 2691 return_value = BuildIteratorResult(return_value, true); |
2691 } | 2692 } |
2692 | 2693 |
2693 result = factory()->NewReturnStatement(return_value, loc.beg_pos); | 2694 result = factory()->NewReturnStatement(return_value, loc.beg_pos); |
(...skipping 4182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6876 try_block, target); | 6877 try_block, target); |
6877 final_loop = target; | 6878 final_loop = target; |
6878 } | 6879 } |
6879 | 6880 |
6880 return final_loop; | 6881 return final_loop; |
6881 } | 6882 } |
6882 | 6883 |
6883 | 6884 |
6884 } // namespace internal | 6885 } // namespace internal |
6885 } // namespace v8 | 6886 } // namespace v8 |
OLD | NEW |