|
346 | 346 | (setq (fdef . bindframe) t))) |
347 | 347 |
|
348 | 348 | ;; compile-time check to see if we are not missing any frame references |
349 | | - (when (and (not avant-mode) (= (- closure-level (fdef . level)) 1) |
| 349 | + (when (and (not avant-mode) (> closure-level (fdef . level)) |
350 | 350 | (fdef . bindframe)) |
351 | | - (unless (find (fdef . bindframe) current-fframes) |
352 | | - (send self :error "unbound fletframe detected when loading function ~S: ~A" |
353 | | - (fdef . name) (fdef . bindframe))) |
354 | | - (unless (< (send self :flet-bindframe fdef) current-csize) |
355 | | - (send self :error "invalid fletframe index detected when loading function ~S: ~A" |
356 | | - (fdef . name) (fdef . cbindframe)))) |
| 351 | + (let* ((c-index (- closure-level (fdef . level))) |
| 352 | + (c-fframes (car (nthcdr (1- c-index) current-fframes))) |
| 353 | + (c-csize (car (nthcdr (1- c-index) current-csize)))) |
| 354 | + (unless (find (fdef . bindframe) c-fframes) |
| 355 | + (send self :error "unbound fletframe detected when loading function ~S: ~A" |
| 356 | + (fdef . name) (fdef . bindframe))) |
| 357 | + (unless (< (send self :flet-bindframe fdef) c-csize) |
| 358 | + (send self :error "invalid fletframe index detected when loading function ~S: ~A" |
| 359 | + (fdef . name) (fdef . cbindframe))))) |
357 | 360 | fdef) |
358 | 361 | (cond ((fboundp fn) |
359 | 362 | (setq fdef (symbol-function fn)) |
|
566 | 569 | (unless (pushvar . bindframe) (setq (pushvar . bindframe) t)))) |
567 | 570 | (check-cframe (&optional (pushvar var)) |
568 | 571 | ;; compile-time check to see if we are not missing any frame references |
569 | | - (when (and (not avant-mode) (= (- closure-level (var . level)) 1) |
| 572 | + (when (and (not avant-mode) (> closure-level (var . level)) |
570 | 573 | (numberp (pushvar . bindframe))) |
571 | | - (unless (find (pushvar . bindframe) current-cframes) |
572 | | - (send self :error ";; unbound bindframe detected when loading variable ~S: ~A" |
573 | | - (var . name) (pushvar . bindframe))) |
574 | | - (unless (< (send self :var-bindframe pushvar) current-csize) |
575 | | - (send self :error ";; invalid bindframe index detected when loading variable ~S: ~A" |
576 | | - (var . name) (send self :var-bindframe pushvar)))))) |
| 574 | + (let* ((c-index (- closure-level (var . level))) |
| 575 | + (c-cframes (car (nthcdr (1- c-index) current-cframes))) |
| 576 | + (c-csize (car (nthcdr (1- c-index) current-csize)))) |
| 577 | + (unless (find (pushvar . bindframe) c-cframes) |
| 578 | + (send self :error ";; unbound bindframe detected when loading variable ~S: ~A" |
| 579 | + (var . name) (pushvar . bindframe))) |
| 580 | + (unless (< (send self :var-bindframe pushvar) c-csize) |
| 581 | + (send self :error ";; invalid bindframe index detected when loading variable ~S: ~A" |
| 582 | + (var . name) (send self :var-bindframe pushvar))))))) |
577 | 583 | (case (var . binding) |
578 | 584 | ;; special variables are accessed through :load-global, so we don't need |
579 | 585 | ;; to add or manage them in bind frames |
|
1724 | 1730 | (cframes (fourth aclosure)) |
1725 | 1731 | (fframes (fifth aclosure)) |
1726 | 1732 | (cbind (append cframes fframes))) |
1727 | | - (setq (newcomp . current-cframes) cframes) |
1728 | | - (setq (newcomp . current-fframes) fframes) |
1729 | | - (setq (newcomp . current-csize) (length cbind)) |
| 1733 | + (setq (newcomp . current-cframes) (cons cframes (newcomp . current-cframes))) |
| 1734 | + (setq (newcomp . current-fframes) (cons fframes (newcomp . current-fframes))) |
| 1735 | + (setq (newcomp . current-csize) (cons (length cbind) (newcomp . current-csize))) |
1730 | 1736 | ;; recalculate function cbindings |
1731 | 1737 | (setq (newcomp . flets) (copy-object (newcomp . flets))) |
1732 | 1738 | (dolist (fdef (newcomp . flets)) |
|
0 commit comments