(:file "namespace")
(:file "parse-lambda-list")
(:file "compiler")
- (:file "special-forms")
(:file "printer")
(:file "compilation-interface")
+ (:file "special-forms")
(:file "deprecated-interface")
(:file "js-dom-symbol-exports")
;; standard library
-(in-package :parenscript)
+(in-package "PARENSCRIPT")
+
+(defvar *js-target-version* 1.3)
(defmacro ps (&body body)
"Given Parenscript forms (an implicit progn), compiles those forms
))
(defparameter *parenscript-interface-exports*
'(;; compiler
+ #:*js-target-version*
#:compile-script
#:ps
#:ps-doc
optionals))
(key-forms
(when keys?
- (with-ps-gensyms (n)
- (let ((decls nil) (assigns nil) (defaults nil))
- (mapc (lambda (k)
- (multiple-value-bind (var init-form keyword)
- (parse-key-spec k)
- (push (list 'var var) decls)
- (push `(,keyword (setf ,var (aref arguments (1+ ,n)))) assigns)
- (push (list 'defaultf var init-form) defaults)))
- (reverse keys))
- `(,@decls
- (loop :for ,n :from ,(length requireds)
- :below (length arguments) :by 2 :do
- (case (aref arguments ,n) ,@assigns))
- ,@defaults)))))
+ (if (< *js-target-version* 1.6)
+ (with-ps-gensyms (n)
+ (let ((decls nil) (assigns nil) (defaults nil))
+ (mapc (lambda (k)
+ (multiple-value-bind (var init-form keyword-str)
+ (parse-key-spec k)
+ (push `(var ,var) decls)
+ (push `(,keyword-str (setf ,var (aref arguments (1+ ,n)))) assigns)
+ (push (list 'defaultf var init-form) defaults)))
+ (reverse keys))
+ `(,@decls
+ (loop :for ,n :from ,(length requireds)
+ :below (length arguments) :by 2 :do
+ (case (aref arguments ,n) ,@assigns))
+ ,@defaults)))
+ (mapcar (lambda (k)
+ (multiple-value-bind (var init-form keyword-str)
+ (parse-key-spec k)
+ (with-ps-gensyms (x)
+ `(let ((,x ((@ *Array prototype index-of call) arguments ,keyword-str ,(length requireds))))
+ (var ,var (if (= -1 ,x) ,init-form (aref arguments (1+ ,x))))))))
+ keys))))
(rest-form
(if rest?
(with-ps-gensyms (i)
(test ps-lisp-dynamic-environment
(is (string= "1 + 2;" (let ((*print-level* 2)) (ps (+ 1 (lisp *print-level*)))))))
+
+(test-ps-js ps-js-target-version-keyword-test1
+ (defun foo (x y &key bar baz))
+ "function foo(x, y) {
+ var x1 = Array.prototype.indexOf.call(arguments, 'bar', 2);
+ var bar = -1 == x1 ? null : arguments[x1 + 1];
+ var x2 = Array.prototype.indexOf.call(arguments, 'baz', 2);
+ var baz = -1 == x2 ? null : arguments[x2 + 1];
+}"
+ :js-target-version 1.6)
(same-space-between-statements
(normalize-whitespace str))))))
-(defmacro test-ps-js (testname parenscript javascript)
+(defmacro test-ps-js (testname parenscript javascript &key (js-target-version *js-target-version*))
`(test ,testname ()
- (is (string= (normalize-js-code (ps-doc* ',parenscript))
+ (is (string= (normalize-js-code (let ((*js-target-version* ,js-target-version))
+ (ps-doc* ',parenscript)))
(normalize-js-code ,javascript)))))
(defun run-tests()
(run! 'ps-tests)
(format t "Running Package System tests:~&")
(run! 'package-system-tests))
-