forge: provide a simple REPL
This commit is contained in:
parent
a16f4c2417
commit
848160c2de
2 changed files with 20 additions and 1 deletions
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
(defpackage :scopes/forge
|
(defpackage :scopes/forge
|
||||||
(:use :common-lisp)
|
(:use :common-lisp)
|
||||||
(:export #:forge-env #:data-stack #:exec #:exec-str))
|
(:export #:forge-env #:data-stack #:exec #:exec-str #:repl))
|
||||||
|
|
||||||
(in-package :scopes/forge)
|
(in-package :scopes/forge)
|
||||||
|
|
||||||
|
@ -42,6 +42,10 @@
|
||||||
(let ((v (gethash k voc)))
|
(let ((v (gethash k voc)))
|
||||||
(if v (return v))))))
|
(if v (return v))))))
|
||||||
|
|
||||||
|
(defun repl (fe)
|
||||||
|
(do ((input (read-line) (read-line))) ((string= input "q") nil)
|
||||||
|
(exec-str fe input)))
|
||||||
|
|
||||||
; built-in primitives
|
; built-in primitives
|
||||||
|
|
||||||
(defun reg-b (key fn) (register *builtins* key fn))
|
(defun reg-b (key fn) (register *builtins* key fn))
|
||||||
|
@ -51,6 +55,9 @@
|
||||||
|
|
||||||
(reg-b "dup" #'(lambda (fe) (pushd fe (car (data-stack fe)))))
|
(reg-b "dup" #'(lambda (fe) (pushd fe (car (data-stack fe)))))
|
||||||
|
|
||||||
|
(reg-b "?" #'(lambda (fe) (format t "~a~%" (popd fe))))
|
||||||
|
(reg-b "??" #'(lambda (fe) (format t "~a~%" (data-stack fe))))
|
||||||
|
|
||||||
(reg-b "def" #'(lambda (fe)
|
(reg-b "def" #'(lambda (fe)
|
||||||
(let ((voc (car(vocabulary fe)))
|
(let ((voc (car(vocabulary fe)))
|
||||||
(name (popd fe))
|
(name (popd fe))
|
||||||
|
|
12
scratch.lisp
12
scratch.lisp
|
@ -1,3 +1,15 @@
|
||||||
|
;;; cl-scopes/scratch - interactive testing
|
||||||
|
|
||||||
|
(asdf:load-system :scopes)
|
||||||
|
|
||||||
|
(in-package :cl-user)
|
||||||
|
(ext:add-package-local-nickname :scf :scopes/forge)
|
||||||
|
(ext:add-package-local-nickname :sctf :scopes/test-forge)
|
||||||
|
|
||||||
|
(scopes/test-forge:run)
|
||||||
|
|
||||||
|
|
||||||
|
;;; real scratch area
|
||||||
|
|
||||||
(defun classes ()
|
(defun classes ()
|
||||||
(let ((r nil))
|
(let ((r nil))
|
||||||
|
|
Loading…
Add table
Reference in a new issue