Use explicit guile-primitive forms in the macro expansion of dotimes and dolist.
authorDaniel Kraft <d@domob.eu>
Thu, 30 Jul 2009 19:49:00 +0000 (21:49 +0200)
committerDaniel Kraft <d@domob.eu>
Thu, 30 Jul 2009 19:49:00 +0000 (21:49 +0200)
module/language/elisp/runtime/macro-slot.scm

index e74d749..5a308a1 100644 (file)
         (if (not (symbol? var))
           (macro-error "expected symbol as dotimes variable"))
         `(let ((,var 0))
-           (while (< ,var ,count)
+           (while ((guile-primitive <) ,var ,count)
              ,@body
-             (setq ,var (1+ ,var)))
+             (setq ,var ((guile-primitive 1+) ,var)))
            ,@(if (= (length args) 3)
                (list (caddr args))
                '()))))))
           `(let (,var)
              (without-void-checks (,tailvar)
                (lexical-let ((,tailvar ,iter-list))
-                 (while (not (null ,tailvar))
-                   (setq ,var (car ,tailvar))
+                 (while ((guile-primitive not)
+                           ((guile-primitive null?) ,tailvar))
+                   (setq ,var ((guile-primitive car) ,tailvar))
                    ,@body
-                   (setq ,tailvar (cdr ,tailvar)))
+                   (setq ,tailvar ((guile-primitive cdr) ,tailvar)))
                  ,@(if (= (length args) 3)
                      (list (caddr args))
                      '())))))))))