| 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/ast.h" | 8 #include "src/ast.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/char-predicates-inl.h" | 10 #include "src/char-predicates-inl.h" |
| (...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 904 if (ok && info->parse_restriction() == ONLY_SINGLE_FUNCTION_LITERAL) { | 904 if (ok && info->parse_restriction() == ONLY_SINGLE_FUNCTION_LITERAL) { |
| 905 if (body->length() != 1 || | 905 if (body->length() != 1 || |
| 906 !body->at(0)->IsExpressionStatement() || | 906 !body->at(0)->IsExpressionStatement() || |
| 907 !body->at(0)->AsExpressionStatement()-> | 907 !body->at(0)->AsExpressionStatement()-> |
| 908 expression()->IsFunctionLiteral()) { | 908 expression()->IsFunctionLiteral()) { |
| 909 ReportMessage("single_function_literal"); | 909 ReportMessage("single_function_literal"); |
| 910 ok = false; | 910 ok = false; |
| 911 } | 911 } |
| 912 } | 912 } |
| 913 | 913 |
| 914 ast_value_factory_->Internalize(isolate()); |
| 914 if (ok) { | 915 if (ok) { |
| 915 result = factory()->NewFunctionLiteral( | 916 result = factory()->NewFunctionLiteral( |
| 916 ast_value_factory_->empty_string(), | 917 ast_value_factory_->empty_string(), |
| 917 ast_value_factory_, | 918 ast_value_factory_, |
| 918 scope_, | 919 scope_, |
| 919 body, | 920 body, |
| 920 function_state.materialized_literal_count(), | 921 function_state.materialized_literal_count(), |
| 921 function_state.expected_property_count(), | 922 function_state.expected_property_count(), |
| 922 function_state.handler_count(), | 923 function_state.handler_count(), |
| 923 0, | 924 0, |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1024 function_type, | 1025 function_type, |
| 1025 FunctionLiteral::NORMAL_ARITY, | 1026 FunctionLiteral::NORMAL_ARITY, |
| 1026 &ok); | 1027 &ok); |
| 1027 // Make sure the results agree. | 1028 // Make sure the results agree. |
| 1028 ASSERT(ok == (result != NULL)); | 1029 ASSERT(ok == (result != NULL)); |
| 1029 } | 1030 } |
| 1030 | 1031 |
| 1031 // Make sure the target stack is empty. | 1032 // Make sure the target stack is empty. |
| 1032 ASSERT(target_stack_ == NULL); | 1033 ASSERT(target_stack_ == NULL); |
| 1033 | 1034 |
| 1035 ast_value_factory_->Internalize(isolate()); |
| 1034 if (result == NULL) { | 1036 if (result == NULL) { |
| 1035 if (stack_overflow()) { | 1037 if (stack_overflow()) { |
| 1036 isolate()->StackOverflow(); | 1038 isolate()->StackOverflow(); |
| 1037 } else { | 1039 } else { |
| 1038 ThrowPendingError(); | 1040 ThrowPendingError(); |
| 1039 } | 1041 } |
| 1040 } else { | 1042 } else { |
| 1041 Handle<String> inferred_name(shared_info->inferred_name()); | 1043 Handle<String> inferred_name(shared_info->inferred_name()); |
| 1042 result->set_inferred_name(inferred_name); | 1044 result->set_inferred_name(inferred_name); |
| 1043 } | 1045 } |
| (...skipping 2833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3877 // target stack has been used from the top of the target stack. Add | 3879 // target stack has been used from the top of the target stack. Add |
| 3878 // the break target to any TargetCollectors passed on the stack. | 3880 // the break target to any TargetCollectors passed on the stack. |
| 3879 for (Target* t = target_stack_; t != stop; t = t->previous()) { | 3881 for (Target* t = target_stack_; t != stop; t = t->previous()) { |
| 3880 TargetCollector* collector = t->node()->AsTargetCollector(); | 3882 TargetCollector* collector = t->node()->AsTargetCollector(); |
| 3881 if (collector != NULL) collector->AddTarget(target, zone()); | 3883 if (collector != NULL) collector->AddTarget(target, zone()); |
| 3882 } | 3884 } |
| 3883 } | 3885 } |
| 3884 | 3886 |
| 3885 | 3887 |
| 3886 void Parser::ThrowPendingError() { | 3888 void Parser::ThrowPendingError() { |
| 3889 ASSERT(ast_value_factory_->IsInternalized()); |
| 3887 if (has_pending_error_) { | 3890 if (has_pending_error_) { |
| 3888 MessageLocation location(script_, | 3891 MessageLocation location(script_, |
| 3889 pending_error_location_.beg_pos, | 3892 pending_error_location_.beg_pos, |
| 3890 pending_error_location_.end_pos); | 3893 pending_error_location_.end_pos); |
| 3891 Factory* factory = isolate()->factory(); | 3894 Factory* factory = isolate()->factory(); |
| 3892 bool has_arg = | 3895 bool has_arg = |
| 3893 pending_error_arg_ != NULL || pending_error_char_arg_ != NULL; | 3896 pending_error_arg_ != NULL || pending_error_char_arg_ != NULL; |
| 3894 Handle<FixedArray> elements = factory->NewFixedArray(has_arg ? 1 : 0); | 3897 Handle<FixedArray> elements = factory->NewFixedArray(has_arg ? 1 : 0); |
| 3895 if (pending_error_arg_ != NULL) { | 3898 if (pending_error_arg_ != NULL) { |
| 3896 Handle<String> arg_string = pending_error_arg_->string(); | 3899 Handle<String> arg_string = pending_error_arg_->string(); |
| (...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4837 ParserTraits::ReportMessageAt(loc, message, arg, | 4840 ParserTraits::ReportMessageAt(loc, message, arg, |
| 4838 cached_data->IsReferenceError()); | 4841 cached_data->IsReferenceError()); |
| 4839 DeleteArray(message); | 4842 DeleteArray(message); |
| 4840 DeleteArray(arg); | 4843 DeleteArray(arg); |
| 4841 ASSERT(info()->isolate()->has_pending_exception()); | 4844 ASSERT(info()->isolate()->has_pending_exception()); |
| 4842 } else { | 4845 } else { |
| 4843 result = ParseProgram(); | 4846 result = ParseProgram(); |
| 4844 } | 4847 } |
| 4845 } | 4848 } |
| 4846 info()->SetFunction(result); | 4849 info()->SetFunction(result); |
| 4847 ast_value_factory_->Internalize(isolate()); | 4850 ASSERT(ast_value_factory_->IsInternalized()); |
| 4848 // info takes ownership of ast_value_factory_. | 4851 // info takes ownership of ast_value_factory_. |
| 4849 if (info()->ast_value_factory() == NULL) { | 4852 if (info()->ast_value_factory() == NULL) { |
| 4850 info()->SetAstValueFactory(ast_value_factory_); | 4853 info()->SetAstValueFactory(ast_value_factory_); |
| 4851 } | 4854 } |
| 4852 ast_value_factory_ = NULL; | 4855 ast_value_factory_ = NULL; |
| 4853 return (result != NULL); | 4856 return (result != NULL); |
| 4854 } | 4857 } |
| 4855 | 4858 |
| 4856 } } // namespace v8::internal | 4859 } } // namespace v8::internal |
| OLD | NEW |