fix: variable-sized values, heap-allocated arrays (and printCharArray)

This commit is contained in:
2025-02-27 14:48:24 +00:00
parent 58df1d7bb9
commit 887b982331
8 changed files with 185 additions and 238 deletions

View File

@@ -11,8 +11,8 @@ object sizeExtensions {
def heapSize: Int = (expr, expr.ty) match {
case (ArrayLiter(elems), KnownType.Array(KnownType.Char)) =>
KnownType.Int.size.toInt + elems.size.toInt * KnownType.Char.size.toInt
case (ArrayLiter(elems), _) =>
KnownType.Int.size.toInt + elems.map(_.ty.size.toInt).sum
case (ArrayLiter(elems), ty) =>
KnownType.Int.size.toInt + elems.size * ty.elemSize.toInt
case _ => expr.ty.size.toInt
}
}
@@ -25,5 +25,11 @@ object sizeExtensions {
case KnownType.Bool | KnownType.Char => Size.B8
case KnownType.String | KnownType.Array(_) | KnownType.Pair(_, _) | ? => Size.Q64
}
def elemSize: Size = ty match {
case KnownType.Array(elem) => elem.size
case KnownType.Pair(_, _) => Size.Q64
case _ => ty.size
}
}
}