summaryrefslogtreecommitdiffstats
path: root/autoload/smt2/solver.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/smt2/solver.vim')
-rw-r--r--autoload/smt2/solver.vim56
1 files changed, 56 insertions, 0 deletions
diff --git a/autoload/smt2/solver.vim b/autoload/smt2/solver.vim
new file mode 100644
index 00000000..39e7d477
--- /dev/null
+++ b/autoload/smt2/solver.vim
@@ -0,0 +1,56 @@
+if polyglot#init#is_disabled(expand('<sfile>:p'), 'smt2', 'autoload/smt2/solver.vim')
+ finish
+endif
+
+" ------------------------------------------------------------------------------
+" Config
+" ------------------------------------------------------------------------------
+" If no command for invoking a solver is specified in ~/.vimrc, test if either
+" 'z3' or 'boolector' is accessible through $PATH (in that order)
+if !exists("g:smt2_solver_command")
+ if executable("z3")
+ let g:smt2_solver_command = "z3"
+ elseif executable("boolector")
+ let g:smt2_solver_command = "boolector"
+ endif
+endif
+
+" If no command line switch for printing the solver's version is specified in
+" ~/.vimrc, use '--version'
+if !exists("g:smt2_solver_version_switch")
+ let g:smt2_solver_version_switch = "--version"
+endif
+
+" ------------------------------------------------------------------------------
+" Public functions
+" ------------------------------------------------------------------------------
+" Invokes the solver on current file
+function! smt2#solver#Run()
+ silent !clear
+ execute "!" . g:smt2_solver_command . " " . bufname("%")
+endfunction
+
+" Puts the solver's output in new split (replaces old split)
+function! smt2#solver#RunAndShowResult()
+ let output = system(g:smt2_solver_command . " " . bufname("%") . " 2>&1")
+
+ " Create split (or reuse existent)
+ if exists("s:outputbufnr") && bufwinnr(s:outputbufnr) > 0
+ execute bufwinnr(s:outputbufnr) . 'wincmd w'
+ else
+ silent! vnew
+ let s:outputbufnr=bufnr('%')
+ endif
+
+ " Clear & (re-)fill contents
+ silent! normal! ggdG
+ setlocal filetype=smt2 buftype=nofile nobuflisted noswapfile
+ call append(0, split(output, '\v\n'))
+ normal! gg
+endfunction
+
+" Requests the solver's version
+function! smt2#solver#PrintVersion()
+ silent !clear
+ execute "!" . g:smt2_solver_command . " " . g:smt2_solver_version_switch
+endfunction