|
@@ -15,30 +15,32 @@ class GeneratorStackEntry(object):
|
|
|
self.function_origin = None
|
|
|
self.pending_requests = None
|
|
|
self.finished_requests = True
|
|
|
- self.replies = []
|
|
|
- self.has_reply = False
|
|
|
+ self.replies = None
|
|
|
|
|
|
def append_reply(self, new_reply):
|
|
|
"""Appends a reply to the this entry's list of pending replies."""
|
|
|
- self.replies.append(new_reply)
|
|
|
- self.has_reply = True
|
|
|
+ if self.replies is None:
|
|
|
+ self.replies = [new_reply]
|
|
|
+ else:
|
|
|
+ self.replies.append(new_reply)
|
|
|
|
|
|
def extend_replies(self, new_replies):
|
|
|
"""Appends a list of replies to this entry's list of pending replies."""
|
|
|
if new_replies is not None:
|
|
|
- self.replies.extend(new_replies)
|
|
|
- self.has_reply = True
|
|
|
+ if self.replies is None:
|
|
|
+ self.replies = new_replies
|
|
|
+ else:
|
|
|
+ self.replies.extend(new_replies)
|
|
|
|
|
|
def step(self):
|
|
|
"""Performs a single step: accumulated replies are fed to the generator,
|
|
|
which then produces requests."""
|
|
|
# Send the replies to the generator, and ask for new requests.
|
|
|
- self.pending_requests = self.generator.send(self.replies if self.has_reply else None)
|
|
|
+ self.pending_requests = self.generator.send(self.replies)
|
|
|
|
|
|
# Reset some data structures.
|
|
|
self.finished_requests = False
|
|
|
- self.replies = []
|
|
|
- self.has_reply = False
|
|
|
+ self.replies = None
|
|
|
|
|
|
def format_stack_trace(stack_trace):
|
|
|
"""Formats a list of (function name, debug info, origin) triples."""
|
|
@@ -95,6 +97,7 @@ class RequestHandler(object):
|
|
|
# Silence pylint's warning about catching Exception.
|
|
|
# pylint: disable=I0011,W0703
|
|
|
try:
|
|
|
+ """
|
|
|
if self.has_pending_requests():
|
|
|
try:
|
|
|
# Try to pop a request for the modelverse state.
|
|
@@ -105,7 +108,16 @@ class RequestHandler(object):
|
|
|
|
|
|
if not self.has_pending_requests():
|
|
|
# Perform a single generator step.
|
|
|
- self.step()
|
|
|
+ self.generator_stack[-1].step()
|
|
|
+ """
|
|
|
+ if self.has_pending_requests():
|
|
|
+ try:
|
|
|
+ return self.pop_requests()
|
|
|
+ except KnownRequestHandled:
|
|
|
+ pass
|
|
|
+ else:
|
|
|
+ self.generator_stack[-1].step()
|
|
|
+
|
|
|
except StopIteration:
|
|
|
# Done, so remove the generator
|
|
|
self.pop_generator()
|
|
@@ -174,11 +186,6 @@ class RequestHandler(object):
|
|
|
"""Appends a list of replies to the top-of-stack generator's list of pending replies."""
|
|
|
self.generator_stack[-1].extend_replies(new_replies)
|
|
|
|
|
|
- def step(self):
|
|
|
- """Performs a single step: accumulated replies are fed to the generator,
|
|
|
- which then produces requests."""
|
|
|
- self.generator_stack[-1].step()
|
|
|
-
|
|
|
def handle_exception(self, exception):
|
|
|
"""Handles the given exception. A Boolean is returned that tells if
|
|
|
the exception was handled."""
|