caffeine
01/02/2018, 2:15 PMprivate fun getValue(exp: Expression, needType: LLVMType, writer: MethodWriter) =
when (exp) {
is Expression.NumberConst -> {
when (needType) {
ctx.writer.I32 -> writer.i32(exp.value.toInt())
else -> TODO()
}
}
is Expression.GetStaticField -> {
val clazz = ctx.loader.load(exp.owner)!!
val field = clazz.globalFiels.find { it is JVMClass.JVMGlobalField && it.field.name == exp.field } ?: TODO("Can't find ${exp.field} in ${exp.owner}")
writer.loadGlobal(field)
}
is Expression.This -> writer.arg(0)
is Expression.GetLocalField -> {
val selfClass = ctx.loader.load(exp.owner.type)!!
val own = getValue(exp = exp.owner, writer = writer, needType = selfClass.struct) << тут ошибка
val fieldIndex = selfClass.struct.fieldIndex { it.field.name == exp.field }
val fieldPtr = writer.field_ptr(f = own, index = fieldIndex)
writer.load(fieldPtr)
}
else -> TODO()
}
ошибка компиляции:
Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly
.
ну да рекурсия. Ну а в чем дело то? )))