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