@@ -37,6 +37,9 @@ import qualified Data.Text.IO as Text (
3737 )
3838import qualified GHC.Generics as GHC
3939import GlobalMain
40+ import Kore.Attribute.Definition (
41+ KFileLocations (.. ),
42+ )
4043import Kore.Attribute.Symbol as Attribute
4144import Kore.BugReport
4245import Kore.Exec
@@ -584,7 +587,7 @@ mainWithOptions execOptions = do
584587 }
585588 writeOptionsAndKoreFiles tmpDir execOptions'
586589 e <-
587- mainDispatch execOptions' <* warnIfLowProductivity
590+ mainDispatch execOptions'
588591 & handle handleWithConfiguration
589592 & handle handleSomeException
590593 & runKoreLog tmpDir koreLogOptions
@@ -618,23 +621,34 @@ mainWithOptions execOptions = do
618621
619622-- | Dispatch the requested command, for example 'koreProve' or 'koreRun'.
620623mainDispatch :: KoreExecOptions -> Main ExitCode
621- mainDispatch execOptions
622- | Just proveOptions@ KoreProveOptions {bmc} <- koreProveOptions =
623- if bmc
624- then koreBmc execOptions proveOptions
625- else koreProve execOptions proveOptions
626- | Just searchOptions <- koreSearchOptions =
627- koreSearch execOptions searchOptions
628- | Just mergeOptions <- koreMergeOptions =
629- koreMerge execOptions mergeOptions
630- | otherwise =
631- koreRun execOptions
624+ mainDispatch = warnProductivity . mainDispatchWorker
632625 where
633- KoreExecOptions {koreProveOptions} = execOptions
634- KoreExecOptions {koreSearchOptions} = execOptions
635- KoreExecOptions {koreMergeOptions} = execOptions
626+ warnProductivity :: Main (KFileLocations , ExitCode ) -> Main ExitCode
627+ warnProductivity action = do
628+ (kFileLocations, exitCode) <- action
629+ warnIfLowProductivity kFileLocations
630+ return exitCode
631+ mainDispatchWorker :: KoreExecOptions -> Main (KFileLocations , ExitCode )
632+ mainDispatchWorker execOptions
633+ | Just proveOptions@ KoreProveOptions {bmc} <- koreProveOptions =
634+ if bmc
635+ then koreBmc execOptions proveOptions
636+ else koreProve execOptions proveOptions
637+ | Just searchOptions <- koreSearchOptions =
638+ koreSearch execOptions searchOptions
639+ | Just mergeOptions <- koreMergeOptions =
640+ koreMerge execOptions mergeOptions
641+ | otherwise =
642+ koreRun execOptions
643+ where
644+ KoreExecOptions {koreProveOptions} = execOptions
645+ KoreExecOptions {koreSearchOptions} = execOptions
646+ KoreExecOptions {koreMergeOptions} = execOptions
636647
637- koreSearch :: KoreExecOptions -> KoreSearchOptions -> Main ExitCode
648+ koreSearch ::
649+ KoreExecOptions ->
650+ KoreSearchOptions ->
651+ Main (KFileLocations , ExitCode )
638652koreSearch execOptions searchOptions = do
639653 let KoreExecOptions {definitionFileName} = execOptions
640654 definition <- loadDefinitions [definitionFileName]
@@ -648,13 +662,13 @@ koreSearch execOptions searchOptions = do
648662 execute execOptions mainModule $
649663 search depthLimit breadthLimit mainModule initial target config
650664 lift $ renderResult execOptions (unparse final)
651- return ExitSuccess
665+ return (kFileLocations definition, ExitSuccess )
652666 where
653667 KoreSearchOptions {bound, searchType} = searchOptions
654668 config = Search. Config {bound, searchType}
655669 KoreExecOptions {breadthLimit, depthLimit} = execOptions
656670
657- koreRun :: KoreExecOptions -> Main ExitCode
671+ koreRun :: KoreExecOptions -> Main ( KFileLocations , ExitCode )
658672koreRun execOptions = do
659673 let KoreExecOptions {definitionFileName} = execOptions
660674 definition <- loadDefinitions [definitionFileName]
@@ -666,11 +680,14 @@ koreRun execOptions = do
666680 execute execOptions mainModule $
667681 exec depthLimit breadthLimit mainModule strategy initial
668682 lift $ renderResult execOptions (unparse final)
669- return exitCode
683+ return (kFileLocations definition, exitCode)
670684 where
671685 KoreExecOptions {breadthLimit, depthLimit, strategy} = execOptions
672686
673- koreProve :: KoreExecOptions -> KoreProveOptions -> Main ExitCode
687+ koreProve ::
688+ KoreExecOptions ->
689+ KoreProveOptions ->
690+ Main (KFileLocations , ExitCode )
674691koreProve execOptions proveOptions = do
675692 let KoreExecOptions {definitionFileName} = execOptions
676693 KoreProveOptions {specFileName} = proveOptions
@@ -707,7 +724,7 @@ koreProve execOptions proveOptions = do
707724 getRewritingPattern . getConfiguration . getStuckClaim
708725 lift $ for_ saveProofs $ saveProven specModule provenClaims
709726 lift $ renderResult execOptions (unparse final)
710- return exitCode
727+ return (kFileLocations definition, exitCode)
711728 where
712729 failure pat = (ExitFailure 1 , pat)
713730 success :: (ExitCode , TermLike VariableName )
@@ -768,7 +785,10 @@ koreProve execOptions proveOptions = do
768785 , definitionModules = [provenModule]
769786 }
770787
771- koreBmc :: KoreExecOptions -> KoreProveOptions -> Main ExitCode
788+ koreBmc ::
789+ KoreExecOptions ->
790+ KoreProveOptions ->
791+ Main (KFileLocations , ExitCode )
772792koreBmc execOptions proveOptions = do
773793 let KoreExecOptions {definitionFileName} = execOptions
774794 KoreProveOptions {specFileName} = proveOptions
@@ -794,12 +814,15 @@ koreBmc execOptions proveOptions = do
794814 return success
795815 Bounded. Failed final -> return (failure final)
796816 lift $ renderResult execOptions (unparse final)
797- return exitCode
817+ return (kFileLocations definition, exitCode)
798818 where
799819 failure pat = (ExitFailure 1 , pat)
800820 success = (ExitSuccess , mkTop $ mkSortVariable " R" )
801821
802- koreMerge :: KoreExecOptions -> KoreMergeOptions -> Main ExitCode
822+ koreMerge ::
823+ KoreExecOptions ->
824+ KoreMergeOptions ->
825+ Main (KFileLocations , ExitCode )
803826koreMerge execOptions mergeOptions = do
804827 let KoreExecOptions {definitionFileName} = execOptions
805828 definition <- loadDefinitions [definitionFileName]
@@ -816,12 +839,12 @@ koreMerge execOptions mergeOptions = do
816839 case eitherMergedRule of
817840 (Left err) -> do
818841 lift $ Text. hPutStrLn stderr err
819- return (ExitFailure 1 )
842+ return (kFileLocations definition, ExitFailure 1 )
820843 (Right mergedRule) -> do
821844 let mergedRule' =
822845 mergedRule <&> mapRuleVariables getRewritingVariable
823846 lift $ renderResult execOptions (vsep (map unparse mergedRule'))
824- return ExitSuccess
847+ return (kFileLocations definition, ExitSuccess )
825848
826849loadRuleIds :: FilePath -> IO [Text ]
827850loadRuleIds fileName = do
0 commit comments