1723 {
1725 Zone* zone = thread->zone();
1726 ASSERT(isolate_group == thread->isolate_group());
1728
1729#if defined(DART_PRECOMPILED_RUNTIME)
1730 const bool bootstrapping = false;
1731#else
1732 const bool is_kernel = (kernel_buffer != nullptr);
1733 const bool bootstrapping =
1735#endif
1736
1737 if (bootstrapping) {
1738#if !defined(DART_PRECOMPILED_RUNTIME)
1739
1740
1741
1742
1743 ObjectStore* object_store = isolate_group->object_store();
1744 SafepointWriteRwLocker ml(thread, isolate_group->program_lock());
1745
1752
1753
1754
1755 cls = Class::New<Array, RTN::Array>(isolate_group);
1757 object_store->set_array_class(cls);
1758
1759
1760
1761
1762
1763
1764
1766 RTN::Array::type_arguments_offset());
1767 cls.set_num_type_arguments_unsafe(1);
1768
1769
1770
1771 cls = Class::New<GrowableObjectArray, RTN::GrowableObjectArray>(
1772 isolate_group);
1773 object_store->set_growable_object_array_class(cls);
1774 cls.set_type_arguments_field_offset(
1776 RTN::GrowableObjectArray::type_arguments_offset());
1777 cls.set_num_type_arguments_unsafe(1);
1778
1779
1780 const intptr_t kInitialCanonicalRegExpSize = 4;
1781 weak_array = HashTables::New<CanonicalRegExpSet>(
1783 object_store->set_regexp_table(weak_array);
1784
1785
1786 const intptr_t kInitialCanonicalTypeSize = 16;
1787 array = HashTables::New<CanonicalTypeSet>(kInitialCanonicalTypeSize,
1789 object_store->set_canonical_types(array);
1790
1791
1792 const intptr_t kInitialCanonicalFunctionTypeSize = 16;
1793 array = HashTables::New<CanonicalFunctionTypeSet>(
1794 kInitialCanonicalFunctionTypeSize,
Heap::kOld);
1795 object_store->set_canonical_function_types(array);
1796
1797
1798 const intptr_t kInitialCanonicalRecordTypeSize = 16;
1799 array = HashTables::New<CanonicalRecordTypeSet>(
1800 kInitialCanonicalRecordTypeSize,
Heap::kOld);
1801 object_store->set_canonical_record_types(array);
1802
1803
1804 const intptr_t kInitialCanonicalTypeParameterSize = 4;
1805 array = HashTables::New<CanonicalTypeParameterSet>(
1806 kInitialCanonicalTypeParameterSize,
Heap::kOld);
1807 object_store->set_canonical_type_parameters(array);
1808
1809
1810 const intptr_t kInitialCanonicalTypeArgumentsSize = 4;
1811 array = HashTables::New<CanonicalTypeArgumentsSet>(
1812 kInitialCanonicalTypeArgumentsSize,
Heap::kOld);
1813 object_store->set_canonical_type_arguments(array);
1814
1815
1816 const Class& type_cls =
1817 Class::Handle(zone, Class::New<Type, RTN::Type>(isolate_group));
1819 zone, Class::New<FunctionType, RTN::FunctionType>(isolate_group));
1821 zone, Class::New<RecordType, RTN::RecordType>(isolate_group));
1823 zone, Class::New<TypeParameter, RTN::TypeParameter>(isolate_group));
1825 zone, Class::New<LibraryPrefix, RTN::LibraryPrefix>(isolate_group));
1826
1827
1829 object_store->set_one_byte_string_class(cls);
1830
1831
1833 object_store->set_two_byte_string_class(cls);
1834
1835
1837
1838
1839 const GrowableObjectArray& libraries =
1841 object_store->set_libraries(libraries);
1842
1843
1845
1846
1848 ASSERT(!core_lib.IsNull());
1849
1850 const GrowableObjectArray& pending_classes =
1852 object_store->set_pending_classes(pending_classes);
1853
1854
1855
1856
1858 cls = object_store->array_class();
1859 RegisterPrivateClass(cls, Symbols::_List(), core_lib);
1860 pending_classes.Add(cls);
1861
1862
1863
1864
1865
1868 type.SetIsFinalized();
1870 object_store->set_array_type(
type);
1871
1872 cls = object_store->growable_object_array_class();
1873 RegisterPrivateClass(cls, Symbols::_GrowableList(), core_lib);
1874 pending_classes.Add(cls);
1875
1876 cls = Class::New<Array, RTN::Array>(kImmutableArrayCid, isolate_group);
1877 object_store->set_immutable_array_class(cls);
1879 RTN::Array::type_arguments_offset());
1880 cls.set_num_type_arguments_unsafe(1);
1881 ASSERT(object_store->immutable_array_class() !=
1882 object_store->array_class());
1883 cls.set_is_prefinalized();
1884 RegisterPrivateClass(cls, Symbols::_ImmutableList(), core_lib);
1885 pending_classes.Add(cls);
1886
1887 cls = object_store->one_byte_string_class();
1888 RegisterPrivateClass(cls, Symbols::OneByteString(), core_lib);
1889 pending_classes.Add(cls);
1890
1891 cls = object_store->two_byte_string_class();
1892 RegisterPrivateClass(cls, Symbols::TwoByteString(), core_lib);
1893 pending_classes.Add(cls);
1894
1895
1896
1899 if (isolate_lib.IsNull()) {
1900 isolate_lib = Library::NewLibraryHelper(Symbols::DartIsolate(), true);
1901 isolate_lib.SetLoadRequested();
1902 isolate_lib.Register(thread);
1903 }
1904 object_store->set_bootstrap_library(ObjectStore::kIsolate, isolate_lib);
1905 ASSERT(!isolate_lib.IsNull());
1907
1908 cls = Class::New<Capability, RTN::Capability>(isolate_group);
1909 RegisterPrivateClass(cls, Symbols::_Capability(), isolate_lib);
1910 pending_classes.Add(cls);
1911
1912 cls = Class::New<ReceivePort, RTN::ReceivePort>(isolate_group);
1913 RegisterPrivateClass(cls, Symbols::_RawReceivePort(), isolate_lib);
1914 pending_classes.Add(cls);
1915
1916 cls = Class::New<SendPort, RTN::SendPort>(isolate_group);
1917 RegisterPrivateClass(cls, Symbols::_SendPort(), isolate_lib);
1918 pending_classes.Add(cls);
1919
1920 cls = Class::New<TransferableTypedData, RTN::TransferableTypedData>(
1921 isolate_group);
1922 RegisterPrivateClass(cls, Symbols::_TransferableTypedDataImpl(),
1923 isolate_lib);
1924 pending_classes.Add(cls);
1925
1927 zone, Class::New<StackTrace, RTN::StackTrace>(isolate_group));
1928 RegisterPrivateClass(stacktrace_cls, Symbols::_StackTrace(), core_lib);
1929 pending_classes.Add(stacktrace_cls);
1930
1931
1932 cls = Class::New<RegExp, RTN::RegExp>(isolate_group);
1933 RegisterPrivateClass(cls, Symbols::_RegExp(), core_lib);
1934 pending_classes.Add(cls);
1935
1936
1937
1938
1939
1940
1941 cls = Class::New<Instance, RTN::Instance>(kInstanceCid, isolate_group);
1942 object_store->set_object_class(cls);
1943 cls.set_name(Symbols::Object());
1944 cls.set_num_type_arguments_unsafe(0);
1945 cls.set_is_prefinalized();
1946 cls.set_is_const();
1947 core_lib.AddClass(cls);
1948 pending_classes.Add(cls);
1951 object_store->set_object_type(
type);
1954 object_store->set_legacy_object_type(
type);
1957 object_store->set_non_nullable_object_type(
type);
1960 object_store->set_nullable_object_type(
type);
1961
1962 cls = Class::New<Bool, RTN::Bool>(isolate_group);
1963 object_store->set_bool_class(cls);
1964 RegisterClass(cls, Symbols::Bool(), core_lib);
1965 pending_classes.Add(cls);
1966
1967 cls = Class::New<Instance, RTN::Instance>(
kNullCid, isolate_group);
1968 object_store->set_null_class(cls);
1969 cls.set_num_type_arguments_unsafe(0);
1970 cls.set_is_prefinalized();
1971 RegisterClass(cls, Symbols::Null(), core_lib);
1972 pending_classes.Add(cls);
1973
1974 cls = Class::New<Instance, RTN::Instance>(
kNeverCid, isolate_group);
1975 cls.set_num_type_arguments_unsafe(0);
1976 cls.set_is_allocate_finalized();
1977 cls.set_is_declaration_loaded();
1978 cls.set_is_type_finalized();
1979 cls.set_name(Symbols::Never());
1980 object_store->set_never_class(cls);
1981
1982 ASSERT(!library_prefix_cls.IsNull());
1983 RegisterPrivateClass(library_prefix_cls, Symbols::_LibraryPrefix(),
1984 core_lib);
1985 pending_classes.Add(library_prefix_cls);
1986
1987 RegisterPrivateClass(type_cls, Symbols::_Type(), core_lib);
1988 pending_classes.Add(type_cls);
1989
1990 RegisterPrivateClass(function_type_cls, Symbols::_FunctionType(), core_lib);
1991 pending_classes.Add(function_type_cls);
1992
1993 RegisterPrivateClass(record_type_cls, Symbols::_RecordType(), core_lib);
1994 pending_classes.Add(record_type_cls);
1995
1996 RegisterPrivateClass(type_parameter_cls, Symbols::_TypeParameter(),
1997 core_lib);
1998 pending_classes.Add(type_parameter_cls);
1999
2000 cls = Class::New<Integer, RTN::Integer>(isolate_group);
2001 object_store->set_integer_implementation_class(cls);
2002 RegisterPrivateClass(cls, Symbols::_IntegerImplementation(), core_lib);
2003 pending_classes.Add(cls);
2004
2005 cls = Class::New<Smi, RTN::Smi>(isolate_group);
2006 object_store->set_smi_class(cls);
2007 RegisterPrivateClass(cls, Symbols::_Smi(), core_lib);
2008 pending_classes.Add(cls);
2009
2010 cls = Class::New<Mint, RTN::Mint>(isolate_group);
2011 object_store->set_mint_class(cls);
2012 RegisterPrivateClass(cls, Symbols::_Mint(), core_lib);
2013 pending_classes.Add(cls);
2014
2015 cls = Class::New<Double, RTN::Double>(isolate_group);
2016 object_store->set_double_class(cls);
2017 RegisterPrivateClass(cls, Symbols::_Double(), core_lib);
2018 pending_classes.Add(cls);
2019
2020
2021 cls = Class::New<Closure, RTN::Closure>(isolate_group);
2022 object_store->set_closure_class(cls);
2023 RegisterPrivateClass(cls, Symbols::_Closure(), core_lib);
2024 pending_classes.Add(cls);
2025
2026 cls = Class::New<Record, RTN::Record>(isolate_group);
2027 RegisterPrivateClass(cls, Symbols::_Record(), core_lib);
2028 pending_classes.Add(cls);
2029
2030 cls = Class::New<WeakProperty, RTN::WeakProperty>(isolate_group);
2031 object_store->set_weak_property_class(cls);
2032 RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib);
2033
2034 cls = Class::New<WeakReference, RTN::WeakReference>(isolate_group);
2035 cls.set_type_arguments_field_offset(
2037 RTN::WeakReference::type_arguments_offset());
2038 cls.set_num_type_arguments_unsafe(1);
2039 object_store->set_weak_reference_class(cls);
2040 RegisterPrivateClass(cls, Symbols::_WeakReference(), core_lib);
2041
2042
2043
2045 if (lib.IsNull()) {
2046 lib = Library::NewLibraryHelper(Symbols::DartMirrors(), true);
2047 lib.SetLoadRequested();
2048 lib.Register(thread);
2049 }
2050 object_store->set_bootstrap_library(ObjectStore::kMirrors, lib);
2053
2054 cls = Class::New<MirrorReference, RTN::MirrorReference>(isolate_group);
2055 RegisterPrivateClass(cls, Symbols::_MirrorReference(), lib);
2056
2057
2058
2060 if (lib.IsNull()) {
2061 lib = Library::NewLibraryHelper(Symbols::DartCollection(), true);
2062 lib.SetLoadRequested();
2063 lib.Register(thread);
2064 }
2065
2066 object_store->set_bootstrap_library(ObjectStore::kCollection, lib);
2069 cls = Class::New<Map, RTN::Map>(isolate_group);
2070 object_store->set_map_impl_class(cls);
2072 RTN::Map::type_arguments_offset());
2073 cls.set_num_type_arguments_unsafe(2);
2074 RegisterPrivateClass(cls, Symbols::_Map(), lib);
2075 pending_classes.Add(cls);
2076
2077 cls = Class::New<Map, RTN::Map>(kConstMapCid, isolate_group);
2078 object_store->set_const_map_impl_class(cls);
2080 RTN::Map::type_arguments_offset());
2081 cls.set_num_type_arguments_unsafe(2);
2082 cls.set_is_prefinalized();
2083 RegisterPrivateClass(cls, Symbols::_ConstMap(), lib);
2084 pending_classes.Add(cls);
2085
2086 cls = Class::New<Set, RTN::Set>(isolate_group);
2087 object_store->set_set_impl_class(cls);
2089 RTN::Set::type_arguments_offset());
2090 cls.set_num_type_arguments_unsafe(1);
2091 RegisterPrivateClass(cls, Symbols::_Set(), lib);
2092 pending_classes.Add(cls);
2093
2094 cls = Class::New<Set, RTN::Set>(kConstSetCid, isolate_group);
2095 object_store->set_const_set_impl_class(cls);
2097 RTN::Set::type_arguments_offset());
2098 cls.set_num_type_arguments_unsafe(1);
2099 cls.set_is_prefinalized();
2100 RegisterPrivateClass(cls, Symbols::_ConstSet(), lib);
2101 pending_classes.Add(cls);
2102
2103
2104
2106 if (lib.IsNull()) {
2107 lib = Library::NewLibraryHelper(Symbols::DartAsync(), true);
2108 lib.SetLoadRequested();
2109 lib.Register(thread);
2110 }
2111 object_store->set_bootstrap_library(ObjectStore::kAsync, lib);
2114 cls = Class::New<FutureOr, RTN::FutureOr>(isolate_group);
2116 RTN::FutureOr::type_arguments_offset());
2117 cls.set_num_type_arguments_unsafe(1);
2118 RegisterClass(cls, Symbols::FutureOr(), lib);
2119 pending_classes.Add(cls);
2120 object_store->set_future_or_class(cls);
2121
2122 cls = Class::New<SuspendState, RTN::SuspendState>(isolate_group);
2123 RegisterPrivateClass(cls, Symbols::_SuspendState(), lib);
2124 pending_classes.Add(cls);
2125
2126
2127
2129 if (lib.IsNull()) {
2130 lib = Library::NewLibraryHelper(Symbols::DartDeveloper(), true);
2131 lib.SetLoadRequested();
2132 lib.Register(thread);
2133 }
2134 object_store->set_bootstrap_library(ObjectStore::kDeveloper, lib);
2137 cls = Class::New<UserTag, RTN::UserTag>(isolate_group);
2138 RegisterPrivateClass(cls, Symbols::_UserTag(), lib);
2139 pending_classes.Add(cls);
2140
2141
2142
2145
2146
2147
2149 if (lib.IsNull()) {
2150 lib = Library::NewLibraryHelper(Symbols::DartTypedData(), true);
2151 lib.SetLoadRequested();
2152 lib.Register(thread);
2153 }
2154 object_store->set_bootstrap_library(ObjectStore::kTypedData, lib);
2157#define REGISTER_TYPED_DATA_CLASS(clazz) \
2158 cls = Class::NewTypedDataClass(kTypedData##clazz##ArrayCid, isolate_group); \
2159 RegisterPrivateClass(cls, Symbols::_##clazz##List(), lib);
2160
2162#undef REGISTER_TYPED_DATA_CLASS
2163#define REGISTER_TYPED_DATA_VIEW_CLASS(clazz) \
2164 cls = \
2165 Class::NewTypedDataViewClass(kTypedData##clazz##ViewCid, isolate_group); \
2166 RegisterPrivateClass(cls, Symbols::_##clazz##View(), lib); \
2167 pending_classes.Add(cls); \
2168 cls = Class::NewUnmodifiableTypedDataViewClass( \
2169 kUnmodifiableTypedData##clazz##ViewCid, isolate_group); \
2170 RegisterPrivateClass(cls, Symbols::_Unmodifiable##clazz##View(), lib); \
2171 pending_classes.Add(cls);
2172
2174
2176 RegisterPrivateClass(cls, Symbols::_ByteDataView(), lib);
2177 pending_classes.Add(cls);
2179 isolate_group);
2180 RegisterPrivateClass(cls, Symbols::_UnmodifiableByteDataView(), lib);
2181 pending_classes.Add(cls);
2182
2183#undef REGISTER_TYPED_DATA_VIEW_CLASS
2184#define REGISTER_EXT_TYPED_DATA_CLASS(clazz) \
2185 cls = Class::NewExternalTypedDataClass(kExternalTypedData##clazz##Cid, \
2186 isolate_group); \
2187 RegisterPrivateClass(cls, Symbols::_External##clazz(), lib);
2188
2189 cls = Class::New<Instance, RTN::Instance>(
kByteBufferCid, isolate_group,
2190 false);
2191 cls.set_instance_size(0, 0);
2192 cls.set_next_field_offset(-
kWordSize, -compiler::target::kWordSize);
2193 isolate_group->class_table()->Register(cls);
2194 RegisterPrivateClass(cls, Symbols::_ByteBuffer(), lib);
2195 pending_classes.Add(cls);
2196
2198#undef REGISTER_EXT_TYPED_DATA_CLASS
2199
2200 cls = Class::New<Float32x4, RTN::Float32x4>(isolate_group);
2201 RegisterPrivateClass(cls, Symbols::_Float32x4(), lib);
2202 pending_classes.Add(cls);
2203 object_store->set_float32x4_class(cls);
2204
2205 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2206 true,
2207 true);
2208 RegisterClass(cls, Symbols::Float32x4(), lib);
2209 cls.set_num_type_arguments_unsafe(0);
2210 cls.set_is_prefinalized();
2212 object_store->set_float32x4_type(
type);
2213
2214 cls = Class::New<Int32x4, RTN::Int32x4>(isolate_group);
2215 RegisterPrivateClass(cls, Symbols::_Int32x4(), lib);
2216 pending_classes.Add(cls);
2217 object_store->set_int32x4_class(cls);
2218
2219 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2220 true,
2221 true);
2222 RegisterClass(cls, Symbols::Int32x4(), lib);
2223 cls.set_num_type_arguments_unsafe(0);
2224 cls.set_is_prefinalized();
2226 object_store->set_int32x4_type(
type);
2227
2228 cls = Class::New<Float64x2, RTN::Float64x2>(isolate_group);
2229 RegisterPrivateClass(cls, Symbols::_Float64x2(), lib);
2230 pending_classes.Add(cls);
2231 object_store->set_float64x2_class(cls);
2232
2233 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2234 true,
2235 true);
2236 RegisterClass(cls, Symbols::Float64x2(), lib);
2237 cls.set_num_type_arguments_unsafe(0);
2238 cls.set_is_prefinalized();
2240 object_store->set_float64x2_type(
type);
2241
2242
2243
2244 type = object_store->object_type();
2245 stacktrace_cls.set_super_type(
type);
2246
2247
2248
2249 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2250 true,
2251 true);
2252 cls.set_num_type_arguments_unsafe(0);
2253 cls.set_is_prefinalized();
2254 RegisterClass(cls, Symbols::Type(), core_lib);
2255 pending_classes.Add(cls);
2257 object_store->set_type_type(
type);
2258
2259
2260 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2261 true,
2262 true);
2263 cls.set_num_type_arguments_unsafe(0);
2264 cls.set_is_prefinalized();
2265 RegisterClass(cls, Symbols::Function(), core_lib);
2266 pending_classes.Add(cls);
2268 object_store->set_function_type(
type);
2269
2270
2271 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2272 true,
2273 true);
2274 RegisterClass(cls, Symbols::Record(), core_lib);
2275 pending_classes.Add(cls);
2276 object_store->set_record_class(cls);
2277
2278 cls = Class::New<Number, RTN::Number>(isolate_group);
2279 RegisterClass(cls, Symbols::Number(), core_lib);
2280 pending_classes.Add(cls);
2282 object_store->set_number_type(
type);
2284 object_store->set_nullable_number_type(
type);
2285
2286 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2287 true,
2288 true);
2289 RegisterClass(cls, Symbols::Int(), core_lib);
2290 cls.set_num_type_arguments_unsafe(0);
2291 cls.set_is_prefinalized();
2292 pending_classes.Add(cls);
2294 object_store->set_int_type(
type);
2296 object_store->set_legacy_int_type(
type);
2298 object_store->set_non_nullable_int_type(
type);
2300 object_store->set_nullable_int_type(
type);
2301
2302 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2303 true,
2304 true);
2305 RegisterClass(cls, Symbols::Double(), core_lib);
2306 cls.set_num_type_arguments_unsafe(0);
2307 cls.set_is_prefinalized();
2308 pending_classes.Add(cls);
2310 object_store->set_double_type(
type);
2312 object_store->set_nullable_double_type(
type);
2313
2314 name = Symbols::_String().ptr();
2315 cls = Class::New<Instance, RTN::Instance>(
kIllegalCid, isolate_group,
2316 true,
2317 true);
2318 RegisterClass(cls,
name, core_lib);
2319 cls.set_num_type_arguments_unsafe(0);
2320 cls.set_is_prefinalized();
2321 pending_classes.Add(cls);
2323 object_store->set_string_type(
type);
2325 object_store->set_legacy_string_type(
type);
2326
2327 cls = object_store->bool_class();
2329 object_store->set_bool_type(
type);
2330
2331 cls = object_store->smi_class();
2333 object_store->set_smi_type(
type);
2335
2336 cls = object_store->mint_class();
2338 object_store->set_mint_type(
type);
2339
2340
2341
2342
2343
2344
2345
2346 cls = object_store->null_class();
2349 type.SetIsFinalized();
2351 object_store->set_null_type(
type);
2352 cls.set_declaration_type(
type);
2354
2355
2356 type = object_store->object_type();
2357 cls.set_super_type(
type);
2358
2359 cls = object_store->never_class();
2362 type.SetIsFinalized();
2364 object_store->set_never_type(
type);
2366 type_args.SetTypeAt(0,
type);
2367 type_args = type_args.Canonicalize(thread);
2368 object_store->set_type_argument_never(type_args);
2369
2370
2371
2373 type = object_store->int_type();
2374 type_args.SetTypeAt(0,
type);
2375 type_args = type_args.Canonicalize(thread);
2376 object_store->set_type_argument_int(type_args);
2378 type = object_store->legacy_int_type();
2379 type_args.SetTypeAt(0,
type);
2380 type_args = type_args.Canonicalize(thread);
2381 object_store->set_type_argument_legacy_int(type_args);
2382
2384 type = object_store->double_type();
2385 type_args.SetTypeAt(0,
type);
2386 type_args = type_args.Canonicalize(thread);
2387 object_store->set_type_argument_double(type_args);
2388
2390 type = object_store->string_type();
2391 type_args.SetTypeAt(0,
type);
2392 type_args = type_args.Canonicalize(thread);
2393 object_store->set_type_argument_string(type_args);
2395 type = object_store->legacy_string_type();
2396 type_args.SetTypeAt(0,
type);
2397 type_args = type_args.Canonicalize(thread);
2398 object_store->set_type_argument_legacy_string(type_args);
2399
2401 type = object_store->string_type();
2402 type_args.SetTypeAt(0,
type);
2403 type_args.SetTypeAt(1, Object::dynamic_type());
2404 type_args = type_args.Canonicalize(thread);
2405 object_store->set_type_argument_string_dynamic(type_args);
2406
2408 type = object_store->string_type();
2409 type_args.SetTypeAt(0,
type);
2410 type_args.SetTypeAt(1,
type);
2411 type_args = type_args.Canonicalize(thread);
2412 object_store->set_type_argument_string_string(type_args);
2413
2415 if (lib.IsNull()) {
2416 lib = Library::NewLibraryHelper(Symbols::DartFfi(), true);
2417 lib.SetLoadRequested();
2418 lib.Register(thread);
2419 }
2420 object_store->set_bootstrap_library(ObjectStore::kFfi, lib);
2421
2422 cls = Class::New<Instance, RTN::Instance>(kFfiNativeTypeCid, isolate_group);
2423 cls.set_num_type_arguments_unsafe(0);
2424 cls.set_is_prefinalized();
2425 pending_classes.Add(cls);
2426 object_store->set_ffi_native_type_class(cls);
2427 RegisterClass(cls, Symbols::FfiNativeType(), lib);
2428
2429#define REGISTER_FFI_TYPE_MARKER(clazz) \
2430 cls = Class::New<Instance, RTN::Instance>(kFfi##clazz##Cid, isolate_group); \
2431 cls.set_num_type_arguments_unsafe(0); \
2432 cls.set_is_prefinalized(); \
2433 pending_classes.Add(cls); \
2434 RegisterClass(cls, Symbols::Ffi##clazz(), lib);
2436#undef REGISTER_FFI_TYPE_MARKER
2437
2438 cls = Class::New<Instance, RTN::Instance>(kFfiNativeFunctionCid,
2439 isolate_group);
2441 RTN::Instance::NextFieldOffset());
2442 cls.set_num_type_arguments_unsafe(1);
2443 cls.set_is_prefinalized();
2444 pending_classes.Add(cls);
2445 RegisterClass(cls, Symbols::FfiNativeFunction(), lib);
2446
2448 object_store->set_ffi_pointer_class(cls);
2449 pending_classes.Add(cls);
2450 RegisterClass(cls, Symbols::FfiPointer(), lib);
2451
2452 cls = Class::New<DynamicLibrary, RTN::DynamicLibrary>(kDynamicLibraryCid,
2453 isolate_group);
2455 compiler::target::RoundedAllocationSize(
2456 RTN::DynamicLibrary::InstanceSize()));
2457 cls.set_is_prefinalized();
2458 pending_classes.Add(cls);
2459 RegisterClass(cls, Symbols::FfiDynamicLibrary(), lib);
2460
2461 cls = Class::New<NativeFinalizer, RTN::NativeFinalizer>(isolate_group);
2462 object_store->set_native_finalizer_class(cls);
2463 RegisterPrivateClass(cls, Symbols::_NativeFinalizer(), lib);
2464
2465 cls = Class::New<Finalizer, RTN::Finalizer>(isolate_group);
2466 cls.set_type_arguments_field_offset(
2468 RTN::Finalizer::type_arguments_offset());
2469 cls.set_num_type_arguments_unsafe(1);
2470 object_store->set_finalizer_class(cls);
2471 pending_classes.Add(cls);
2472 RegisterPrivateClass(cls, Symbols::_FinalizerImpl(), core_lib);
2473
2474
2475
2477 if (lib.IsNull()) {
2478 lib = Library::NewLibraryHelper(Symbols::DartInternal(), true);
2479 lib.SetLoadRequested();
2480 lib.Register(thread);
2481 }
2482 object_store->set_bootstrap_library(ObjectStore::kInternal, lib);
2485
2486 cls = Class::New<FinalizerEntry, RTN::FinalizerEntry>(isolate_group);
2487 object_store->set_finalizer_entry_class(cls);
2488 pending_classes.Add(cls);
2489 RegisterClass(cls, Symbols::FinalizerEntry(), lib);
2490
2491
2492
2495 if (!
error.IsNull()) {
2497 }
2498
2499 isolate_group->class_table()->CopySizesFromClassObjects();
2500
2502
2503
2505
2506
2509 cls = lib.LookupClassAllowPrivate(Symbols::ClassID());
2511 const bool injected = cls.InjectCIDFields();
2513
2514
2516#endif
2517 } else {
2518
2519
2520
2521 ObjectStore* object_store = isolate_group->object_store();
2522 SafepointWriteRwLocker ml(thread, isolate_group->program_lock());
2523
2525
2526
2527
2528
2529
2530
2531
2532 cls = Class::New<Instance, RTN::Instance>(kInstanceCid, isolate_group);
2533 object_store->set_object_class(cls);
2534
2535 cls = Class::New<LibraryPrefix, RTN::LibraryPrefix>(isolate_group);
2536 cls = Class::New<Type, RTN::Type>(isolate_group);
2537 cls = Class::New<FunctionType, RTN::FunctionType>(isolate_group);
2538 cls = Class::New<RecordType, RTN::RecordType>(isolate_group);
2539 cls = Class::New<TypeParameter, RTN::TypeParameter>(isolate_group);
2540
2541 cls = Class::New<Array, RTN::Array>(isolate_group);
2542 object_store->set_array_class(cls);
2543
2544 cls = Class::New<Array, RTN::Array>(kImmutableArrayCid, isolate_group);
2545 object_store->set_immutable_array_class(cls);
2546
2547 cls = Class::New<GrowableObjectArray, RTN::GrowableObjectArray>(
2548 isolate_group);
2549 object_store->set_growable_object_array_class(cls);
2550
2551 cls = Class::New<Map, RTN::Map>(isolate_group);
2552 object_store->set_map_impl_class(cls);
2553
2554 cls = Class::New<Map, RTN::Map>(kConstMapCid, isolate_group);
2555 object_store->set_const_map_impl_class(cls);
2556
2557 cls = Class::New<Set, RTN::Set>(isolate_group);
2558 object_store->set_set_impl_class(cls);
2559
2560 cls = Class::New<Set, RTN::Set>(kConstSetCid, isolate_group);
2561 object_store->set_const_set_impl_class(cls);
2562
2563 cls = Class::New<Float32x4, RTN::Float32x4>(isolate_group);
2564 object_store->set_float32x4_class(cls);
2565
2566 cls = Class::New<Int32x4, RTN::Int32x4>(isolate_group);
2567 object_store->set_int32x4_class(cls);
2568
2569 cls = Class::New<Float64x2, RTN::Float64x2>(isolate_group);
2570 object_store->set_float64x2_class(cls);
2571
2572#define REGISTER_TYPED_DATA_CLASS(clazz) \
2573 cls = Class::NewTypedDataClass(kTypedData##clazz##Cid, isolate_group);
2575#undef REGISTER_TYPED_DATA_CLASS
2576#define REGISTER_TYPED_DATA_VIEW_CLASS(clazz) \
2577 cls = \
2578 Class::NewTypedDataViewClass(kTypedData##clazz##ViewCid, isolate_group); \
2579 cls = Class::NewUnmodifiableTypedDataViewClass( \
2580 kUnmodifiableTypedData##clazz##ViewCid, isolate_group);
2582#undef REGISTER_TYPED_DATA_VIEW_CLASS
2585 isolate_group);
2586#define REGISTER_EXT_TYPED_DATA_CLASS(clazz) \
2587 cls = Class::NewExternalTypedDataClass(kExternalTypedData##clazz##Cid, \
2588 isolate_group);
2590#undef REGISTER_EXT_TYPED_DATA_CLASS
2591
2592 cls = Class::New<Instance, RTN::Instance>(kFfiNativeTypeCid, isolate_group);
2593 object_store->set_ffi_native_type_class(cls);
2594
2595#define REGISTER_FFI_CLASS(clazz) \
2596 cls = Class::New<Instance, RTN::Instance>(kFfi##clazz##Cid, isolate_group);
2598#undef REGISTER_FFI_CLASS
2599
2600 cls = Class::New<Instance, RTN::Instance>(kFfiNativeFunctionCid,
2601 isolate_group);
2602
2604 object_store->set_ffi_pointer_class(cls);
2605
2606 cls = Class::New<DynamicLibrary, RTN::DynamicLibrary>(kDynamicLibraryCid,
2607 isolate_group);
2608
2609 cls = Class::New<Instance, RTN::Instance>(
kByteBufferCid, isolate_group,
2610 false);
2611 cls.set_instance_size_in_words(0, 0);
2612 isolate_group->class_table()->Register(cls);
2613
2614 cls = Class::New<Integer, RTN::Integer>(isolate_group);
2615 object_store->set_integer_implementation_class(cls);
2616
2617 cls = Class::New<Smi, RTN::Smi>(isolate_group);
2618 object_store->set_smi_class(cls);
2619
2620 cls = Class::New<Mint, RTN::Mint>(isolate_group);
2621 object_store->set_mint_class(cls);
2622
2623 cls = Class::New<Double, RTN::Double>(isolate_group);
2624 object_store->set_double_class(cls);
2625
2626 cls = Class::New<Closure, RTN::Closure>(isolate_group);
2627 object_store->set_closure_class(cls);
2628
2629 cls = Class::New<Record, RTN::Record>(isolate_group);
2630
2632 object_store->set_one_byte_string_class(cls);
2633
2635 object_store->set_two_byte_string_class(cls);
2636
2637 cls = Class::New<Bool, RTN::Bool>(isolate_group);
2638 object_store->set_bool_class(cls);
2639
2640 cls = Class::New<Instance, RTN::Instance>(
kNullCid, isolate_group);
2641 object_store->set_null_class(cls);
2642
2643 cls = Class::New<Instance, RTN::Instance>(
kNeverCid, isolate_group);
2644 object_store->set_never_class(cls);
2645
2646 cls = Class::New<Capability, RTN::Capability>(isolate_group);
2647 cls = Class::New<ReceivePort, RTN::ReceivePort>(isolate_group);
2648 cls = Class::New<SendPort, RTN::SendPort>(isolate_group);
2649 cls = Class::New<StackTrace, RTN::StackTrace>(isolate_group);
2650 cls = Class::New<SuspendState, RTN::SuspendState>(isolate_group);
2651 cls = Class::New<RegExp, RTN::RegExp>(isolate_group);
2652 cls = Class::New<Number, RTN::Number>(isolate_group);
2653
2654 cls = Class::New<WeakProperty, RTN::WeakProperty>(isolate_group);
2655 object_store->set_weak_property_class(cls);
2656 cls = Class::New<WeakReference, RTN::WeakReference>(isolate_group);
2657 object_store->set_weak_reference_class(cls);
2658 cls = Class::New<Finalizer, RTN::Finalizer>(isolate_group);
2659 object_store->set_finalizer_class(cls);
2660 cls = Class::New<NativeFinalizer, RTN::NativeFinalizer>(isolate_group);
2661 object_store->set_native_finalizer_class(cls);
2662 cls = Class::New<FinalizerEntry, RTN::FinalizerEntry>(isolate_group);
2663 object_store->set_finalizer_entry_class(cls);
2664
2665 cls = Class::New<MirrorReference, RTN::MirrorReference>(isolate_group);
2666 cls = Class::New<UserTag, RTN::UserTag>(isolate_group);
2667 cls = Class::New<FutureOr, RTN::FutureOr>(isolate_group);
2668 object_store->set_future_or_class(cls);
2669 cls = Class::New<TransferableTypedData, RTN::TransferableTypedData>(
2670 isolate_group);
2671 }
2673}
#define CLASS_LIST_FFI_TYPE_MARKER(V)
#define CLASS_LIST_TYPED_DATA(V)
#define DART_CLASS_LIST_TYPED_DATA(V)
static ErrorPtr DoBootstrapping(const uint8_t *kernel_buffer, intptr_t kernel_buffer_size)
static void VerifyBootstrapClasses()
static ClassPtr NewTypedDataViewClass(intptr_t class_id, IsolateGroup *isolate_group)
static ClassPtr NewPointerClass(intptr_t class_id, IsolateGroup *isolate_group)
static ClassPtr NewUnmodifiableTypedDataViewClass(intptr_t class_id, IsolateGroup *isolate_group)
static Snapshot::Kind vm_snapshot_kind()
static intptr_t InstanceSize()
static intptr_t type_arguments_offset()
static intptr_t type_arguments_offset()
static GrowableObjectArrayPtr New(Heap::Space space=Heap::kNew)
static intptr_t NextFieldOffset()
static LibraryPtr CoreLibrary()
static LibraryPtr MirrorsLibrary()
static LibraryPtr IsolateLibrary()
static LibraryPtr CollectionLibrary()
static LibraryPtr AsyncLibrary()
static LibraryPtr LookupLibrary(Thread *thread, const String &url)
static LibraryPtr InternalLibrary()
static void InitNativeWrappersLibrary(IsolateGroup *isolate_group, bool is_kernel_file)
static void InitCoreLibrary(IsolateGroup *isolate_group)
static LibraryPtr DeveloperLibrary()
static LibraryPtr TypedDataLibrary()
static intptr_t type_arguments_offset()
static void InitializeState()
static void SetupSymbolTable(IsolateGroup *isolate_group)
static TypeArgumentsPtr New(intptr_t len, Heap::Space space=Heap::kOld)
static TypePtr NewNonParameterizedType(const Class &type_class)
static intptr_t type_arguments_offset()
static void InitializeState()
const uint8_t uint32_t uint32_t GError ** error
@ kUnmodifiableByteDataViewCid
#define TIMELINE_DURATION(thread, stream, name)
#define REGISTER_TYPED_DATA_CLASS(clazz)
#define REGISTER_FFI_CLASS(clazz)
#define REGISTER_EXT_TYPED_DATA_CLASS(clazz)
#define REGISTER_TYPED_DATA_VIEW_CLASS(clazz)
#define REGISTER_FFI_TYPE_MARKER(clazz)