It looks like that the current transformation will reinitialize the
initializers on every iteration.
You can try it with this test case:
(js-on-cl::js-to-paren "for(var i = 0, len = cols.length; i < len;
i++){ c = cols[i];}")
Below is a simple patch for that.
@@ -143,11 +143,10 @@
(condition (for-condition js-form))
(step (for-step js-form))
(body (for-body js-form)) )
- `(while t
+ `(progn
,(as-paren initializer)
- (if (not ,(as-paren condition))
- (break))
- ,(as-paren step) ,(as-paren body))))
+ (while ,(as-paren condition)
+ ,(as-paren body) ,(as-paren step)))))
Also, I notice that the operator ++ is not recognized by parenscript
and it becomes a invalid function call Plus(...)
(ps*
'(PROGN
(PROGN (DEFVAR I 0) (DEFVAR LEN (SLOT-VALUE COLS "length")))
(WHILE (< I LEN) (++ I) (PROGN (= C (SLOT-VALUE COLS I))))))
=>
var i = 0 ;
var len = cols['length'];
while (i < len) {
Plus(i);
c == cols[i];
};
I'm not sure if we should fix js-to-paren to translate ++ to incf or
patch parenscript to recognize ++.
Thanks