|
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