[FIR] Add fir node for raw contract description

This commit is contained in:
Dmitriy Novozhilov
2020-04-08 14:19:25 +03:00
parent ba272101f2
commit a89e0123c7
26 changed files with 212 additions and 27 deletions
@@ -221,6 +221,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(propertyAccessor) {
parents += functionBuilder
defaultNull("body")
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
}
builder(whenExpression) {
@@ -255,6 +257,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
parents += functionBuilder
parents += typeParametersOwnerBuilder
defaultNull("body")
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
openBuilder()
}
@@ -144,4 +144,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val composedSuperTypeRef = element("ComposedSuperTypeRef", TypeRef, typeRef)
val contractDescription = element("ContractDescription", Contracts)
val rawContractDescription = element("RawContractDescription", Contracts, contractDescription)
val resolvedContractDescription = element("ResolvedContractDescription", Contracts, contractDescription)
}
@@ -294,8 +294,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
value = "!isGetter"
withGetter = true
}
default("contractDescription", "FirEmptyContractDescription")
useTypes(modalityType, emptyContractDescriptionType)
useTypes(modalityType)
kind = OpenClass
}
@@ -447,8 +446,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(simpleFunction) {
kind = OpenClass
default("contractDescription", "FirEmptyContractDescription")
useTypes(emptyContractDescriptionType)
}
impl(delegatedTypeRef) {
@@ -576,7 +576,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field(varianceType)
}
contractDescription.configure {
rawContractDescription.configure {
+field("contractCall", functionCall)
}
resolvedContractDescription.configure {
+fieldList("effects", effectDeclarationType)
}
}