Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Krejsa <dan.krejsa@gmail.com>2009-09-13 22:56:14 (GMT)
committer Dan Krejsa <dan.krejsa@gmail.com>2009-09-13 22:56:14 (GMT)
commit8f3fe06142867c9f2d2015723d1bbc41dd0f01ca (patch)
treed65884ceca222622f829ed349336d471b9821c8b
parent7c34d620cea7c8589025e60f66976a410fcc121f (diff)
Initial support for stepping through a proof.
-rwxr-xr-xghilbert.py13
-rwxr-xr-xspock.py48
2 files changed, 44 insertions, 17 deletions
diff --git a/ghilbert.py b/ghilbert.py
index 19e7bef..cb4f106 100755
--- a/ghilbert.py
+++ b/ghilbert.py
@@ -1354,7 +1354,7 @@ class Ghilbert():
pip.proof.append(e)
- def add_thm(self, expr):
+ def add_thm(self, expr, stop_cond):
"""Initial processing for a thm statement
expr is the thm's s-expression
@@ -1445,7 +1445,10 @@ class Ghilbert():
pip.dvs = self.dv_canonical(expr, pip_vdict)
try:
- for j in xrange(len(expr[4])):
+ nsteps = len(expr[4])
+ for j in xrange(nsteps):
+ if j == stop_cond:
+ raise GhError(_("Step."))
step = expr[4][j]
self.thm_step(pip, step)
except GhError, x:
@@ -2150,7 +2153,7 @@ class Ghilbert():
self.interfaces[ifname] = child
self.push_history((Ghilbert.EXPORT, child, path))
- def read_proof_file_from_scanner(self, scanner, one_only):
+ def read_proof_file_from_scanner(self, scanner, stop_cond):
while (1):
self.pip = None
@@ -2164,7 +2167,7 @@ class Ghilbert():
raise VerifyError(
_("Expected s-expression (...) command argument"))
if word == 'thm':
- self.add_thm(sexpr)
+ self.add_thm(sexpr, stop_cond)
elif word == 'def':
self.add_def(sexpr)
elif word == 'var':
@@ -2183,7 +2186,7 @@ class Ghilbert():
self.log.warning(_("Skipping unknown command '%s'") % word)
scanner.set_good()
- if one_only:
+ if stop_cond >= -1:
break
diff --git a/spock.py b/spock.py
index e7b9e8f..151ab98 100755
--- a/spock.py
+++ b/spock.py
@@ -33,7 +33,7 @@ logger = logging.getLogger('Spock')
# files such as set_mm.gh that use exclusively ASCII identifiers.
#
-class SpockScanner:
+class SpockScanner(object):
def __init__(self, spock):
self.spock = spock # The Spock object
sb = self.sb = spock.source_buffer
@@ -159,9 +159,9 @@ class SpockBuffer(gtksourceview2.Buffer):
return True
-class Spock:
+class Spock(object):
- def verify(self, only_one):
+ def verify(self, stop_cond):
# If we don't have a Ghilbert object any more (probably we moved
# self.good_offset back to the start of the file), create a fresh one
if self.gh == None:
@@ -175,16 +175,16 @@ class Spock:
# Hmm, could make Spock support the Scanner API's (i.e. get_token())
# directly, would that be better?
- logger.debug ("SpockScanner")
+ #logger.debug ("SpockScanner")
scanner = SpockScanner(self)
gh = self.gh
err = None
start = None
try:
- logger.debug ("read_proof_file_from_scanner")
- gh.read_proof_file_from_scanner (scanner, only_one)
- logger.debug ("read_proof_file_from_scanner done")
+ #logger.debug ("read_proof_file_from_scanner")
+ gh.read_proof_file_from_scanner (scanner, stop_cond)
+ #logger.debug ("read_proof_file_from_scanner done")
self.good_offset = scanner.good_offset
self.tag_good()
self.statuslabel.set_text('OK')
@@ -218,6 +218,11 @@ class Spock:
print >> sys.stderr, "GhError"
(msg,) = x.args
+ if msg == _("Step."):
+ self.step = self.step + 1
+ else:
+ self.step = 0
+
if start != None:
self.source_buffer.select_range(start, end)
@@ -361,15 +366,27 @@ class Spock:
sv.grab_focus()
def verify_button_callback(self, widget, data=None):
- self.verify(False)
+ self.verify(-2)
+ self.step = 0
def verify_one_button_callback(self, widget, data=None):
- self.verify(True)
+ self.source_view.grab_focus()
+ self.verify(-1)
+ self.step = 0
if not self.error_set:
sv = self.source_view
it = self.source_buffer.get_iter_at_offset(self.good_offset)
sv.scroll_to_iter(it, 0.0)
+ def verify_step_button_callback(self, widget, data=None):
+ self.source_view.grab_focus()
+ self.verify(self.step)
+ if not self.error_set:
+ self.step = 0
+ sv = self.source_view
+ it = self.source_buffer.get_iter_at_offset(self.good_offset)
+ sv.scroll_to_iter(it, 0.0)
+
def search_stop(self, restorePos=False):
if self.searching:
self.searching = False
@@ -557,18 +574,25 @@ class Spock:
hbox = gtk.HBox()
- button = gtk.Button('_Verify')
+ button = gtk.Button(_('_Verify'))
button.set_property('use-underline', True)
button.connect('clicked', self.verify_button_callback)
button.show()
hbox.pack_start (button, expand=False)
- button = gtk.Button('_One')
+ button = gtk.Button(_('_One'))
button.set_property('use-underline', True)
button.connect('clicked', self.verify_one_button_callback)
button.show()
hbox.pack_start (button, expand=False)
+ button = gtk.Button(_('_Step'))
+ button.set_property('use-underline', True)
+ button.connect('clicked', self.verify_step_button_callback)
+ button.show()
+ hbox.pack_start (button, expand=False)
+ self.step = 0;
+
self.search_dir_forward = True
self.searching = False
entry = gtk.Entry()
@@ -653,7 +677,7 @@ class Spock:
print >> sys.stderr, "Spock read ", file_path
- self.verify(False)
+ self.verify(-2)
class SpockWindow(gtk.Window):
def __init__(self):