- (let ((tr (integer-to-string (incf *block-counter*))))
- (let ((b (make-binding name 'block tr)))
- (js!selfcall
- "try {" *newline*
- (let ((*environment* (extend-lexenv (list b) *environment* 'block)))
- (indent "return " (ls-compile `(progn ,@body) *multiple-value-p*) ";" *newline*))
- "}" *newline*
- "catch (cf){" *newline*
- " if (cf.type == 'block' && cf.id == " tr ")" *newline*
- " return cf.value;" *newline*
- " else" *newline*
- " throw cf;" *newline*
- "}" *newline*))))
+ (let* ((tr (integer-to-string (incf *block-counter*)))
+ (b (make-binding name 'block tr))
+ (*environment* (extend-lexenv (list b) *environment* 'block))
+ (cbody (ls-compile-block body t)))
+ (if (member 'used (binding-declarations b))
+ (js!selfcall
+ "try {" *newline*
+ (indent cbody)
+ "}" *newline*
+ "catch (cf){" *newline*
+ " if (cf.type == 'block' && cf.id == " tr ")" *newline*
+ " return cf.value;" *newline*
+ " else" *newline*
+ " throw cf;" *newline*
+ "}" *newline*)
+ (js!selfcall
+ (indent cbody)))))