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/ast/ast.h" | 9 #include "src/ast/ast.h" |
10 #include "src/base/bits.h" | 10 #include "src/base/bits.h" |
(...skipping 1461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1472 int instance_size) { | 1472 int instance_size) { |
1473 return NewFunction(name, code, the_hole_value(), type, instance_size); | 1473 return NewFunction(name, code, the_hole_value(), type, instance_size); |
1474 } | 1474 } |
1475 | 1475 |
1476 | 1476 |
1477 Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) { | 1477 Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) { |
1478 // Make sure to use globals from the function's context, since the function | 1478 // Make sure to use globals from the function's context, since the function |
1479 // can be from a different context. | 1479 // can be from a different context. |
1480 Handle<Context> native_context(function->context()->native_context()); | 1480 Handle<Context> native_context(function->context()->native_context()); |
1481 Handle<Map> new_map; | 1481 Handle<Map> new_map; |
1482 if (IsResumableFunction(function->shared()->kind())) { | 1482 if (IsAsyncGeneratorFunction(function->shared()->kind())) { |
| 1483 new_map = handle(native_context->async_generator_object_prototype_map()); |
| 1484 } else if (IsResumableFunction(function->shared()->kind())) { |
1483 // Generator and async function prototypes can share maps since they | 1485 // Generator and async function prototypes can share maps since they |
1484 // don't have "constructor" properties. | 1486 // don't have "constructor" properties. |
1485 new_map = handle(native_context->generator_object_prototype_map()); | 1487 new_map = handle(native_context->generator_object_prototype_map()); |
1486 } else { | 1488 } else { |
1487 // Each function prototype gets a fresh map to avoid unwanted sharing of | 1489 // Each function prototype gets a fresh map to avoid unwanted sharing of |
1488 // maps between prototypes of different constructors. | 1490 // maps between prototypes of different constructors. |
1489 Handle<JSFunction> object_function(native_context->object_function()); | 1491 Handle<JSFunction> object_function(native_context->object_function()); |
1490 DCHECK(object_function->has_initial_map()); | 1492 DCHECK(object_function->has_initial_map()); |
1491 new_map = handle(object_function->initial_map()); | 1493 new_map = handle(object_function->initial_map()); |
1492 } | 1494 } |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1818 Handle<JSModuleNamespace> Factory::NewJSModuleNamespace() { | 1820 Handle<JSModuleNamespace> Factory::NewJSModuleNamespace() { |
1819 Handle<Map> map = isolate()->js_module_namespace_map(); | 1821 Handle<Map> map = isolate()->js_module_namespace_map(); |
1820 return Handle<JSModuleNamespace>::cast(NewJSObjectFromMap(map)); | 1822 return Handle<JSModuleNamespace>::cast(NewJSObjectFromMap(map)); |
1821 } | 1823 } |
1822 | 1824 |
1823 Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( | 1825 Handle<JSGeneratorObject> Factory::NewJSGeneratorObject( |
1824 Handle<JSFunction> function) { | 1826 Handle<JSFunction> function) { |
1825 DCHECK(IsResumableFunction(function->shared()->kind())); | 1827 DCHECK(IsResumableFunction(function->shared()->kind())); |
1826 JSFunction::EnsureHasInitialMap(function); | 1828 JSFunction::EnsureHasInitialMap(function); |
1827 Handle<Map> map(function->initial_map()); | 1829 Handle<Map> map(function->initial_map()); |
1828 DCHECK_EQ(JS_GENERATOR_OBJECT_TYPE, map->instance_type()); | 1830 DCHECK(JS_GENERATOR_OBJECT_TYPE == map->instance_type() || |
| 1831 JS_ASYNC_GENERATOR_OBJECT_TYPE == map->instance_type()); |
1829 CALL_HEAP_FUNCTION( | 1832 CALL_HEAP_FUNCTION( |
1830 isolate(), | 1833 isolate(), |
1831 isolate()->heap()->AllocateJSObjectFromMap(*map), | 1834 isolate()->heap()->AllocateJSObjectFromMap(*map), |
1832 JSGeneratorObject); | 1835 JSGeneratorObject); |
1833 } | 1836 } |
1834 | 1837 |
1835 Handle<Module> Factory::NewModule(Handle<SharedFunctionInfo> code) { | 1838 Handle<Module> Factory::NewModule(Handle<SharedFunctionInfo> code) { |
1836 Handle<ModuleInfo> module_info(code->scope_info()->ModuleDescriptorInfo(), | 1839 Handle<ModuleInfo> module_info(code->scope_info()->ModuleDescriptorInfo(), |
1837 isolate()); | 1840 isolate()); |
1838 Handle<ObjectHashTable> exports = | 1841 Handle<ObjectHashTable> exports = |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1883 Handle<JSIteratorResult> Factory::NewJSIteratorResult(Handle<Object> value, | 1886 Handle<JSIteratorResult> Factory::NewJSIteratorResult(Handle<Object> value, |
1884 bool done) { | 1887 bool done) { |
1885 Handle<Map> map(isolate()->native_context()->iterator_result_map()); | 1888 Handle<Map> map(isolate()->native_context()->iterator_result_map()); |
1886 Handle<JSIteratorResult> js_iter_result = | 1889 Handle<JSIteratorResult> js_iter_result = |
1887 Handle<JSIteratorResult>::cast(NewJSObjectFromMap(map)); | 1890 Handle<JSIteratorResult>::cast(NewJSObjectFromMap(map)); |
1888 js_iter_result->set_value(*value); | 1891 js_iter_result->set_value(*value); |
1889 js_iter_result->set_done(*ToBoolean(done)); | 1892 js_iter_result->set_done(*ToBoolean(done)); |
1890 return js_iter_result; | 1893 return js_iter_result; |
1891 } | 1894 } |
1892 | 1895 |
| 1896 Handle<JSAsyncFromSyncIterator> Factory::NewJSAsyncFromSyncIterator( |
| 1897 Handle<HeapObject> sync_iterator) { |
| 1898 Handle<Map> map( |
| 1899 isolate()->native_context()->initial_async_from_sync_iterator_map()); |
| 1900 Handle<JSAsyncFromSyncIterator> iterator = |
| 1901 Handle<JSAsyncFromSyncIterator>::cast(NewJSObjectFromMap(map)); |
| 1902 |
| 1903 iterator->set_sync_iterator(*sync_iterator); |
| 1904 return iterator; |
| 1905 } |
| 1906 |
1893 Handle<JSMap> Factory::NewJSMap() { | 1907 Handle<JSMap> Factory::NewJSMap() { |
1894 Handle<Map> map(isolate()->native_context()->js_map_map()); | 1908 Handle<Map> map(isolate()->native_context()->js_map_map()); |
1895 Handle<JSMap> js_map = Handle<JSMap>::cast(NewJSObjectFromMap(map)); | 1909 Handle<JSMap> js_map = Handle<JSMap>::cast(NewJSObjectFromMap(map)); |
1896 JSMap::Initialize(js_map, isolate()); | 1910 JSMap::Initialize(js_map, isolate()); |
1897 return js_map; | 1911 return js_map; |
1898 } | 1912 } |
1899 | 1913 |
1900 | 1914 |
1901 Handle<JSSet> Factory::NewJSSet() { | 1915 Handle<JSSet> Factory::NewJSSet() { |
1902 Handle<Map> map(isolate()->native_context()->js_set_map()); | 1916 Handle<Map> map(isolate()->native_context()->js_set_map()); |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2765 Handle<AccessorInfo> prototype = | 2779 Handle<AccessorInfo> prototype = |
2766 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs); | 2780 Accessors::FunctionPrototypeInfo(isolate(), rw_attribs); |
2767 Descriptor d = Descriptor::AccessorConstant( | 2781 Descriptor d = Descriptor::AccessorConstant( |
2768 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs); | 2782 Handle<Name>(Name::cast(prototype->name())), prototype, rw_attribs); |
2769 map->AppendDescriptor(&d); | 2783 map->AppendDescriptor(&d); |
2770 } | 2784 } |
2771 } | 2785 } |
2772 | 2786 |
2773 } // namespace internal | 2787 } // namespace internal |
2774 } // namespace v8 | 2788 } // namespace v8 |
OLD | NEW |