<script src="jquery.js" type="text/javascript" charset="utf-8"></script>
<script src="jqconsole.min.js" type="text/javascript" charset="utf-8"></script>
<script>
+ var jqconsole;
$(function () {
- var jqconsole = $('#console').jqconsole('Welcome to JSCL!\n\n', '');
+ jqconsole = $('#console').jqconsole('Welcome to JSCL!\n\n', '');
jqconsole.RegisterMatching('(', ')', 'parents');
if (localStorage.getItem("jqhist"))
jqconsole.SetHistory(JSON.parse(localStorage.getItem("jqhist")));
(define-builtin functionp (x)
(js!bool (code "(typeof " x " == 'function')")))
-(define-builtin write-string (x)
+(define-builtin %write-string (x)
(code "lisp.write(" x ")"))
;;; TODO: Use structures to represent streams, but we would need
;;; inheritance.
-(defvar *standard-output*)
+(defvar *standard-output*
+ (vector 'stream
+ (lambda (ch) (%write-string (string ch)))
+ (lambda (string) (%write-string string))))
(defun streamp (x)
(and (vectorp x) (eq (aref x 0) 'stream)))
+(defun write-char (char &optional (stream *standard-output*))
+ (funcall (aref stream 1) char))
+
+(defun write-string (string &optional (stream *standard-output*))
+ (funcall (aref stream 2) string))
+
+
(defun make-string-output-stream ()
(let ((buffer (make-string 0)))
(vector 'stream
;; write-char
(lambda (ch)
(vector-push-extend ch buffer))
+ (lambda (string)
+ (dotimes (i (length string))
+ (vector-push-extend (aref string i) buffer)))
'string-stream
buffer)))
(defun get-output-stream-string (stream)
- (eq (aref stream 2) 'string-stream)
- (prog1 (aref stream 3)
- (aset stream 3 (make-string 0))))
-
-(defun write-char (char &optional (stream *standard-output*))
- (funcall (aref stream 1) char))
+ (eq (aref stream 3) 'string-stream)
+ (prog1 (aref stream 4)
+ (aset stream 4 (make-string 0))))
(defmacro with-output-to-string ((var) &body body)
`(let ((,var (make-string-output-stream)))