33from typing import Callable , Optional , Tuple
44
55from mathics .core .definitions import SIDE_EFFECT_BUILTINS , Definition
6- from mathics .core .element import BaseElement
6+ from mathics .core .element import BaseElement , EvalMixin
77from mathics .core .evaluation import Evaluation
88from mathics .core .expression import Expression , from_python
99from mathics .core .symbols import Symbol , SymbolFalse , SymbolTrue
@@ -47,8 +47,8 @@ def __init__(self, var):
4747
4848
4949def evaluate_without_side_effects (
50- expr : BaseElement , evaluation : Evaluation
51- ) -> BaseElement :
50+ expr : Expression , evaluation : Evaluation
51+ ) -> Expression :
5252 """
5353 Evaluate an expression leaving unevaluated subexpressions
5454 related with side-effects (assignments, loops).
@@ -69,7 +69,7 @@ def evaluate_without_side_effects(
6969 # Restore the definitions
7070 for name , defin in SIDE_EFFECT_BUILTINS .items ():
7171 definitions .builtin [name ] = defin
72- return result
72+ return result if result is not None else expr
7373
7474
7575def expression_to_callable (
@@ -84,7 +84,8 @@ def expression_to_callable(
8484 args: a list of CompileArg elements
8585 evaluation: an Evaluation object used if the llvm compilation fails
8686 """
87- expr = evaluate_without_side_effects (expr , evaluation )
87+ if evaluation is not None :
88+ expr = evaluate_without_side_effects (expr , evaluation )
8889 try :
8990 cfunc = _compile (expr , args ) if (use_llvm and args is not None ) else None
9091 except CompileError :
0 commit comments