Skip to content

Commit b044735

Browse files
committed
Improve handling of macros and parse failures
1 parent 3badc3f commit b044735

7 files changed

Lines changed: 520 additions & 508 deletions

File tree

src/main/scala/viper/silver/cfg/CfgTest.scala

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ package viper.silver.cfg
88

99
import java.nio.file.{Files, Path, Paths}
1010

11-
import fastparse._
1211
import viper.silver.parser.{FastParser, PProgram, Resolver, Translator}
1312
import viper.silver.verifier.ParseWarning
1413

@@ -36,12 +35,8 @@ object CfgTest {
3635
}
3736

3837
private def parse(input: String, file: Path): Option[PProgram] = {
39-
val result = new FastParser().parse(input, file)
40-
result match {
41-
case Parsed.Success(program@PProgram(_, _, _, _, _, _, _,_, errors), _) =>
42-
if (errors.isEmpty || errors.forall(_.isInstanceOf[ParseWarning])) Some(program)
43-
else None
44-
case _ => None
45-
}
38+
val program = new FastParser().parse(input, file)
39+
if (program.errors.forall(_.isInstanceOf[ParseWarning])) Some(program)
40+
else None
4641
}
4742
}

src/main/scala/viper/silver/frontend/SilFrontend.scala

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77
package viper.silver.frontend
88

99
import viper.silver.ast.utility.Consistency
10-
import viper.silver.ast.{SourcePosition, _}
10+
import viper.silver.ast._
1111
import viper.silver.parser._
1212
import viper.silver.plugin.SilverPluginManager
1313
import viper.silver.plugin.SilverPluginManager.PluginException
1414
import viper.silver.reporter._
1515
import viper.silver.verifier._
16-
import fastparse.Parsed
1716
import java.nio.file.{Path, Paths}
1817
import viper.silver.FastMessaging
1918

@@ -266,22 +265,11 @@ trait SilFrontend extends DefaultFrontend {
266265
plugins.beforeParse(input, isImported = false) match {
267266
case Some(inputPlugin) =>
268267
val result = fp.parse(inputPlugin, file, Some(plugins))
269-
result match {
270-
case Parsed.Success(e@ PProgram(_, _, _, _, _, _, _, _, err_list), _) =>
271-
if (err_list.isEmpty || err_list.forall(p => p.isInstanceOf[ParseWarning])) {
272-
reporter report WarningsDuringParsing(err_list)
273-
Succ({e.initProperties(); e})
274-
}
275-
else Fail(err_list)
276-
case fail @ Parsed.Failure(_, index, _) =>
277-
val msg = fail.trace().aggregateMsg
278-
val (line, col) = fp.lineCol.getPos(index)
279-
Fail(List(ParseError(msg, SourcePosition(file, line, col))))
280-
//? val pos = extra.input.prettyIndex(index).split(":").map(_.toInt)
281-
//? Fail(List(ParseError(s"Expected $msg", SourcePosition(file, pos(0), pos(1)))))
282-
case error: ParseError => Fail(List(error))
283-
}
284-
268+
if (result.errors.forall(p => p.isInstanceOf[ParseWarning])) {
269+
reporter report WarningsDuringParsing(result.errors)
270+
Succ({result.initProperties(); result})
271+
}
272+
else Fail(result.errors)
285273
case None => Fail(plugins.errors)
286274
}
287275
}

0 commit comments

Comments
 (0)