public SharedRuntimeConfigurationBuilder build() { wordTypes = new WordTypes(metaAccess, FrameAccess.getWordKind()); Providers p = createProviders(null, null, null, null, null, null, null, null); StampProvider stampProvider = createStampProvider(p); p = createProviders(null, null, null, null, null, null, stampProvider, null); ConstantReflectionProvider constantReflection = createConstantReflectionProvider(p); p = createProviders(null, constantReflection, null, null, null, null, stampProvider, null); ConstantFieldProvider constantFieldProvider = createConstantFieldProvider(p); SnippetReflectionProvider snippetReflection = createSnippetReflectionProvider(); ForeignCallsProvider foreignCalls = createForeignCallsProvider(); p = createProviders(null, constantReflection, constantFieldProvider, foreignCalls, null, null, stampProvider, snippetReflection); LoweringProvider lowerer = createLoweringProvider(p); p = createProviders(null, constantReflection, constantFieldProvider, foreignCalls, lowerer, null, stampProvider, snippetReflection); Replacements replacements = createReplacements(p, snippetReflection); p = createProviders(null, constantReflection, constantFieldProvider, foreignCalls, lowerer, replacements, stampProvider, snippetReflection); EnumMap<ConfigKind, SubstrateBackend> backends = new EnumMap<>(ConfigKind.class); for (ConfigKind config : ConfigKind.values()) { RegisterConfig registerConfig = ImageSingletons.lookup(SubstrateRegisterConfigFactory.class).newRegisterFactory(config, metaAccess, ConfigurationValues.getTarget(), SubstrateOptions.UseStackBasePointer.getValue()); CodeCacheProvider codeCacheProvider = createCodeCacheProvider(registerConfig); Providers newProviders = createProviders(codeCacheProvider, constantReflection, constantFieldProvider, foreignCalls, lowerer, replacements, stampProvider, snippetReflection); backends.put(config, GraalConfiguration.instance().createBackend(newProviders)); } runtimeConfig = new RuntimeConfiguration(p, snippetReflection, backends, wordTypes); return this; }