This is part of some experimental code that I am writing to implement the FriCAS interpreter using SPAD code. For an overview of this experiment see page here. For information about how this is done using the current boot/lisp code see the page here.
The last stage (the type matcher) has generated an typed tree of values. Here we need to evaluate where possible.
Not sure how to do this.
From i-eval.boot:
(1) -> evalDomain(Integer)$Lisp INFO: Control stack guard page unprotected Control stack guard page temporarily disabled: proceed with caution >> System error: Control stack exhausted (no more space for function call frames). This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away. PROCEED WITH CAUTION. (1) -> evaluateType(Integer)$Lisp (1) () Type: SExpression (2) -> evaluateType(1)$Lisp (2) () Type: SExpression (3) -> |
(1) -> a:SExpression := 1 (1) 1 Type: SExpression (2) -> b:SExpression := 2 (2) 2 Type: SExpression (3) -> FUNCALL(*,a)$Lisp (3) 1 Type: SExpression (4) -> FUNCALL(*,a,b)$Lisp (4) 2 Type: SExpression (6) -> FUNCALL(+,a,b)$Lisp (6) 3 Type: SExpression (7) -> |
Next step
The output of this evaluater is passed to the formatter as discussed on the page here.