(js-format "~a" (apply #'code args)))
;; Accessors
(property
- (js-expr (car args))
+ (js-expr (car args) 0)
(js-format "[")
(js-expr (cadr args) no-comma)
(js-format "]"))
(get
- (multiple-value-bind (identifier identifierp)
- (valid-js-identifier (car args))
- (multiple-value-bind (accessor accessorp)
- (valid-js-identifier (cadr args))
- (cond
- ((and identifierp accessorp)
- (js-identifier identifier)
- (js-format ".")
- (js-identifier accessor))
- (t
- (js-expr (car args))
- (js-format "[")
- (js-expr (cadr args))
- (js-format "]"))))))
+ (multiple-value-bind (accessor accessorp)
+ (valid-js-identifier (cadr args))
+ (unless accessorp
+ (error "Invalid accessor ~S" (cadr args)))
+ (js-expr (car args) 0)
+ (js-format ".")
+ (js-identifier accessor)))
;; Function call
(call
(js-expr (car args) 1)
(if (or name docstring)
(js!selfcall*
`(var (func ,code))
- (when name `(= (get func |fname|) ,name))
- (when docstring `(= (get func |docstring|) ,docstring))
+ (when name `(= (get func "fname") ,name))
+ (when docstring `(= (get func "docstring") ,docstring))
`(return func))
code))
`(try
,(ls-compile-block body t))
`(catch (|cf|)
- (if (and (== (get |cf| |type|) "catch")
- (== (get |cf| |id|) |id|))
+ (if (and (== (get |cf| "type") "catch")
+ (== (get |cf| "id") |id|))
,(if *multiple-value-p*
- `(return (call (get |values| |apply|)
+ `(return (call (get |values| "apply")
this
- (call |forcemv| (get |cf| |values|))))
- `(return (call (get |pv| |apply|)
+ (call |forcemv| (get |cf| "values"))))
+ `(return (call (get |pv| "apply")
this
- (call |forcemv| (get |cf| |values|)))))
+ (call |forcemv| (get |cf| "values")))))
(throw |cf|)))))
(define-compilation throw (id value)
(define-builtin storage-vector-ref (vector n)
(js!selfcall*
- `(var (x (get ,vector ,n)))
+ `(var (x (property ,vector ,n)))
`(if (=== x undefined) (throw "Out of range."))
`(return x)))
(define-raw-builtin oget* (object key &rest keys)
(js!selfcall*
`(progn
- (var (tmp (get ,(ls-compile object) (call |xstring| ,(ls-compile key)))))
+ (var (tmp (property ,(ls-compile object) (call |xstring| ,(ls-compile key)))))
,@(mapcar (lambda (key)
`(progn
(if (=== tmp undefined) (return ,(ls-compile nil)))
- (= tmp (get tmp (call |xstring| ,(ls-compile key))))))
+ (= tmp (property tmp (call |xstring| ,(ls-compile key))))))
keys))
`(return (if (=== tmp undefined) ,(ls-compile nil) tmp))))
(var (obj ,(ls-compile object)))
,@(mapcar (lambda (key)
`(progn
- (= obj (get obj (call |xstring| ,(ls-compile key))))
+ (= obj (property obj (call |xstring| ,(ls-compile key))))
(if (=== object undefined)
(throw "Impossible to set object property."))))
(butlast keys))
(var (tmp
- (= (get obj (call |xstring| ,(ls-compile (car (last keys)))))
+ (= (property obj (call |xstring| ,(ls-compile (car (last keys)))))
,(ls-compile value))))
(return (if (=== tmp undefined)
,(ls-compile nil)