abstract class BaseType extends Data with DeclarationStatement with StatementDoubleLinkedContainer[BaseType, AssignmentStatement] with Expression
Abstract base class of all Spinal types
- Alphabetic
- By Inheritance
- BaseType
- Expression
- StatementDoubleLinkedContainer
- DoubleLinkedContainer
- DeclarationStatement
- LeafStatement
- Statement
- BaseNode
- ExpressionContainer
- Data
- InComponent
- OverridedEqualsHashCode
- SpinalTagReady
- Assignable
- NameableByComponent
- Nameable
- OwnableRef
- ContextUser
- ScalaLocated
- GlobalDataUser
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new BaseType()
Type Members
-
abstract
type
RefOwnerType
- Definition Classes
- OwnableRef
Abstract Value Members
-
abstract
def
asBits: Bits
Cast signal to Bits
Cast signal to Bits
- Definition Classes
- Data
-
abstract
def
assignFromBits(bits: Bits, hi: Int, low: Int): Unit
- Definition Classes
- Data
-
abstract
def
assignFromBits(bits: Bits): Unit
- Definition Classes
- Data
-
abstract
def
getBitsWidth: Int
Return the width of the data
Return the width of the data
- Definition Classes
- Data
-
abstract
def
getTypeObject: Any
- Definition Classes
- Expression
-
abstract
def
getZero: BaseType.this.type
Create a signal set to 0
Create a signal set to 0
- Definition Classes
- Data
-
abstract
def
opName: String
- Definition Classes
- Expression
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
##(right: Data): Bits
Concatenation between two signals
Concatenation between two signals
- Definition Classes
- Data
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
#*(count: Int): Bits
Return the
count
time concatenation of the signal.Return the
count
time concatenation of the signal.- Definition Classes
- Data
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
IFparent: Data
- Definition Classes
- Data
-
val
_spinalTags: LinkedHashSet[SpinalTag]
- Definition Classes
- SpinalTagReady
-
def
addAttribute(attribute: Attribute): BaseType.this.type
- Definition Classes
- BaseType → Data → SpinalTagReady
-
def
addAttribute(name: String, value: Int): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
addAttribute(name: String, value: String): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
addAttribute(name: String): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
addTag[T <: SpinalTag](spinalTag: T): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
addTags(h: SpinalTag, tail: SpinalTag*): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
addTags[T <: SpinalTag](tags: Iterable[T]): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
val
algoIncrementale: Int
- Definition Classes
- BaseNode
-
val
algoInt: Int
- Definition Classes
- BaseNode
-
def
allowDirectionLessIo(): BaseType.this.type
Allow a signal of an io
Bundle
to be directionless.Allow a signal of an io
Bundle
to be directionless.- Definition Classes
- Data
- See also
-
def
allowOverride(): BaseType.this.type
Allow a signal to be overridden.
Allow a signal to be overridden.
- Definition Classes
- Data
- See also
-
def
allowPartialyAssigned(): BaseType.this.type
Allow a register to be partially assigned
Allow a register to be partially assigned
- Definition Classes
- Data
-
def
allowPruning(): BaseType.this.type
- Definition Classes
- Data
- def allowSimplifyIt(): BaseType.this.type
-
def
allowUnsetRegToAvoidLatch(): BaseType.this.type
Allow a register to have only an init (no assignments)
Allow a register to have only an init (no assignments)
- Definition Classes
- Data
- See also
-
def
as[T <: Data](dataType: HardType[T]): T
- Definition Classes
- Data
-
def
asData: Data
- Definition Classes
- Data
-
def
asInOut(): BaseType.this.type
Set a signal as
inout
-
def
asInput(): BaseType.this.type
Set a data as input
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
asOutput(): BaseType.this.type
Set a data as output
-
def
assignDontCare(): BaseType.this.type
Assign the default 'x' value to all signals composing this type.
Assign the default 'x' value to all signals composing this type.
- Definition Classes
- Data
- See also
-
def
assignDontCareToUnasigned(): BaseType.this.type
- Definition Classes
- Data
-
def
assignFormalRandom(kind: RandomExpKind): Unit
- Definition Classes
- Data
-
final
def
assignFrom(that: AnyRef, target: AnyRef = this)(implicit loc: Location): Unit
- Definition Classes
- Data
-
def
assignFromBits(bits: Bits, offset: Int, bitCount: BitCount): Unit
- Definition Classes
- Data
-
def
assignFromImpl(that: AnyRef, target: AnyRef, kind: AnyRef)(implicit loc: Location): Unit
- Attributes
- protected
- Definition Classes
- BaseType → Assignable
-
def
cldCount: Int
- Definition Classes
- DoubleLinkedContainer
-
def
clearAll(): BaseType.this.type
Clear all bits to
and return itselfFalse
Clear all bits to
and return itselfFalse
- Definition Classes
- Data
- var clockDomain: ClockDomain
- def clone(): BaseType.this.type
-
def
component: Component
- Definition Classes
- ContextUser
-
final
def
compositAssignFrom(that: AnyRef, target: AnyRef, kind: AnyRef)(implicit loc: Location): Unit
- Definition Classes
- Assignable
-
val
compositeAssign: Assignable
- Definition Classes
- Assignable
- def copyDirectionOfImpl(that: Data): BaseType.this.type
-
def
dirString(): String
- Definition Classes
- Data
-
def
dlcAppend(that: AssignmentStatement): BaseType.this.type
- Definition Classes
- DoubleLinkedContainer
-
def
dlcForeach[T >: AssignmentStatement](func: (T) ⇒ Unit): Unit
- Definition Classes
- DoubleLinkedContainer
-
def
dlcHasOnlyOne: Boolean
- Definition Classes
- DoubleLinkedContainer
-
val
dlcHead: AssignmentStatement
- Definition Classes
- DoubleLinkedContainer
-
def
dlcIsEmpty: Boolean
- Definition Classes
- DoubleLinkedContainer
-
val
dlcLast: AssignmentStatement
- Definition Classes
- DoubleLinkedContainer
-
def
dlcPrepend(that: AssignmentStatement): BaseType.this.type
- Definition Classes
- DoubleLinkedContainer
- def dontSimplifyIt(): BaseType.this.type
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(obj: Any): Boolean
- Definition Classes
- OverridedEqualsHashCode → AnyRef → Any
-
def
existsTag(cond: (SpinalTag) ⇒ Boolean): Boolean
- Definition Classes
- SpinalTagReady
-
def
filterTag(cond: (SpinalTag) ⇒ Boolean): Iterable[SpinalTag]
- Definition Classes
- SpinalTagReady
-
def
findTag(cond: (SpinalTag) ⇒ Boolean): Option[SpinalTag]
- Definition Classes
- SpinalTagReady
- def flatten: Seq[BaseType]
- def flattenForeach(body: (BaseType) ⇒ Unit): Unit
- def flattenLocalName: Seq[String]
-
def
flip(): BaseType.this.type
Flip the direction of the signal.
Flip the direction of the signal.
in
andout
are swapped,inout
stay the same.- Definition Classes
- Data
- def foreachClockDomain(func: (ClockDomain) ⇒ Unit): Unit
-
def
foreachDrivingExpression(func: (Expression) ⇒ Unit): Unit
- Definition Classes
- ExpressionContainer
-
def
foreachExpression(func: (Expression) ⇒ Unit): Unit
- Definition Classes
- DeclarationStatement → ExpressionContainer
-
def
foreachReflectableNameables(doThat: (Any) ⇒ Unit): Unit
- Definition Classes
- Nameable
-
def
foreachStatements(func: (AssignmentStatement) ⇒ Unit): Unit
- Definition Classes
- StatementDoubleLinkedContainer
-
def
foreachTag(body: (SpinalTag) ⇒ Unit): Unit
- Definition Classes
- SpinalTagReady
- def freeze(): BaseType.this.type
-
def
getAheadValue(): BaseType.this.type
For a register, get the value it will have at the next clock, as a combinational signal.
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
def
getComponent(): Component
- Definition Classes
- Data → InComponent → NameableByComponent
-
def
getComponents(): Seq[Component]
Get current component with all parents
Get current component with all parents
- Definition Classes
- InComponent
-
def
getDirection: IODirection
- Definition Classes
- Data
-
def
getDisplayName(): String
- Definition Classes
- Nameable
- def getDrivingReg(reportError: Boolean = true): BaseType.this.type
-
def
getInstanceCounter: Int
- Definition Classes
- ContextUser
-
def
getMode: Byte
- Attributes
- protected
- Definition Classes
- Nameable
-
def
getMuxType[T <: Data](list: TraversableOnce[T]): HardType[T]
- Definition Classes
- Data
-
def
getName(default: String): String
- Definition Classes
- NameableByComponent → Nameable
-
def
getName(): String
- Definition Classes
- NameableByComponent → Nameable
-
def
getPartialName(): String
- Definition Classes
- Nameable
-
def
getPath(from: Component, to: Component): Seq[Component]
- Definition Classes
- NameableByComponent
-
def
getRealSource: Any
- Definition Classes
- Assignable
-
def
getRealSourceNoRec: Any
- Definition Classes
- Data → Assignable
-
def
getRefOwnersChain(): List[Any]
- Definition Classes
- OwnableRef
-
def
getRootParent: Data
- Definition Classes
- Data
-
def
getRtlPath(separator: String = "/"): String
- Definition Classes
- Data
-
def
getScalaLocationLong: String
- Definition Classes
- ScalaLocated
-
def
getScalaLocationShort: String
- Definition Classes
- ScalaLocated
-
def
getScalaTrace(): Throwable
- Definition Classes
- ScalaLocated
- def getSingleDriver: Option[BaseType.this.type]
-
def
getTag[T <: SpinalTag](clazz: Class[T]): Option[T]
- Definition Classes
- SpinalTagReady
-
def
getTags(): LinkedHashSet[SpinalTag]
- Definition Classes
- SpinalTagReady
-
def
getTagsOf[T <: SpinalTag]()(implicit tag: ClassTag[T]): Iterable[T]
- Definition Classes
- SpinalTagReady
-
val
globalData: GlobalData
- Definition Classes
- GlobalDataUser
- def hasAssignement: Boolean
- def hasDataAssignment: Boolean
-
def
hasInit: Boolean
Does the base type have initial value
-
def
hasOnlyOneStatement: Boolean
- Definition Classes
- StatementDoubleLinkedContainer
-
def
hasTag[T <: SpinalTag](clazz: Class[T]): Boolean
- Definition Classes
- SpinalTagReady
-
def
hasTag(spinalTag: SpinalTag): Boolean
- Definition Classes
- SpinalTagReady
-
def
hashCode(): Int
- Definition Classes
- OverridedEqualsHashCode → AnyRef → Any
-
def
head: AssignmentStatement
- Definition Classes
- StatementDoubleLinkedContainer
-
final
def
initFrom(that: AnyRef, target: AnyRef = this): Unit
- Definition Classes
- Data
- def initialFrom(that: AnyRef, target: AnyRef = this): Unit
-
def
insertNext(s: Statement): Unit
- Definition Classes
- Statement
-
def
instanceAttributes(language: Language): Iterable[Attribute]
- Definition Classes
- SpinalTagReady
-
def
instanceAttributes: Iterable[Attribute]
- Definition Classes
- SpinalTagReady
- def isAnalog: Boolean
- def isComb: Boolean
-
def
isCompletelyUnnamed: Boolean
- Definition Classes
- Nameable
-
def
isDirectionLess: Boolean
- Definition Classes
- Data
-
def
isEmptyOfTag: Boolean
- Definition Classes
- SpinalTagReady
- def isFrozen(): Boolean
-
def
isInOut: Boolean
- Definition Classes
- Data
-
def
isInput: Boolean
- Definition Classes
- Data
-
def
isInputOrInOut: Boolean
- Definition Classes
- Data
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
isNamed: Boolean
- Definition Classes
- Nameable
-
def
isOutput: Boolean
- Definition Classes
- Data
-
def
isOutputOrInOut: Boolean
- Definition Classes
- Data
-
def
isPriorityApplicable(namePriority: Byte): Boolean
- Definition Classes
- Nameable
- def isReg: Boolean
-
def
isRegOnAssign: Boolean
- Definition Classes
- Data
-
def
isTypeNode: Boolean
Is the baseType a node
-
def
isUnnamed: Boolean
- Definition Classes
- NameableByComponent → Nameable
-
def
isUsingResetSignal: Boolean
Is the basetype using reset signal
-
def
isUsingSoftResetSignal: Boolean
Is the basetype using soft reset signal
-
def
isVital: Boolean
Check if the baseType is vital
-
val
lastScopeStatement: Statement
- Definition Classes
- Statement
-
def
mux[T2 <: Data](mappings: (Any, T2)*): T2
Use a SpinalHDL data as a selector for a mux.
Use a SpinalHDL data as a selector for a mux.
- See also
-
def
muxDc[T2 <: Data](mappings: (Any, T2)*): T2
Version of SpinalHDL
mux
that allows Don't Care.Version of SpinalHDL
mux
that allows Don't Care.- See also
-
def
muxList[T2 <: Data](defaultValue: T2, mappings: Seq[(Any, T2)]): T2
Use a
scala.Seq
of SpinalHDL data as mux inputs.Use a
scala.Seq
of SpinalHDL data as mux inputs.- See also
-
def
muxList[T2 <: Data](mappings: Seq[(Any, T2)]): T2
Use a
scala.Seq
of SpinalHDL data as mux inputs.Use a
scala.Seq
of SpinalHDL data as mux inputs.- See also
-
def
muxListDc[T2 <: Data](mappings: Seq[(Any, T2)]): T2
Version of SpinalHDL
muxList
that allows Don't Care.Version of SpinalHDL
muxList
that allows Don't Care.- See also
-
val
name: String
- Definition Classes
- Nameable
- val nameableRef: Nameable
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
val
nextScopeStatement: Statement
- Definition Classes
- Statement
-
def
noBackendCombMerge(): BaseType.this.type
Put the combinatorial logic driving this signal in a separate process
Put the combinatorial logic driving this signal in a separate process
- Definition Classes
- Data
-
def
noCombLoopCheck(): BaseType.this.type
Disable combinatorial loop checking for this Data
Disable combinatorial loop checking for this Data
- Definition Classes
- Data
- See also
-
def
normalizeInputs: Unit
- Definition Classes
- BaseType → ExpressionContainer
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
def
onEachAttributes(doIt: (Attribute) ⇒ Unit): Unit
- Definition Classes
- SpinalTagReady
-
def
overrideLocalName(name: String): BaseType.this.type
- Definition Classes
- Nameable
-
val
parent: Data
- Definition Classes
- Data
-
val
parentScope: ScopeStatement
- Definition Classes
- ContextUser
-
def
pull(propagateName: Boolean): BaseType.this.type
- Definition Classes
- Data
-
def
pull(): BaseType.this.type
Pull a signal to the top level (use for debugging)
Pull a signal to the top level (use for debugging)
- Definition Classes
- Data
-
def
purify(): BaseType.this.type
- Definition Classes
- Data
-
def
randBoot(u: Unit): BaseType.this.type
Useful for register that doesn't need a reset value in RTL, but need a random value for simulation (avoid x-propagation)
Useful for register that doesn't need a reset value in RTL, but need a random value for simulation (avoid x-propagation)
- Definition Classes
- Data
-
val
refOwner: RefOwnerType
- Definition Classes
- OwnableRef
- Annotations
- @DontName()
-
def
reflectNames(): Unit
- Definition Classes
- Nameable
- def remapClockDomain(func: (ClockDomain) ⇒ ClockDomain): Unit
-
def
remapDrivingExpressions(func: (Expression) ⇒ Expression): Unit
- Definition Classes
- ExpressionContainer
-
def
remapExpressions(func: (Expression) ⇒ Expression): Unit
- Definition Classes
- DeclarationStatement → ExpressionContainer
-
def
removeAssignments(data: Boolean = true, init: Boolean = true, initial: Boolean = true): BaseType.this.type
Remove all assignments of the base type
-
def
removeDataAssignments(): BaseType.this.type
- Definition Classes
- Data
-
def
removeInitAssignments(): BaseType.this.type
- Definition Classes
- Data
- def removeStatement(): Unit
-
def
removeStatementFromScope(): Unit
- Definition Classes
- Statement
-
def
removeTag(spinalTag: SpinalTag): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
removeTags(tags: Iterable[SpinalTag]): BaseType.this.type
- Definition Classes
- SpinalTagReady
-
def
resized: BaseType.this.type
Return a version of the signal which is allowed to be automatically resized where needed.
Return a version of the signal which is allowed to be automatically resized where needed.
The resize operation is deferred until the point of assignment later. The resize may widen or truncate, retaining the LSB.
- Definition Classes
- Data
- See also
-
def
rootIF(): Interface
root interface
root interface
- Definition Classes
- Data
-
def
rootIFList(): List[Interface]
- Definition Classes
- Data
-
def
rootIFrec(now: Data, lastRoot: List[Interface]): List[Interface]
- Definition Classes
- Data
- def rootScopeStatement: ScopeStatement
-
val
scalaTrace: Throwable
- Definition Classes
- ScalaLocated
-
def
setAll(): BaseType.this.type
Set all bits to
and return itselfTrue
Set all bits to
and return itselfTrue
- Definition Classes
- Data
- def setAsAnalog(): BaseType.this.type
-
def
setAsComb(): BaseType.this.type
Set baseType to Combinatorial
-
def
setAsDirectionLess(): BaseType.this.type
Remove the direction (
in
,out
,inout
) to a signal -
def
setAsReg(): BaseType.this.type
Set baseType to reg
-
def
setAsTypeNode(): BaseType.this.type
Set baseType to Node
-
def
setAsVital(): BaseType.this.type
Set the baseType to vital
-
def
setCompositeName(nameable: Nameable, postfix: String, namePriority: Byte): BaseType.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, postfix: String, weak: Boolean): BaseType.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, postfix: String): BaseType.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, namePriority: Byte): BaseType.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable, weak: Boolean): BaseType.this.type
- Definition Classes
- Nameable
-
def
setCompositeName(nameable: Nameable): BaseType.this.type
- Definition Classes
- Nameable
-
def
setLambdaName(isNameBody: ⇒ Boolean)(nameGen: ⇒ String): BaseType.this.type
- Definition Classes
- Nameable
-
def
setName(name: String, namePriority: Byte): BaseType.this.type
- Definition Classes
- Nameable
-
def
setName(name: String, weak: Boolean): BaseType.this.type
- Definition Classes
- Nameable
-
def
setName(name: String): BaseType.this.type
- Definition Classes
- Nameable
-
def
setNameAsWeak(): BaseType.this.type
- Definition Classes
- Nameable
-
def
setOutputAsReg(): BaseType.this.type
Recursively set baseType to reg only for output
Recursively set baseType to reg only for output
- Definition Classes
- Data
-
def
setPartialName(name: String, namePriority: Byte, owner: Any): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String, namePriority: Byte): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String, weak: Boolean): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable, name: String, namePriority: Byte): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable, name: String, weak: Boolean): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(name: String): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable, name: String): BaseType.this.type
- Definition Classes
- Nameable
-
def
setPartialName(owner: Nameable): BaseType.this.type
- Definition Classes
- Nameable
-
def
setRefOwner(that: Any): Unit
- Definition Classes
- OwnableRef
-
def
setScalaLocated(source: ScalaLocated): BaseType.this.type
- Definition Classes
- ScalaLocated
-
def
setWeakName(name: String): BaseType.this.type
- Definition Classes
- Nameable
-
def
simplifyNode: Expression
- Definition Classes
- Expression
-
def
spinalTags: LinkedHashSet[SpinalTag]
- Definition Classes
- SpinalTagReady
-
def
stabilized(func: (Expression) ⇒ Expression, seed: Expression): Expression
- Definition Classes
- ExpressionContainer
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toIo(): BaseType.this.type
- Definition Classes
- Data
-
def
toMuxInput[T <: Data](muxOutput: T): T
- Definition Classes
- Data
-
def
toString(): String
- Definition Classes
- BaseType → Expression → Nameable → AnyRef → Any
-
def
toStringMultiLine(): String
- Definition Classes
- BaseNode
-
def
toStringRec(level: Int = 1): String
- Definition Classes
- Expression
- def unfreeze(): BaseType.this.type
-
def
unsetName(): BaseType.this.type
- Definition Classes
- Nameable
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
def
walkDrivingExpressions(func: (Expression) ⇒ Unit): Unit
- Definition Classes
- ExpressionContainer
-
def
walkExpression(func: (Expression) ⇒ Unit): Unit
- Definition Classes
- ExpressionContainer
-
def
walkExpressionPostorder(func: (Expression) ⇒ Unit): Unit
- Definition Classes
- ExpressionContainer
-
def
walkParentTreeStatements(func: (TreeStatement) ⇒ Unit): Unit
- Definition Classes
- Statement
-
def
walkParentTreeStatementsUntilRootScope(func: (TreeStatement) ⇒ Unit): Unit
- Definition Classes
- Statement
-
def
walkRemapDrivingExpressions(func: (Expression) ⇒ Expression): Unit
- Definition Classes
- ExpressionContainer
-
def
walkRemapExpressions(func: (Expression) ⇒ Expression): Unit
- Definition Classes
- ExpressionContainer
- def wrapCast[T <: BaseType](result: T, node: Cast): T
-
def
wrapNext(): BaseType.this.type
- Definition Classes
- Data
Deprecated Value Members
-
def
asDirectionLess(): BaseType.this.type
- Definition Classes
- Data
- Annotations
- @deprecated
- Deprecated
(Since version ???) use setAsDirectionLess instead
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] ) @Deprecated
- Deprecated
-
def
genIf(cond: Boolean): BaseType.this.type
Generate this if condition is true
Generate this if condition is true
- Definition Classes
- Data
- Annotations
- @deprecated
- Deprecated
does not work with <>, use 'someBool generate Type()' or 'if(condition) Type() else null' instead