fix: use apply() instead of get() for Maps

This commit is contained in:
Gleb Koval 2025-02-05 18:04:04 +00:00 committed by Barf-Vader
parent 30cf42ee3a
commit ae9625b586

View File

@ -120,12 +120,15 @@ object renamer {
globalNumbering: mutable.Map[String, Int], globalNumbering: mutable.Map[String, Int],
errors: mutable.Builder[Error, List[Error]] errors: mutable.Builder[Error, List[Error]]
): Unit = { ): Unit = {
scope.current.withDefault(scope.parent).get((ident.v, identType)) match { // Unfortunately map defaults only work with `.apply()`, which throws an error when the key is not found.
case Some(Ident(_, uid)) => ident.uid = uid // Neither is there a way to check whether a default exists, so we have to use a try-catch.
case None => { try {
val Ident(_, uid) = scope.current.withDefault(scope.parent)((ident.v, identType))
ident.uid = uid
} catch {
case _: NoSuchElementException =>
errors += Error.UndefinedIdentifier(ident, identType) errors += Error.UndefinedIdentifier(ident, identType)
scope.add(?, ident, identType) scope.add(?, ident, identType)
} }
} }
}
} }