aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/Driver.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/firrtl/Driver.scala')
-rw-r--r--src/main/scala/firrtl/Driver.scala25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/main/scala/firrtl/Driver.scala b/src/main/scala/firrtl/Driver.scala
index 3ff465e2..f9ba6141 100644
--- a/src/main/scala/firrtl/Driver.scala
+++ b/src/main/scala/firrtl/Driver.scala
@@ -116,23 +116,22 @@ object Driver {
val loadedAnnos = annoFiles.flatMap { file =>
if (!file.exists) {
- throw new FileNotFoundException(s"Annotation file $file not found!")
+ throw new AnnotationFileNotFoundException(file)
}
// Try new protocol first
- JsonProtocol.deserializeTry(file).getOrElse {
- val annos = Try {
+ JsonProtocol.deserializeTry(file).recoverWith { case jsonException =>
+ // Try old protocol if new one fails
+ Try {
val yaml = io.Source.fromFile(file).getLines().mkString("\n").parseYaml
- yaml.convertTo[List[LegacyAnnotation]]
+ val result = yaml.convertTo[List[LegacyAnnotation]]
+ val msg = s"$file is a YAML file!\n" +
+ (" "*9) + "YAML Annotation files are deprecated! Use JSON"
+ Driver.dramaticWarning(msg)
+ result
+ }.orElse { // Propagate original JsonProtocol exception if YAML also fails
+ Failure(jsonException)
}
- annos match {
- case Success(result) =>
- val msg = s"$file is a YAML file!\n" +
- (" "*9) + "YAML Annotation files are deprecated! Use JSON"
- Driver.dramaticWarning(msg)
- result
- case Failure(_) => throw new InvalidAnnotationFileException(file.toString)
- }
- }
+ }.get
}
val targetDirAnno = List(BlackBoxTargetDirAnno(optionsManager.targetDirName))