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/base/platform/platform.h" | 9 #include "src/base/platform/platform.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 | 888 |
889 // Enters 'scope'. | 889 // Enters 'scope'. |
890 FunctionState function_state(&function_state_, &scope_, scope, zone(), | 890 FunctionState function_state(&function_state_, &scope_, scope, zone(), |
891 ast_value_factory_); | 891 ast_value_factory_); |
892 | 892 |
893 scope_->SetStrictMode(info->strict_mode()); | 893 scope_->SetStrictMode(info->strict_mode()); |
894 ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); | 894 ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); |
895 bool ok = true; | 895 bool ok = true; |
896 int beg_pos = scanner()->location().beg_pos; | 896 int beg_pos = scanner()->location().beg_pos; |
897 ParseSourceElements(body, Token::EOS, info->is_eval(), true, &ok); | 897 ParseSourceElements(body, Token::EOS, info->is_eval(), true, &ok); |
| 898 |
| 899 HandleSourceURLComments(); |
| 900 |
898 if (ok && strict_mode() == STRICT) { | 901 if (ok && strict_mode() == STRICT) { |
899 CheckOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); | 902 CheckOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); |
900 } | 903 } |
901 | 904 |
902 if (ok && allow_harmony_scoping() && strict_mode() == STRICT) { | 905 if (ok && allow_harmony_scoping() && strict_mode() == STRICT) { |
903 CheckConflictingVarDeclarations(scope_, &ok); | 906 CheckConflictingVarDeclarations(scope_, &ok); |
904 } | 907 } |
905 | 908 |
906 if (ok && info->parse_restriction() == ONLY_SINGLE_FUNCTION_LITERAL) { | 909 if (ok && info->parse_restriction() == ONLY_SINGLE_FUNCTION_LITERAL) { |
907 if (body->length() != 1 || | 910 if (body->length() != 1 || |
(...skipping 2967 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3875 // Register that a break target found at the given stop in the | 3878 // Register that a break target found at the given stop in the |
3876 // 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 |
3877 // the break target to any TargetCollectors passed on the stack. | 3880 // the break target to any TargetCollectors passed on the stack. |
3878 for (Target* t = target_stack_; t != stop; t = t->previous()) { | 3881 for (Target* t = target_stack_; t != stop; t = t->previous()) { |
3879 TargetCollector* collector = t->node()->AsTargetCollector(); | 3882 TargetCollector* collector = t->node()->AsTargetCollector(); |
3880 if (collector != NULL) collector->AddTarget(target, zone()); | 3883 if (collector != NULL) collector->AddTarget(target, zone()); |
3881 } | 3884 } |
3882 } | 3885 } |
3883 | 3886 |
3884 | 3887 |
| 3888 void Parser::HandleSourceURLComments() { |
| 3889 if (scanner_.source_url()->length() > 0) { |
| 3890 info_->script()->set_source_url( |
| 3891 *scanner_.source_url()->Internalize(isolate())); |
| 3892 } |
| 3893 if (scanner_.source_mapping_url()->length() > 0) { |
| 3894 info_->script()->set_source_mapping_url( |
| 3895 *scanner_.source_mapping_url()->Internalize(isolate())); |
| 3896 } |
| 3897 } |
| 3898 |
| 3899 |
3885 void Parser::ThrowPendingError() { | 3900 void Parser::ThrowPendingError() { |
3886 ASSERT(ast_value_factory_->IsInternalized()); | 3901 ASSERT(ast_value_factory_->IsInternalized()); |
3887 if (has_pending_error_) { | 3902 if (has_pending_error_) { |
3888 MessageLocation location(script_, | 3903 MessageLocation location(script_, |
3889 pending_error_location_.beg_pos, | 3904 pending_error_location_.beg_pos, |
3890 pending_error_location_.end_pos); | 3905 pending_error_location_.end_pos); |
3891 Factory* factory = isolate()->factory(); | 3906 Factory* factory = isolate()->factory(); |
3892 bool has_arg = | 3907 bool has_arg = |
3893 pending_error_arg_ != NULL || pending_error_char_arg_ != NULL; | 3908 pending_error_arg_ != NULL || pending_error_char_arg_ != NULL; |
3894 Handle<FixedArray> elements = factory->NewFixedArray(has_arg ? 1 : 0); | 3909 Handle<FixedArray> elements = factory->NewFixedArray(has_arg ? 1 : 0); |
(...skipping 968 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4863 info()->SetAstValueFactory(ast_value_factory_); | 4878 info()->SetAstValueFactory(ast_value_factory_); |
4864 } | 4879 } |
4865 ast_value_factory_ = NULL; | 4880 ast_value_factory_ = NULL; |
4866 | 4881 |
4867 InternalizeUseCounts(); | 4882 InternalizeUseCounts(); |
4868 | 4883 |
4869 return (result != NULL); | 4884 return (result != NULL); |
4870 } | 4885 } |
4871 | 4886 |
4872 } } // namespace v8::internal | 4887 } } // namespace v8::internal |
OLD | NEW |