637 |
} |
} |
638 |
if (BUFFERP (object)) |
if (BUFFERP (object)) |
639 |
{ |
{ |
|
int posn = XINT (position); |
|
640 |
int noverlays; |
int noverlays; |
641 |
Lisp_Object *overlay_vec, tem; |
Lisp_Object *overlay_vec; |
|
int len; |
|
642 |
struct buffer *obuf = current_buffer; |
struct buffer *obuf = current_buffer; |
643 |
|
|
644 |
set_buffer_temp (XBUFFER (object)); |
set_buffer_temp (XBUFFER (object)); |
645 |
|
|
646 |
/* First try with room for 40 overlays. */ |
GET_OVERLAYS_AT (XINT (position), overlay_vec, noverlays, NULL, 0); |
|
len = 40; |
|
|
overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
|
|
|
|
noverlays = overlays_at (posn, 0, &overlay_vec, &len, |
|
|
NULL, NULL, 0); |
|
|
|
|
|
/* If there are more than 40, |
|
|
make enough space for all, and try again. */ |
|
|
if (noverlays > len) |
|
|
{ |
|
|
len = noverlays; |
|
|
overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
|
noverlays = overlays_at (posn, 0, &overlay_vec, &len, |
|
|
NULL, NULL, 0); |
|
|
} |
|
647 |
noverlays = sort_overlays (overlay_vec, noverlays, w); |
noverlays = sort_overlays (overlay_vec, noverlays, w); |
648 |
|
|
649 |
set_buffer_temp (obuf); |
set_buffer_temp (obuf); |
651 |
/* Now check the overlays in order of decreasing priority. */ |
/* Now check the overlays in order of decreasing priority. */ |
652 |
while (--noverlays >= 0) |
while (--noverlays >= 0) |
653 |
{ |
{ |
654 |
tem = Foverlay_get (overlay_vec[noverlays], prop); |
Lisp_Object tem = Foverlay_get (overlay_vec[noverlays], prop); |
655 |
if (!NILP (tem)) |
if (!NILP (tem)) |
656 |
{ |
{ |
657 |
if (overlay) |
if (overlay) |