Fixed #18 : Parsing and evaluating Python
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
from core.BuiltinConcepts import BuiltinConcepts
|
||||
from core.ExecutionContext import ExecutionContext, ContextActions
|
||||
from core.ReturnValue import ReturnValue
|
||||
from core.error import ErrorContext
|
||||
from evaluators.base_evaluator import EvaluatorEvalResult, EvaluatorMatchResult, OneReturnValueEvaluator
|
||||
|
||||
|
||||
class PythonEvaluator(OneReturnValueEvaluator):
|
||||
NAME = "PythonEvaluator"
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(self.NAME, ContextActions.EVALUATION, 50)
|
||||
|
||||
def matches(self, context: ExecutionContext, return_value: ReturnValue) -> EvaluatorMatchResult:
|
||||
return EvaluatorMatchResult(return_value.status and
|
||||
context.sheerka.isinstance(return_value.value, BuiltinConcepts.PYTHON_CODE))
|
||||
|
||||
def eval(self, context: ExecutionContext,
|
||||
evaluation_context: object,
|
||||
return_value: ReturnValue) -> EvaluatorEvalResult:
|
||||
|
||||
sheerka = context.sheerka
|
||||
fragment = return_value.value.pf
|
||||
|
||||
evaluated = sheerka.evaluate_python(context, fragment)
|
||||
if isinstance(evaluated, ErrorContext):
|
||||
return EvaluatorEvalResult([ReturnValue(self.name, False, evaluated, parents=[return_value])],
|
||||
[])
|
||||
else:
|
||||
return EvaluatorEvalResult([ReturnValue(self.name, True, evaluated, parents=[return_value])],
|
||||
[return_value])
|
||||
Reference in New Issue
Block a user