Changeset 4561
- Timestamp:
- 10/28/03 23:25:12 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/j/src/org/armedbear/lisp/setf.lisp
r4440 r4561 2 2 ;;; 3 3 ;;; Copyright (C) 2003 Peter Graves 4 ;;; $Id: setf.lisp,v 1.3 5 2003-10-17 19:10:19piso Exp $4 ;;; $Id: setf.lisp,v 1.36 2003-10-28 23:25:12 piso Exp $ 5 5 ;;; 6 6 ;;; This program is free software; you can redistribute it and/or … … 83 83 (setq access-forms (cons access-form access-forms))))) 84 84 85 86 85 (defmacro setf (&rest args) 87 86 (let ((count (length args))) … … 92 91 (if (atom place) 93 92 `(setq ,place ,value-form) 94 (multiple-value-bind (dummies vals newval setter getter) 95 (get-setf-expansion place nil) 96 (let ((inverse (get (car place) 'setf-inverse))) 97 (if (and inverse (eq inverse (car setter))) 98 (if (functionp inverse) 99 `(funcall ,inverse ,@(cdr place) ,value-form) 100 `(,inverse ,@(cdr place) ,value-form)) 101 `(let* (,@(mapcar #'list dummies vals)) 102 (multiple-value-bind ,newval ,value-form 103 ,setter)))))))) 93 (progn 94 (when (symbolp (car place)) 95 (resolve (car place))) 96 (multiple-value-bind (dummies vals newval setter getter) 97 (get-setf-expansion place) 98 (let ((inverse (get (car place) 'setf-inverse))) 99 (if (and inverse (eq inverse (car setter))) 100 (if (functionp inverse) 101 `(funcall ,inverse ,@(cdr place) ,value-form) 102 `(,inverse ,@(cdr place) ,value-form)) 103 `(let* (,@(mapcar #'list dummies vals)) 104 (multiple-value-bind ,newval ,value-form 105 ,setter))))))))) 104 106 ((oddp count) 105 107 (error "odd number of args to SETF"))
Note: See TracChangeset
for help on using the changeset viewer.