Changeset 8212


Ignore:
Timestamp:
12/04/04 15:48:38 (17 years ago)
Author:
piso
Message:

MAYBE-REWRITE-LAMBDA

File:
1 edited

Legend:

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

    r8211 r8212  
    22;;;
    33;;; Copyright (C) 2003-2004 Peter Graves
    4 ;;; $Id: precompiler.lisp,v 1.81 2004-12-03 18:27:36 piso Exp $
     4;;; $Id: precompiler.lisp,v 1.82 2004-12-04 15:48:38 piso Exp $
    55;;;
    66;;; This program is free software; you can redistribute it and/or
     
    371371      (dolist (special specials)
    372372        (let ((sym (gensym)))
    373           (let ((res ()))
     373          (let ((res ())
     374                (keyp nil))
    374375            (dolist (var lambda-list)
    375               (cond ((and (consp var) (consp (first var))
     376              (cond ((eq var '&KEY)
     377                     (setf keyp t)
     378                     (push var res))
     379                    ((and (consp var) (consp (first var))
    376380                          (eq special (second (first var))))
    377381                     (push (list (list (first (first var)) sym) (second var)) res))
     
    379383                     (push (cons sym (cdr var)) res))
    380384                    ((eq var special)
    381                      (push sym res))
     385                     (if keyp
     386                         ;; "&key x" => "&key ((:x x) nil)"
     387                         (push (list (list (intern (symbol-name var) sys:*keyword-package*)
     388                                           sym)
     389                                     nil)
     390                               res)
     391                         (push sym res)))
    382392                    (t
    383393                     (push var res))))
    384394            (setf lambda-list (nreverse res)))
    385395          (setf body (list (append (list 'LET* (list (list special sym))) body))))))
    386     (list* 'LAMBDA lambda-list (mapcar #'precompile1 body))))
     396    (list* 'LAMBDA lambda-list body)))
    387397
    388398(defun precompile-lambda (form)
    389   (maybe-rewrite-lambda form))
     399  (setf form (maybe-rewrite-lambda form))
     400  (list* 'LAMBDA (cadr form) (mapcar #'precompile1 (cddr form))))
    390401
    391402(defun define-local-macro (name lambda-list body)
     
    589600(defun precompile-function (form)
    590601  (if (and (consp (cadr form)) (eq (caadr form) 'LAMBDA))
    591       (list 'FUNCTION (maybe-rewrite-lambda (cadr form)))
     602      (list 'FUNCTION (precompile-lambda (cadr form)))
    592603      form))
    593604
Note: See TracChangeset for help on using the changeset viewer.