+(define-builtin make-array (n)
+ (js!selfcall
+ "var r = [];" *newline*
+ "for (var i = 0; i < " n "; i++)" *newline*
+ (indent "r.push(" (ls-compile nil) ");" *newline*)
+ "return r;" *newline*))
+
+(define-builtin arrayp (x)
+ (js!bool
+ (js!selfcall
+ "var x = " x ";" *newline*
+ "return typeof x === 'object' && 'length' in x;")))
+
+(define-builtin aref (array n)
+ (js!selfcall
+ "var x = " "(" array ")[" n "];" *newline*
+ "if (x === undefined) throw 'Out of range';" *newline*
+ "return x;" *newline*))
+
+(define-builtin aset (array n value)
+ (js!selfcall
+ "var x = " array ";" *newline*
+ "var i = " n ";" *newline*
+ "if (i < 0 || i >= x.length) throw 'Out of range';" *newline*
+ "return x[i] = " value ";" *newline*))
+
+(define-builtin get-unix-time ()
+ (concat "(Math.round(new Date() / 1000))"))
+
+(define-builtin values-array (array)
+ (if *multiple-value-p*
+ (concat "values.apply(this, " array ")")
+ (concat "pv.apply(this, " array ")")))
+
+(define-raw-builtin values (&rest args)
+ (if *multiple-value-p*
+ (concat "values(" (join (mapcar #'ls-compile args) ", ") ")")
+ (concat "pv(" (join (mapcar #'ls-compile args) ", ") ")")))
+