- (js!selfcall
- "var obj = " (ls-compile object) ";"
- `(code ,@(mapcar (lambda (key)
- `(code "obj = obj[xstring(" ,(ls-compile key) ")];"
- "if (obj === undefined) throw 'Impossible to set Javascript property.';" ))
- (butlast keys)))
- "var tmp = obj[xstring(" (ls-compile (car (last keys))) ")] = " (ls-compile value) ";"
- "return tmp === undefined? " (ls-compile nil) " : tmp;" )))
+ (js!selfcall*
+ `(progn
+ (var (obj ,(ls-compile object)))
+ ,@(mapcar (lambda (key)
+ `(progn
+ (= obj (property obj (call |xstring| ,(ls-compile key))))
+ (if (=== object undefined)
+ (throw "Impossible to set object property."))))
+ (butlast keys))
+ (var (tmp
+ (= (property obj (call |xstring| ,(ls-compile (car (last keys)))))
+ ,(ls-compile value))))
+ (return (if (=== tmp undefined)
+ ,(ls-compile nil)
+ tmp))))))