Skip to content

Commit 53527d6

Browse files
committed
backend-api: add source locations to IrClass and IrClass.MemberVariable
1 parent fa800df commit 53527d6

3 files changed

Lines changed: 8 additions & 1 deletion

File tree

backend-api/src/main/kotlin/io/github/tmarsteel/emerge/backend/api/ir/basetype.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ interface IrClass : IrBaseType {
4444

4545
val destructor: IrFunction
4646

47+
val declaredAt: IrSourceLocation
48+
4749
interface MemberVariable {
4850
val name: String
4951

@@ -59,6 +61,8 @@ interface IrClass : IrBaseType {
5961
*/
6062
val writeStrategy: AccessStrategy
6163

64+
val declaredAt: IrSourceLocation
65+
6266
sealed interface AccessStrategy {
6367
/**
6468
* The member variable is supposed to be read/written by directly accessing the [Field] with [Field.id] == [BareField.fieldId].

frontend/src/main/kotlin/compiler/binding/basetype/BoundBaseType.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,7 @@ private class IrClassImpl(
583583
override val memberFunctions by lazy { typeDef.memberFunctions.map { it.toBackendIr() as IrOverloadGroup<IrMemberFunction> } }
584584
override val constructor by lazy { typeDef.constructor!!.toBackendIr() }
585585
override val destructor by lazy { typeDef.destructor!!.toBackendIr() }
586+
override val declaredAt by lazy { typeDef.declaration.declaredAt }
586587

587588
override fun equals(other: Any?): Boolean {
588589
if (this === other) return true

frontend/src/main/kotlin/compiler/binding/basetype/BoundBaseTypeMemberVariable.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import compiler.diagnostic.decoratingMemberVariableWithoutConstructorInitializat
3434
import compiler.diagnostic.quoteIdentifier
3535
import compiler.lexer.Span
3636
import io.github.tmarsteel.emerge.backend.api.ir.IrClass
37+
import io.github.tmarsteel.emerge.backend.api.ir.IrSourceLocation
3738
import io.github.tmarsteel.emerge.backend.api.ir.IrType
3839

3940
class BoundBaseTypeMemberVariable(
@@ -127,7 +128,7 @@ class BoundBaseTypeMemberVariable(
127128
override fun toStringForErrorMessage() = "member variable ${name.quoteIdentifier()}"
128129

129130
private val _backendIr by lazy {
130-
IrClassMemberVariableImpl(name, type!!.toBackendIr(), field.id)
131+
IrClassMemberVariableImpl(name, type!!.toBackendIr(), field.id, declaredAt)
131132
}
132133
fun toBackendIr(): IrClass.MemberVariable = _backendIr
133134

@@ -138,6 +139,7 @@ private class IrClassMemberVariableImpl(
138139
override val name: String,
139140
override val type: IrType,
140141
private val fieldId: Int,
142+
override val declaredAt: IrSourceLocation,
141143
) : IrClass.MemberVariable {
142144
override val readStrategy = object : IrClass.MemberVariable.AccessStrategy.BareField {
143145
override val fieldId: Int = this@IrClassMemberVariableImpl.fieldId

0 commit comments

Comments
 (0)