package org.shedlang.compiler.backends; import org.shedlang.compiler.backends.cranelift.CraneliftBackendFactory; import org.shedlang.compiler.backends.llvm.LlvmBackendFactory; import org.shedlang.compiler.backends.targets.ShedTarget; import org.shedlang.compiler.backends.wasm.WasmBackendFactory; import java.util.List; import java.util.Optional; public class Backends { private Backends() { } private static final List BACKEND_FACTORIES = List.of( new LlvmBackendFactory(), new WasmBackendFactory(), new CraneliftBackendFactory(), PatioNativeCHeadersBackend.FACTORY, PatioTextBackend.FACTORY, ShidTextBackend.FACTORY ); public static List backendNames() { return BACKEND_FACTORIES.stream() .map(factory -> factory.name()) .toList(); } public static Optional backendFactory(String backendName) { return BACKEND_FACTORIES.stream() .filter(factory -> factory.name().equals(backendName)) .findFirst(); } public static Backend backendForTarget(ShedTarget target) { for (var factory : BACKEND_FACTORIES) { var backend = factory.backendForTarget(target); if (backend.isPresent()) { return backend.get(); } } throw new UnsupportedOperationException("TODO"); } }