OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/factory.h" | 5 #include "src/factory.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/allocation-site-scopes.h" | 8 #include "src/allocation-site-scopes.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 DisallowHeapAllocation no_gc; | 592 DisallowHeapAllocation no_gc; |
593 WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); | 593 WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); |
594 | 594 |
595 result->set_hash_field(String::kEmptyHashField); | 595 result->set_hash_field(String::kEmptyHashField); |
596 result->set_length(length); | 596 result->set_length(length); |
597 result->set_first(*left, mode); | 597 result->set_first(*left, mode); |
598 result->set_second(*right, mode); | 598 result->set_second(*right, mode); |
599 return result; | 599 return result; |
600 } | 600 } |
601 | 601 |
| 602 Handle<String> Factory::NewSurrogatePairString(uint16_t lead, uint16_t trail) { |
| 603 DCHECK_GE(lead, 0xD800); |
| 604 DCHECK_LE(lead, 0xDBFF); |
| 605 DCHECK_GE(trail, 0xDC00); |
| 606 DCHECK_LE(trail, 0xDFFF); |
| 607 |
| 608 Handle<SeqTwoByteString> str = |
| 609 isolate()->factory()->NewRawTwoByteString(2).ToHandleChecked(); |
| 610 uc16* dest = str->GetChars(); |
| 611 dest[0] = lead; |
| 612 dest[1] = trail; |
| 613 return str; |
| 614 } |
602 | 615 |
603 Handle<String> Factory::NewProperSubString(Handle<String> str, | 616 Handle<String> Factory::NewProperSubString(Handle<String> str, |
604 int begin, | 617 int begin, |
605 int end) { | 618 int end) { |
606 #if VERIFY_HEAP | 619 #if VERIFY_HEAP |
607 if (FLAG_verify_heap) str->StringVerify(); | 620 if (FLAG_verify_heap) str->StringVerify(); |
608 #endif | 621 #endif |
609 DCHECK(begin > 0 || end < str->length()); | 622 DCHECK(begin > 0 || end < str->length()); |
610 | 623 |
611 str = String::Flatten(str); | 624 str = String::Flatten(str); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 Handle<Map> map = native_source_string_map(); | 739 Handle<Map> map = native_source_string_map(); |
727 Handle<ExternalOneByteString> external_string = | 740 Handle<ExternalOneByteString> external_string = |
728 New<ExternalOneByteString>(map, OLD_SPACE); | 741 New<ExternalOneByteString>(map, OLD_SPACE); |
729 external_string->set_length(static_cast<int>(length)); | 742 external_string->set_length(static_cast<int>(length)); |
730 external_string->set_hash_field(String::kEmptyHashField); | 743 external_string->set_hash_field(String::kEmptyHashField); |
731 external_string->set_resource(resource); | 744 external_string->set_resource(resource); |
732 | 745 |
733 return external_string; | 746 return external_string; |
734 } | 747 } |
735 | 748 |
| 749 Handle<JSStringIterator> Factory::NewJSStringIterator(Handle<String> string) { |
| 750 Handle<Map> map(isolate()->native_context()->string_iterator_map(), |
| 751 isolate()); |
| 752 Handle<String> flat_string = String::Flatten(string); |
| 753 Handle<JSStringIterator> iterator = |
| 754 Handle<JSStringIterator>::cast(NewJSObjectFromMap(map)); |
| 755 iterator->set_string(*flat_string); |
| 756 iterator->set_index(0); |
| 757 |
| 758 return iterator; |
| 759 } |
736 | 760 |
737 Handle<Symbol> Factory::NewSymbol() { | 761 Handle<Symbol> Factory::NewSymbol() { |
738 CALL_HEAP_FUNCTION( | 762 CALL_HEAP_FUNCTION( |
739 isolate(), | 763 isolate(), |
740 isolate()->heap()->AllocateSymbol(), | 764 isolate()->heap()->AllocateSymbol(), |
741 Symbol); | 765 Symbol); |
742 } | 766 } |
743 | 767 |
744 | 768 |
745 Handle<Symbol> Factory::NewPrivateSymbol() { | 769 Handle<Symbol> Factory::NewPrivateSymbol() { |
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1757 | 1781 |
1758 Handle<JSDataView> Factory::NewJSDataView() { | 1782 Handle<JSDataView> Factory::NewJSDataView() { |
1759 Handle<JSFunction> data_view_fun( | 1783 Handle<JSFunction> data_view_fun( |
1760 isolate()->native_context()->data_view_fun()); | 1784 isolate()->native_context()->data_view_fun()); |
1761 CALL_HEAP_FUNCTION( | 1785 CALL_HEAP_FUNCTION( |
1762 isolate(), | 1786 isolate(), |
1763 isolate()->heap()->AllocateJSObject(*data_view_fun), | 1787 isolate()->heap()->AllocateJSObject(*data_view_fun), |
1764 JSDataView); | 1788 JSDataView); |
1765 } | 1789 } |
1766 | 1790 |
| 1791 Handle<JSIteratorResult> Factory::NewJSIteratorResult(Handle<Object> value, |
| 1792 bool done) { |
| 1793 Handle<Map> map(isolate()->native_context()->iterator_result_map()); |
| 1794 Handle<JSIteratorResult> js_iter_result = |
| 1795 Handle<JSIteratorResult>::cast(NewJSObjectFromMap(map)); |
| 1796 js_iter_result->set_value(*value); |
| 1797 js_iter_result->set_done(*ToBoolean(done)); |
| 1798 return js_iter_result; |
| 1799 } |
1767 | 1800 |
1768 Handle<JSMap> Factory::NewJSMap() { | 1801 Handle<JSMap> Factory::NewJSMap() { |
1769 Handle<Map> map(isolate()->native_context()->js_map_map()); | 1802 Handle<Map> map(isolate()->native_context()->js_map_map()); |
1770 Handle<JSMap> js_map = Handle<JSMap>::cast(NewJSObjectFromMap(map)); | 1803 Handle<JSMap> js_map = Handle<JSMap>::cast(NewJSObjectFromMap(map)); |
1771 JSMap::Initialize(js_map, isolate()); | 1804 JSMap::Initialize(js_map, isolate()); |
1772 return js_map; | 1805 return js_map; |
1773 } | 1806 } |
1774 | 1807 |
1775 | 1808 |
1776 Handle<JSSet> Factory::NewJSSet() { | 1809 Handle<JSSet> Factory::NewJSSet() { |
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2565 Handle<AccessorInfo> prototype = | 2598 Handle<AccessorInfo> prototype = |
2566 Accessors::FunctionPrototypeInfo(isolate(), attribs); | 2599 Accessors::FunctionPrototypeInfo(isolate(), attribs); |
2567 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), | 2600 AccessorConstantDescriptor d(Handle<Name>(Name::cast(prototype->name())), |
2568 prototype, attribs); | 2601 prototype, attribs); |
2569 map->AppendDescriptor(&d); | 2602 map->AppendDescriptor(&d); |
2570 } | 2603 } |
2571 } | 2604 } |
2572 | 2605 |
2573 } // namespace internal | 2606 } // namespace internal |
2574 } // namespace v8 | 2607 } // namespace v8 |
OLD | NEW |