Changeset 4881


Ignore:
Timestamp:
11/23/03 20:28:48 (18 years ago)
Author:
piso
Message:

PRECOMPILE-DO/DO*-VARS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/precompiler.lisp

    r4880 r4881  
    22;;;
    33;;; Copyright (C) 2003 Peter Graves
    4 ;;; $Id: precompiler.lisp,v 1.11 2003-11-23 19:16:31 piso Exp $
     4;;; $Id: precompiler.lisp,v 1.12 2003-11-23 20:28:48 piso Exp $
    55;;;
    66;;; This program is free software; you can redistribute it and/or
     
    9797  (cons 'DOTIMES (cons (cadr form) (mapcar #'precompile1 (cddr form)))))
    9898
     99(defun precompile-do/do*-vars (varlist)
     100  (let ((result nil))
     101    (dolist (varspec varlist)
     102      (if (atom varspec)
     103          (push varspec result)
     104          (case (length varspec)
     105            (1
     106             (push (car varspec) result))
     107            (2
     108             (let* ((var (car varspec))
     109                    (init-form (cadr varspec)))
     110               (unless (symbolp var)
     111                 (error 'type-error))
     112               (push (list var (precompile1 init-form))
     113                     result)))
     114            (3
     115             (let* ((var (car varspec))
     116                    (init-form (cadr varspec))
     117                    (step-form (caddr varspec)))
     118               (unless (symbolp var)
     119                 (error 'type-error))
     120               (push (list var (precompile1 init-form) (precompile1 step-form))
     121                     result))))))
     122    (nreverse result)))
     123
    99124(defun precompile-do/do* (form)
    100   (list* (car form) (cadr form) (caddr form)
     125  (list* (car form)
     126         (precompile-do/do*-vars (cadr form))
     127         (caddr form)
    101128         (mapcar #'precompile1 (cdddr form))))
    102129
Note: See TracChangeset for help on using the changeset viewer.