Enhanced ExecutionContext to keep track of the execution flow

This commit is contained in:
2020-01-07 15:47:43 +01:00
parent ffd98d7407
commit b4346b5af0
19 changed files with 966 additions and 190 deletions
+6 -3
View File
@@ -32,9 +32,12 @@ class AddConceptInSetEvaluator(OneReturnValueEvaluator):
self.name,
True,
sheerka.new(BuiltinConcepts.USER_INPUT, body=name_node.tokens, user_name="N/A"))
sub_context = context.push(desc=f"Recognizing '{name_node}'")
r = sheerka.execute(sub_context, ret_val, ALL_STEPS, self.verbose_log)
return core.builtin_helpers.expect_one(context, r)
with context.push(desc=f"Recognizing '{name_node}'") as sub_context:
r = sheerka.execute(sub_context, ret_val, ALL_STEPS, self.verbose_log)
one_r = core.builtin_helpers.expect_one(context, r)
sub_context.add_values(return_values=one_r)
return one_r
isa_node = return_value.value.value
sheerka = context.sheerka
+11 -12
View File
@@ -66,18 +66,21 @@ class ConceptComposerEvaluator(AllReturnValuesEvaluator):
if sheerka.isinstance(concept, BuiltinConcepts.UNKNOWN_CONCEPT):
has_error = True
else:
sub_context = context.push(self.name, desc=f"Evaluating '{concept}'")
sub_context.log_new(self.verbose_log)
concept = sheerka.evaluate_concept(sub_context, concept, self.verbose_log)
temp_res.append(concept)
with context.push(self.name, desc=f"Evaluating '{concept}'") as sub_context:
sub_context.log_new(self.verbose_log)
concept = sheerka.evaluate_concept(sub_context, concept, self.verbose_log)
sub_context.add_values(return_values=concept)
temp_res.append(concept)
else:
temp_res.append(core.utils.strip_quotes(token.value))
concepts_only &= token.type == TokenKind.WHITESPACE or token.type == TokenKind.NEWLINE
else:
sub_context = context.push(self.name, desc=f"Evaluating '{node.concept}'")
sub_context.log_new(self.verbose_log)
concept = sheerka.evaluate_concept(sub_context, node.concept, self.verbose_log)
temp_res.append(concept)
with context.push(self.name, desc=f"Evaluating '{node.concept}'") as sub_context:
sub_context.log_new(self.verbose_log)
concept = sheerka.evaluate_concept(sub_context, node.concept, self.verbose_log)
sub_context.add_values(return_values=concept)
temp_res.append(concept)
if has_error:
return sheerka.ret(
@@ -104,7 +107,3 @@ class ConceptComposerEvaluator(AllReturnValuesEvaluator):
True,
res,
parents=[self.eaten])
+8 -7
View File
@@ -94,14 +94,15 @@ class PythonEvaluator(OneReturnValueEvaluator):
continue
context.log(self.verbose_log, f"'{name_resolved}' is a concept. Evaluating.", self.name)
sub_context = context.push(self.name, desc=f"Evaluating '{concept}'", obj=concept)
sub_context.log_new(self.verbose_log)
evaluated = context.sheerka.evaluate_concept(sub_context, concept, self.verbose_log)
with context.push(self.name, desc=f"Evaluating '{concept}'", obj=concept) as sub_context:
sub_context.log_new(self.verbose_log)
evaluated = context.sheerka.evaluate_concept(sub_context, concept, self.verbose_log)
sub_context.add_values(return_values=evaluated)
if evaluated.key == concept.key:
my_locals[name] = evaluated if return_concept else \
evaluated.body if ConceptParts.BODY in evaluated.cached_asts else \
evaluated
if evaluated.key == concept.key:
my_locals[name] = evaluated if return_concept else \
evaluated.body if ConceptParts.BODY in evaluated.cached_asts else \
evaluated
if self.locals:
my_locals.update(self.locals)