Example #1
0
        public void ExecutionStepInWhenNextOperationIsNotAnExpression()
        {
            var host = new LispHost();

            host.RootFrame.FunctionReturned += (s, e) =>
            {
                if (e.Frame.FunctionSymbol.Value == "COMMON-LISP-USER:TEST-METHOD")
                {
                    e.HaltExecution = true;
                }
            };
            var evalResult = host.Eval(@"
(defun test-method ()
    (+ 1 2))
(test-method)
(+ 4 5)
");

            Assert.False(evalResult.ExecutionState.IsExecutionComplete);
            Assert.Equal(3, ((LispInteger)evalResult.LastResult).Value);
            Assert.Null(evalResult.ExecutionState.PeekCurrentExpression());

            host.StepIn(evalResult.ExecutionState); // nothing to step in to, so it's really step out _then_ step in
            Assert.False(evalResult.ExecutionState.IsExecutionComplete);
            Assert.Equal("s: 4", evalResult.ExecutionState.PeekOperation().ToString());

            host.EvalContinue(evalResult.ExecutionState);
            Assert.True(evalResult.ExecutionState.IsExecutionComplete);
            Assert.Equal(9, ((LispInteger)evalResult.LastResult).Value);;
        }
Example #2
0
        public void ExecutionCanStepIn(bool useTailCalls)
        {
            var host = new LispHost(useTailCalls: useTailCalls);

            host.AddFunction("NATIVE-FUNCTION", (host, executionState, args) =>
            {
                return(host.T);
            });
            var hasHalted = false;

            host.RootFrame.EvaluatingExpression += (s, e) =>
            {
                if (!hasHalted && e.Expression.ToString() == "(TEST-METHOD)")
                {
                    e.HaltExecution = true;
                    hasHalted       = true;
                }
            };
            var evalResult = host.Eval(@"
(defun test-method ()
    (native-function)
    (+ 1 1))
(test-method) ; initial halt here
");

            Assert.False(evalResult.ExecutionState.IsExecutionComplete);
            Assert.Equal("s: (TEST-METHOD)", evalResult.ExecutionState.PeekOperation().ToString());

            host.StepIn(evalResult.ExecutionState);
            Assert.False(evalResult.ExecutionState.IsExecutionComplete);
            Assert.Equal("s: (NATIVE-FUNCTION)", evalResult.ExecutionState.PeekOperation().ToString());

            host.StepIn(evalResult.ExecutionState); // can't step in to a native function; this is really a step over
            Assert.False(evalResult.ExecutionState.IsExecutionComplete);
            Assert.Equal("s: (+ 1 1)", evalResult.ExecutionState.PeekOperation().ToString());
        }