(defun binding-name (b) (first b))
(defun binding-type (b) (second b))
-(defun binding-translation (b) (third b))
+(defun binding-value (b) (third b))
(defun binding-declared (b)
(and b (fourth b)))
(defun mark-binding-as-declared (b)
(concat "v" (integer-to-string (incf *variable-counter*))))
(defun translate-variable (symbol)
- (binding-translation (lookup-in-lexenv symbol *environment* 'variable)))
+ (binding-value (lookup-in-lexenv symbol *environment* 'variable)))
(defun extend-local-env (args)
(let ((new (copy-lexenv *environment*)))
(define-compilation setq (var val)
(let ((b (lookup-in-lexenv var *environment* 'variable)))
(if (eq (binding-type b) 'lexical-variable)
- (concat (binding-translation b) " = " (ls-compile val))
+ (concat (binding-value b) " = " (ls-compile val))
(ls-compile `(set ',var ,val)))))
;;; FFI Variable accessors
(js!selfcall
"throw ({"
"type: 'block', "
- "id: " (binding-translation b) ", "
+ "id: " (binding-value b) ", "
"value: " (ls-compile value) ", "
"message: 'Return from unknown block " (symbol-name name) ".'"
"})")
(let ((*environment* (declare-tagbody-tags tbidx body))
initag)
(let ((b (lookup-in-lexenv (first body) *environment* 'gotag)))
- (setq initag (second (binding-translation b))))
+ (setq initag (second (binding-value b))))
(js!selfcall
"var tagbody_" tbidx " = " initag ";" *newline*
"tbloop:" *newline*
(if (not (go-tag-p form))
(indent (ls-compile form) ";" *newline*)
(let ((b (lookup-in-lexenv form *environment* 'gotag)))
- (concat "case " (second (binding-translation b)) ":" *newline*)))))
+ (concat "case " (second (binding-value b)) ":" *newline*)))))
"default:" *newline*
" break tbloop;" *newline*
"}" *newline*)))
(js!selfcall
"throw ({"
"type: 'tagbody', "
- "id: " (first (binding-translation b)) ", "
- "label: " (second (binding-translation b)) ", "
+ "id: " (first (binding-value b)) ", "
+ "label: " (second (binding-value b)) ", "
"message: 'Attempt to GO to non-existing tag " n "'"
"})" *newline*)
(error (concat "Unknown tag `" n "'.")))))
(defun ls-macroexpand-1 (form)
(let ((macro-binding (macro (car form))))
(if macro-binding
- (apply (eval (binding-translation macro-binding)) (cdr form))
+ (apply (eval (binding-value macro-binding)) (cdr form))
form)))
(defun compile-funcall (function args)
((symbolp sexp)
(let ((b (lookup-in-lexenv sexp *environment* 'variable)))
(if (eq (binding-type b) 'lexical-variable)
- (binding-translation b)
+ (binding-value b)
(ls-compile `(symbol-value ',sexp)))))
((integerp sexp) (integer-to-string sexp))
((stringp sexp) (concat "\"" (escape-string sexp) "\""))