Changeset 11806
- Timestamp:
- 04/30/09 06:13:35 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp
r11805 r11806 378 378 form) 379 379 380 (defun validate- name-and-lambda-list (name lambda-list context)380 (defun validate-function-name (name) 381 381 (unless (or (symbolp name) (setf-function-name-p name)) 382 (compiler-error "~S is not a valid function name." name)) 383 (when (or (memq '&optional lambda-list) 384 (memq '&key lambda-list)) 385 (let ((state nil)) 386 (dolist (arg lambda-list) 387 (cond ((memq arg lambda-list-keywords) 388 (setf state arg)) 389 ((memq state '(&optional &key)) 390 (when (and (consp arg) (not (constantp (second arg)))) 391 (compiler-unsupported 392 "~A: can't handle ~A argument with non-constant initform." 393 context 394 (if (eq state '&optional) "optional" "keyword"))))))))) 395 396 (defmacro with-local-functions-for-flet/labels 397 (form local-functions-var lambda-name lambda-list-var name-var body-var body1 body2) 382 (compiler-error "~S is not a valid function name." name))) 383 384 (defmacro with-local-functions-for-flet/labels 385 (form local-functions-var lambda-list-var name-var body-var body1 body2) 398 386 `(progn (incf (compiland-children *current-compiland*) (length (cadr ,form))) 399 387 (let ((*visible-variables* *visible-variables*) … … 404 392 (let ((,name-var (car definition)) 405 393 (,lambda-list-var (cadr definition))) 406 (validate-name-and-lambda-list ,name-var ,lambda-list-var ,lambda-name) 407 394 (validate-function-name ,name-var) 408 395 (let* ((,body-var (cddr definition)) 409 396 (compiland (make-compiland :name ,name-var … … 575 562 (defun p1-flet (form) 576 563 (with-local-functions-for-flet/labels 577 form local-functions 'FLETlambda-list name body564 form local-functions lambda-list name body 578 565 ((let ((local-function (make-local-function :name name 579 566 :compiland compiland))) … … 602 589 (defun p1-labels (form) 603 590 (with-local-functions-for-flet/labels 604 form local-functions 'LABELSlambda-list name body591 form local-functions lambda-list name body 605 592 ((let* ((variable (make-variable :name (gensym))) 606 593 (local-function (make-local-function :name name
Note: See TracChangeset
for help on using the changeset viewer.