X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1tran-lambda.lisp;h=ce0672774af8d5d1cc1c67f6aba5faab96614738;hb=7f1e94ae961a198e00daf281eb1dc858e5b2dcc7;hp=ffd254c9804436acb7c76271df9f7f433d502e02;hpb=47f408ca8480937ac946db8455b7c3d3e0b353bb;p=sbcl.git diff --git a/src/compiler/ir1tran-lambda.lisp b/src/compiler/ir1tran-lambda.lisp index ffd254c..ce06727 100644 --- a/src/compiler/ir1tran-lambda.lisp +++ b/src/compiler/ir1tran-lambda.lisp @@ -911,10 +911,13 @@ ,*current-path*)))) (min (or (position-if #'lambda-var-arg-info vars) (length vars)))) (aver-live-component *current-component*) - (push res (component-new-functionals *current-component*)) (ir1-convert-hairy-args res () () () () vars nil body aux-vars aux-vals source-name debug-name nil post-binding-lexenv system-lambda) + ;; ir1-convert-hairy-args can throw 'locall-already-let-converted + ;; push optional-dispatch into the current component only after it + ;; normally returned + (push res (component-new-functionals *current-component*)) (setf (optional-dispatch-min-args res) min) (setf (optional-dispatch-max-args res) (+ (1- (length (optional-dispatch-entry-points res))) min)) @@ -1253,7 +1256,6 @@ (get-defined-fun name (fifth inline-lambda)) (get-defined-fun name)))) (when (boundp '*lexenv*) - (remhash name *free-funs*) (aver (fasl-output-p *compile-object*)) (if (member name *fun-names-in-this-file* :test #'equal) (warn 'duplicate-definition :name name)