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