Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit 2721ad5f authored by Eckhart Arnold's avatar Eckhart Arnold
Browse files

- bugfix history logging: now also logs cached matches

parent 35f247ac
......@@ -161,6 +161,12 @@ def add_parser_guard(parser_func):
def guarded_call(parser: 'Parser', text: str) -> Tuple[Node, str]:
try:
location = len(text)
grammar = parser.grammar # grammar may be 'None' for unconnected parsers!
if grammar.history_tracking:
grammar.call_stack.append(parser)
grammar.moving_forward = True
# if location has already been visited by the current parser,
# return saved result
if location in parser.visited:
......@@ -170,24 +176,10 @@ def add_parser_guard(parser_func):
return None, text
parser.recursion_counter[location] += 1
grammar = parser.grammar # grammar may be 'None' for unconnected parsers!
if grammar.history_tracking:
grammar.call_stack.append(parser)
grammar.moving_forward = True
# run original __call__ method
node, rest = parser_func(parser, text)
if grammar.history_tracking:
# don't track returning parsers except in case an error has occurred
if grammar.moving_forward or (node and node._errors):
grammar.moving_forward = False
record = HistoryRecord(grammar.call_stack.copy(), node, len(rest))
grammar.history.append(record)
# print(record.stack, record.status, rest[:20].replace('\n', '|'))
grammar.call_stack.pop()
if node is not None:
# in case of a recursive call saves the result of the first
# (or left-most) call that matches
......@@ -200,6 +192,15 @@ def add_parser_guard(parser_func):
parser.recursion_counter[location] -= 1
if grammar.history_tracking:
# don't track returning parsers except in case an error has occurred
if grammar.moving_forward or (node and node._errors):
grammar.moving_forward = False
record = HistoryRecord(grammar.call_stack.copy(), node, len(rest))
grammar.history.append(record)
# print(record.stack, record.status, rest[:20].replace('\n', '|'))
grammar.call_stack.pop()
except RecursionError:
node = Node(None, text[:min(10, max(1, text.find("\n")))] + " ...")
node.add_error("maximum recursion depth of parser reached; "
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment