From 1288fc0b7ea52de309e2475a68631055962746be Mon Sep 17 00:00:00 2001 From: Philippe Suter <philippe.suter@gmail.com> Date: Thu, 13 Dec 2012 09:31:30 +0100 Subject: [PATCH] One way of handling integer command line options. --- src/main/scala/leon/LeonOption.scala | 8 ++++++++ src/main/scala/leon/synthesis/SynthesisPhase.scala | 8 +++----- src/main/scala/leon/verification/AnalysisPhase.scala | 10 ++++------ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/scala/leon/LeonOption.scala b/src/main/scala/leon/LeonOption.scala index 4678772d2..1ad3cb99b 100644 --- a/src/main/scala/leon/LeonOption.scala +++ b/src/main/scala/leon/LeonOption.scala @@ -10,6 +10,14 @@ case class LeonFlagOption(name: String) extends LeonOption /** Options of the form --option=value. */ case class LeonValueOption(name: String, value: String) extends LeonOption { def splitList : Seq[String] = value.split(':').map(_.trim).filter(!_.isEmpty) + + def asInt(ctx : LeonContext) : Option[Int] = try { + Some(value.toInt) + } catch { + case _ : Throwable => + ctx.reporter.error("Option --%s takes an integer as value.".format(name)) + None + } } sealed abstract class LeonOptionDef { diff --git a/src/main/scala/leon/synthesis/SynthesisPhase.scala b/src/main/scala/leon/synthesis/SynthesisPhase.scala index 466abaf1d..028c7dcdd 100644 --- a/src/main/scala/leon/synthesis/SynthesisPhase.scala +++ b/src/main/scala/leon/synthesis/SynthesisPhase.scala @@ -47,12 +47,10 @@ object SynthesisPhase extends LeonPhase[Program, Program] { case None => ctx.reporter.fatalError("Unknown cost model: "+cm) } - case LeonValueOption("timeout", t) => - try { + case v @ LeonValueOption("timeout", _) => + v.asInt(ctx).foreach { t => options = options.copy(timeoutMs = Some(t.toLong)) - } catch { - case _: Throwable => - } + } case LeonFlagOption("firstonly") => options = options.copy(firstOnly = true) case LeonFlagOption("parallel") => diff --git a/src/main/scala/leon/verification/AnalysisPhase.scala b/src/main/scala/leon/verification/AnalysisPhase.scala index d88b73519..65e8dcce5 100644 --- a/src/main/scala/leon/verification/AnalysisPhase.scala +++ b/src/main/scala/leon/verification/AnalysisPhase.scala @@ -28,12 +28,10 @@ object AnalysisPhase extends LeonPhase[Program,VerificationReport] { for(opt <- ctx.options) opt match { case LeonValueOption("functions", ListValue(fs)) => functionsToAnalyse ++= fs - case LeonValueOption("timeout", t) => - try { - timeout = Some(t.toInt) - } catch { - case _: Throwable => - } + + case v @ LeonValueOption("timeout", _) => + timeout = v.asInt(ctx) + case _ => } -- GitLab