X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=scheme.forth.jl.git;a=blobdiff_plain;f=src%2Fscheme.4th;h=af4157fac16d3c17c3e9a42b4ae192ad8fd3047a;hp=7b1da05b8ca27532a6acb014b23f2df39b34c737;hb=7173757033eb0681ee1c7ed5df7936e5860345a6;hpb=6cb77062c9190c13f9b9e2de245412971209c579 diff --git a/src/scheme.4th b/src/scheme.4th index 7b1da05..af4157f 100644 --- a/src/scheme.4th +++ b/src/scheme.4th @@ -1273,6 +1273,11 @@ parse-idx-stack parse-idx-sp ! exit then + nextchar [char] ) = if + inc-parse-idx + except-message: ." unmatched closing parenthesis." recoverable-exception throw + then + \ Anything else is parsed as a symbol readsymbol charlist>symbol @@ -1286,7 +1291,7 @@ parse-idx-stack parse-idx-sp ! \ }}} -\ ---- Eval ---- {{{ +\ ---- Syntax ---- {{{ : self-evaluating? ( obj -- obj bool ) boolean-type istype? if true exit then @@ -1449,7 +1454,7 @@ parse-idx-stack parse-idx-sp ! \ }}} -\ ---- Analyze ---- +\ ---- Analyze ---- {{{ : evaluate-eproc ( eproc env --- res ) @@ -1636,15 +1641,7 @@ parse-idx-stack parse-idx-sp ! then ; -: application-executor ( operator-proc arg-procs env -- res ) - 2rot 2over ( aprocs env fproc env ) - evaluate-eproc ( aprocs env proc ) - - -2rot 2swap ( proc env aprocs ) - evaluate-operand-eprocs ( proc vals ) - - 2swap ( vals proc ) - +: apply ( vals proc ) dup case primitive-proc-type of drop execute @@ -1668,6 +1665,18 @@ parse-idx-stack parse-idx-sp ! endcase ; +: application-executor ( operator-proc arg-procs env -- res ) + 2rot 2over ( aprocs env fproc env ) + evaluate-eproc ( aprocs env proc ) + + -2rot 2swap ( proc env aprocs ) + evaluate-operand-eprocs ( proc vals ) + + 2swap ( vals proc ) + + ['] apply goto +; + : analyze-application ( exp -- eproc ) 2dup operator analyze 2swap operands operand-eproc-list @@ -1700,6 +1709,7 @@ parse-idx-stack parse-idx-sp ! ; is analyze +\ }}} \ ---- Macro Expansion ---- {{{