[IR] Lift restrictions on phase prerequisites

Allow depending on phases of different "types".
This commit is contained in:
Sergey Bogolepov
2023-01-24 14:52:08 +02:00
committed by Space Team
parent 1ffef21ce5
commit 32a265a7eb
@@ -70,7 +70,7 @@ infix operator fun <Data, Context> Action<Data, Context>.plus(other: Action<Data
abstract class AbstractNamedCompilerPhase<in Context : LoggingContext, Input, Output>( abstract class AbstractNamedCompilerPhase<in Context : LoggingContext, Input, Output>(
val name: String, val name: String,
val description: String, val description: String,
val prerequisite: Set<AbstractNamedCompilerPhase<Context, *, *>> = emptySet(), val prerequisite: Set<AbstractNamedCompilerPhase<*, *, *>> = emptySet(),
val preconditions: Set<Checker<Input>> = emptySet(), val preconditions: Set<Checker<Input>> = emptySet(),
val postconditions: Set<Checker<Output>> = emptySet(), val postconditions: Set<Checker<Output>> = emptySet(),
protected val nlevels: Int = 0 protected val nlevels: Int = 0
@@ -133,7 +133,7 @@ abstract class AbstractNamedCompilerPhase<in Context : LoggingContext, Input, Ou
class NamedCompilerPhase<in Context : LoggingContext, Data>( class NamedCompilerPhase<in Context : LoggingContext, Data>(
name: String, name: String,
description: String, description: String,
prerequisite: Set<AbstractNamedCompilerPhase<Context, *, *>> = emptySet(), prerequisite: Set<AbstractNamedCompilerPhase<*, *, *>> = emptySet(),
private val lower: CompilerPhase<Context, Data, Data>, private val lower: CompilerPhase<Context, Data, Data>,
preconditions: Set<Checker<Data>> = emptySet(), preconditions: Set<Checker<Data>> = emptySet(),
postconditions: Set<Checker<Data>> = emptySet(), postconditions: Set<Checker<Data>> = emptySet(),
@@ -189,7 +189,7 @@ typealias SameTypeNamedCompilerPhase<Context, Data> = NamedCompilerPhase<Context
abstract class SimpleNamedCompilerPhase<in Context : LoggingContext, Input, Output>( abstract class SimpleNamedCompilerPhase<in Context : LoggingContext, Input, Output>(
name: String, name: String,
description: String, description: String,
prerequisite: Set<SameTypeNamedCompilerPhase<Context, *>> = emptySet(), prerequisite: Set<AbstractNamedCompilerPhase<*, *, *>> = emptySet(),
preconditions: Set<Checker<Input>> = emptySet(), preconditions: Set<Checker<Input>> = emptySet(),
postconditions: Set<Checker<Output>> = emptySet(), postconditions: Set<Checker<Output>> = emptySet(),
private val preactions: Set<Action<Input, Context>> = emptySet(), private val preactions: Set<Action<Input, Context>> = emptySet(),