From 9f7f099b23ae779ae178da642a852e2065c6d99b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=C3=A1=C5=A1=20Fiala?= Date: Tue, 16 Jan 2024 15:23:41 +0100 Subject: [PATCH] Fix update --- silver | 2 +- src/main/scala/extensions/TryBlockParserPlugin.scala | 11 ++++------- src/main/scala/extensions/TryBlockStmt.scala | 11 +++++++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/silver b/silver index 00611a702..db6534214 160000 --- a/silver +++ b/silver @@ -1 +1 @@ -Subproject commit 00611a7026dcf8cd495647655e781fe74a0702da +Subproject commit db65342143fa51c4ca304b75f5377a7286ee0c81 diff --git a/src/main/scala/extensions/TryBlockParserPlugin.scala b/src/main/scala/extensions/TryBlockParserPlugin.scala index c69947911..33681fc22 100644 --- a/src/main/scala/extensions/TryBlockParserPlugin.scala +++ b/src/main/scala/extensions/TryBlockParserPlugin.scala @@ -11,16 +11,13 @@ import viper.silver.plugin.{ParserPluginTemplate, SilverPlugin} class TryBlockParserPlugin(fp: FastParser) extends SilverPlugin with ParserPluginTemplate { import fastparse._ - import viper.silver.parser.FastParserCompanion.whitespace - import fp.{FP, stmtBlock, ParserExtension} + import viper.silver.parser.FastParserCompanion.{PositionParsing, reservedKw, whitespace} + import fp.{ParserExtension, lineCol, _file, stmtBlock} - - private val tryKeyword = "try" - - def tryBlock[_:P]: P[PTryBlock] =FP("try" ~/ stmtBlock) map { case (pos, s) => PTryBlock(s)(pos) } + def tryBlock[$: P]: P[PTryBlock] = P((P(PTryKeyword) ~ stmtBlock()) map (PTryBlock.apply _).tupled).pos override def beforeParse(input: String, isImported: Boolean): String = { - ParserExtension.addNewKeywords(Set(tryKeyword)) + ParserExtension.addNewKeywords(Set(PTryKeyword.keyword)) ParserExtension.addNewStmtAtEnd(tryBlock(_)) input diff --git a/src/main/scala/extensions/TryBlockStmt.scala b/src/main/scala/extensions/TryBlockStmt.scala index 917330736..0ffa67901 100644 --- a/src/main/scala/extensions/TryBlockStmt.scala +++ b/src/main/scala/extensions/TryBlockStmt.scala @@ -8,9 +8,16 @@ package viper.silicon.extensions import viper.silver.ast._ import viper.silver.ast.pretty.PrettyPrintPrimitives -import viper.silver.parser.{NameAnalyser, PExtender, PNode, PStmt, Translator, TypeChecker} +import viper.silver.parser.{NameAnalyser, PExtender, PNode, PStmt, Translator, TypeChecker, PKw, PKeywordStmt, PReserved} +import viper.silver.ast.utility.lsp.BuiltinFeature -final case class PTryBlock(body: PStmt)(val pos: (Position, Position) = (NoPosition, NoPosition)) extends PExtender with PStmt { +/** Keyword used to define `try` statement. */ +case object PTryKeyword extends PKw("try", TODOTryDoc) with PKeywordStmt +case object TODOTryDoc extends BuiltinFeature( + """TODO""".stripMargin.replaceAll("\n", " ") +) + +final case class PTryBlock(kw: PReserved[PTryKeyword.type], body: PStmt)(val pos: (Position, Position) = (NoPosition, NoPosition)) extends PExtender with PStmt { override val getSubnodes: Seq[PNode] = Seq(body) override def translateStmt(translator: Translator): Stmt = {