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/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 5603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5614 } else { | 5614 } else { |
5615 uint32_t hash = ComputeTemplateLiteralHash(lit); | 5615 uint32_t hash = ComputeTemplateLiteralHash(lit); |
5616 | 5616 |
5617 int cooked_idx = function_state_->NextMaterializedLiteralIndex(); | 5617 int cooked_idx = function_state_->NextMaterializedLiteralIndex(); |
5618 int raw_idx = function_state_->NextMaterializedLiteralIndex(); | 5618 int raw_idx = function_state_->NextMaterializedLiteralIndex(); |
5619 | 5619 |
5620 // $getTemplateCallSite | 5620 // $getTemplateCallSite |
5621 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(4, zone()); | 5621 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(4, zone()); |
5622 args->Add(factory()->NewArrayLiteral( | 5622 args->Add(factory()->NewArrayLiteral( |
5623 const_cast<ZoneList<Expression*>*>(cooked_strings), | 5623 const_cast<ZoneList<Expression*>*>(cooked_strings), |
5624 cooked_idx, pos), | 5624 cooked_idx, is_strong(language_mode()), pos), |
5625 zone()); | 5625 zone()); |
5626 args->Add( | 5626 args->Add( |
5627 factory()->NewArrayLiteral( | 5627 factory()->NewArrayLiteral( |
5628 const_cast<ZoneList<Expression*>*>(raw_strings), raw_idx, pos), | 5628 const_cast<ZoneList<Expression*>*>(raw_strings), raw_idx, |
| 5629 is_strong(language_mode()), pos), |
5629 zone()); | 5630 zone()); |
5630 | 5631 |
5631 // Ensure hash is suitable as a Smi value | 5632 // Ensure hash is suitable as a Smi value |
5632 Smi* hash_obj = Smi::cast(Internals::IntToSmi(static_cast<int>(hash))); | 5633 Smi* hash_obj = Smi::cast(Internals::IntToSmi(static_cast<int>(hash))); |
5633 args->Add(factory()->NewSmiLiteral(hash_obj->value(), pos), zone()); | 5634 args->Add(factory()->NewSmiLiteral(hash_obj->value(), pos), zone()); |
5634 | 5635 |
5635 this->CheckPossibleEvalCall(tag, scope_); | 5636 this->CheckPossibleEvalCall(tag, scope_); |
5636 Expression* call_site = factory()->NewCallRuntime( | 5637 Expression* call_site = factory()->NewCallRuntime( |
5637 ast_value_factory()->get_template_callsite_string(), NULL, args, start); | 5638 ast_value_factory()->get_template_callsite_string(), NULL, args, start); |
5638 | 5639 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5709 if (!list->at(i)->IsSpread()) { | 5710 if (!list->at(i)->IsSpread()) { |
5710 ZoneList<v8::internal::Expression*>* unspread = | 5711 ZoneList<v8::internal::Expression*>* unspread = |
5711 new (zone()) ZoneList<v8::internal::Expression*>(1, zone()); | 5712 new (zone()) ZoneList<v8::internal::Expression*>(1, zone()); |
5712 | 5713 |
5713 // Push array of unspread parameters | 5714 // Push array of unspread parameters |
5714 while (i < n && !list->at(i)->IsSpread()) { | 5715 while (i < n && !list->at(i)->IsSpread()) { |
5715 unspread->Add(list->at(i++), zone()); | 5716 unspread->Add(list->at(i++), zone()); |
5716 } | 5717 } |
5717 int literal_index = function_state_->NextMaterializedLiteralIndex(); | 5718 int literal_index = function_state_->NextMaterializedLiteralIndex(); |
5718 args->Add(factory()->NewArrayLiteral(unspread, literal_index, | 5719 args->Add(factory()->NewArrayLiteral(unspread, literal_index, |
| 5720 is_strong(language_mode()), |
5719 RelocInfo::kNoPosition), | 5721 RelocInfo::kNoPosition), |
5720 zone()); | 5722 zone()); |
5721 | 5723 |
5722 if (i == n) break; | 5724 if (i == n) break; |
5723 } | 5725 } |
5724 | 5726 |
5725 // Push eagerly spread argument | 5727 // Push eagerly spread argument |
5726 ZoneList<v8::internal::Expression*>* spread_list = | 5728 ZoneList<v8::internal::Expression*>* spread_list = |
5727 new (zone()) ZoneList<v8::internal::Expression*>(1, zone()); | 5729 new (zone()) ZoneList<v8::internal::Expression*>(1, zone()); |
5728 spread_list->Add(list->at(i++)->AsSpread()->expression(), zone()); | 5730 spread_list->Add(list->at(i++)->AsSpread()->expression(), zone()); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5792 | 5794 |
5793 Expression* Parser::SpreadCallNew(Expression* function, | 5795 Expression* Parser::SpreadCallNew(Expression* function, |
5794 ZoneList<v8::internal::Expression*>* args, | 5796 ZoneList<v8::internal::Expression*>* args, |
5795 int pos) { | 5797 int pos) { |
5796 args->InsertAt(0, function, zone()); | 5798 args->InsertAt(0, function, zone()); |
5797 | 5799 |
5798 return factory()->NewCallRuntime( | 5800 return factory()->NewCallRuntime( |
5799 ast_value_factory()->reflect_construct_string(), NULL, args, pos); | 5801 ast_value_factory()->reflect_construct_string(), NULL, args, pos); |
5800 } | 5802 } |
5801 } } // namespace v8::internal | 5803 } } // namespace v8::internal |
OLD | NEW |