mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 05:39:18 +02:00
Adding a sample repl server.
This commit is contained in:
parent
01178a8eda
commit
de04fc85bc
1 changed files with 26 additions and 0 deletions
26
examples/repl-server.scm
Normal file
26
examples/repl-server.scm
Normal file
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env chibi-scheme
|
||||
|
||||
(import (scheme base) (scheme read) (scheme write) (scheme eval)
|
||||
(chibi net) (chibi net server))
|
||||
|
||||
(define (repl-handler in out sock addr)
|
||||
(let ((env (environment '(scheme base)
|
||||
'(only (chibi) import))))
|
||||
(let lp ()
|
||||
(let ((expr (read in)))
|
||||
(cond
|
||||
((not (eof-object? expr))
|
||||
(let ((result (guard (exn (else
|
||||
(display "ERROR: " out)
|
||||
(write exn out)
|
||||
(newline out)
|
||||
(if #f #f)))
|
||||
(eval expr env))))
|
||||
(cond
|
||||
((not (eq? result (if #f #f)))
|
||||
(write result out)
|
||||
(newline out)))
|
||||
(flush-output-port out)
|
||||
(lp))))))))
|
||||
|
||||
(run-net-server 5556 repl-handler)
|
Loading…
Add table
Reference in a new issue