projects
/
chise
/
xemacs-chise.git-
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update.
[chise/xemacs-chise.git-]
/
src
/
marker.c
diff --git
a/src/marker.c
b/src/marker.c
index
507e314
..
0811ac0
100644
(file)
--- a/
src/marker.c
+++ b/
src/marker.c
@@
-36,9
+36,9
@@
Boston, MA 02111-1307, USA. */
#include "buffer.h"
static Lisp_Object
#include "buffer.h"
static Lisp_Object
-mark_marker (Lisp_Object obj, void (*markobj) (Lisp_Object))
+mark_marker (Lisp_Object obj)
{
{
- struct Lisp_Marker *marker = XMARKER (obj);
+ Lisp_Marker *marker = XMARKER (obj);
Lisp_Object buf;
/* DO NOT mark through the marker's chain.
The buffer's markers chain does not preserve markers from gc;
Lisp_Object buf;
/* DO NOT mark through the marker's chain.
The buffer's markers chain does not preserve markers from gc;
@@
-55,7
+55,7
@@
mark_marker (Lisp_Object obj, void (*markobj) (Lisp_Object))
static void
print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
static void
print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
{
- struct Lisp_Marker *marker = XMARKER (obj);
+ Lisp_Marker *marker = XMARKER (obj);
char buf[200];
if (print_readably)
char buf[200];
if (print_readably)
@@
-66,7
+66,7
@@
print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
write_c_string (GETTEXT ("in no buffer"), printcharfun);
else
{
write_c_string (GETTEXT ("in no buffer"), printcharfun);
else
{
- sprintf (buf, "at %d in ", marker_position (obj));
+ sprintf (buf, "at %ld in ", (long) marker_position (obj));
write_c_string (buf, printcharfun);
print_internal (marker->buffer->name, printcharfun, 0);
}
write_c_string (buf, printcharfun);
print_internal (marker->buffer->name, printcharfun, 0);
}
@@
-75,16
+75,15
@@
print_marker (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
}
static int
}
static int
-marker_equal (Lisp_Object o1, Lisp_Object o2, int depth)
+marker_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
{
{
- struct buffer *b1 = XMARKER (o1)->buffer;
- if (b1 != XMARKER (o2)->buffer)
- return (0);
- else if (!b1)
- /* All markers pointing nowhere are equal */
- return (1);
- else
- return ((XMARKER (o1)->memind == XMARKER (o2)->memind));
+ Lisp_Marker *marker1 = XMARKER (obj1);
+ Lisp_Marker *marker2 = XMARKER (obj2);
+
+ return ((marker1->buffer == marker2->buffer) &&
+ (marker1->memind == marker2->memind ||
+ /* All markers pointing nowhere are equal */
+ !marker1->buffer));
}
static unsigned long
}
static unsigned long
@@
-96,10
+95,17
@@
marker_hash (Lisp_Object obj, int depth)
return hash;
}
return hash;
}
+static const struct lrecord_description marker_description[] = {
+ { XD_LISP_OBJECT, offsetof (Lisp_Marker, next) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Marker, prev) },
+ { XD_LISP_OBJECT, offsetof (Lisp_Marker, buffer) },
+ { XD_END }
+};
+
DEFINE_BASIC_LRECORD_IMPLEMENTATION ("marker", marker,
mark_marker, print_marker, 0,
DEFINE_BASIC_LRECORD_IMPLEMENTATION ("marker", marker,
mark_marker, print_marker, 0,
- marker_equal, marker_hash,
- struct Lisp_Marker);
+ marker_equal, marker_hash, marker_description,
+ Lisp_Marker);
\f
/* Operations on markers. */
\f
/* Operations on markers. */
@@
-136,7
+142,7
@@
Return `nil' if marker doesn't point anywhere.
static void
check_marker_circularities (struct buffer *buf)
{
static void
check_marker_circularities (struct buffer *buf)
{
- struct Lisp_Marker *tortoise, *hare;
+ Lisp_Marker *tortoise, *hare;
tortoise = BUF_MARKERS (buf);
hare = tortoise;
tortoise = BUF_MARKERS (buf);
hare = tortoise;
@@
-167,7
+173,7
@@
set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
{
Bufpos charno;
struct buffer *b;
{
Bufpos charno;
struct buffer *b;
- struct Lisp_Marker *m;
+ Lisp_Marker *m;
int point_p;
CHECK_MARKER (marker);
int point_p;
CHECK_MARKER (marker);
@@
-180,7
+186,7
@@
set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
(MARKERP (pos) && !XMARKER (pos)->buffer))
{
if (point_p)
(MARKERP (pos) && !XMARKER (pos)->buffer))
{
if (point_p)
- signal_simple_error ("can't make point-marker point nowhere",
+ signal_simple_error ("Can't make point-marker point nowhere",
marker);
if (XMARKER (marker)->buffer)
unchain_marker (marker);
marker);
if (XMARKER (marker)->buffer)
unchain_marker (marker);
@@
-199,7
+205,7
@@
set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
{
if (point_p)
signal_simple_error
{
if (point_p)
signal_simple_error
- ("can't move point-marker in a killed buffer", marker);
+ ("Can't move point-marker in a killed buffer", marker);
if (XMARKER (marker)->buffer)
unchain_marker (marker);
return marker;
if (XMARKER (marker)->buffer)
unchain_marker (marker);
return marker;
@@
-237,7
+243,7
@@
set_marker_internal (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer,
if (m->buffer != b)
{
if (point_p)
if (m->buffer != b)
{
if (point_p)
- signal_simple_error ("can't change buffer of point-marker", marker);
+ signal_simple_error ("Can't change buffer of point-marker", marker);
if (m->buffer != 0)
unchain_marker (marker);
m->buffer = b;
if (m->buffer != 0)
unchain_marker (marker);
m->buffer = b;
@@
-283,7
+289,7
@@
set_marker_restricted (Lisp_Object marker, Lisp_Object pos, Lisp_Object buffer)
void
unchain_marker (Lisp_Object m)
{
void
unchain_marker (Lisp_Object m)
{
- struct Lisp_Marker *marker = XMARKER (m);
+ Lisp_Marker *marker = XMARKER (m);
struct buffer *b = marker->buffer;
if (b == 0)
struct buffer *b = marker->buffer;
if (b == 0)
@@
-310,7
+316,7
@@
unchain_marker (Lisp_Object m)
Bytind
bi_marker_position (Lisp_Object marker)
{
Bytind
bi_marker_position (Lisp_Object marker)
{
- struct Lisp_Marker *m = XMARKER (marker);
+ Lisp_Marker *m = XMARKER (marker);
struct buffer *buf = m->buffer;
Bytind pos;
struct buffer *buf = m->buffer;
Bytind pos;
@@
-347,7
+353,7
@@
marker_position (Lisp_Object marker)
void
set_bi_marker_position (Lisp_Object marker, Bytind pos)
{
void
set_bi_marker_position (Lisp_Object marker, Bytind pos)
{
- struct Lisp_Marker *m = XMARKER (marker);
+ Lisp_Marker *m = XMARKER (marker);
struct buffer *buf = m->buffer;
if (!buf)
struct buffer *buf = m->buffer;
if (!buf)
@@
-454,7
+460,7
@@
Return t if there are markers pointing at POSITION in the current buffer.
*/
(position))
{
*/
(position))
{
- struct Lisp_Marker *marker;
+ Lisp_Marker *marker;
Memind pos;
/* A small optimization trick: convert POS to memind now, rather
Memind pos;
/* A small optimization trick: convert POS to memind now, rather
@@
-483,12
+489,12
@@
Return t if there are markers pointing at POSITION in the current buffer.
int
compute_buffer_marker_usage (struct buffer *b, struct overhead_stats *ovstats)
{
int
compute_buffer_marker_usage (struct buffer *b, struct overhead_stats *ovstats)
{
- struct Lisp_Marker *m;
+ Lisp_Marker *m;
int total = 0;
int overhead;
for (m = BUF_MARKERS (b); m; m = m->next)
int total = 0;
int overhead;
for (m = BUF_MARKERS (b); m; m = m->next)
- total += sizeof (struct Lisp_Marker);
+ total += sizeof (Lisp_Marker);
ovstats->was_requested += total;
overhead = fixed_type_block_overhead (total);
/* #### claiming this is all malloc overhead is not really right,
ovstats->was_requested += total;
overhead = fixed_type_block_overhead (total);
/* #### claiming this is all malloc overhead is not really right,
@@
-503,6
+509,8
@@
compute_buffer_marker_usage (struct buffer *b, struct overhead_stats *ovstats)
void
syms_of_marker (void)
{
void
syms_of_marker (void)
{
+ INIT_LRECORD_IMPLEMENTATION (marker);
+
DEFSUBR (Fmarker_position);
DEFSUBR (Fmarker_buffer);
DEFSUBR (Fset_marker);
DEFSUBR (Fmarker_position);
DEFSUBR (Fmarker_buffer);
DEFSUBR (Fset_marker);
@@
-523,7
+531,10
@@
init_buffer_markers (struct buffer *b)
b->mark = Fmake_marker ();
BUF_MARKERS (b) = 0;
b->point_marker = Fmake_marker ();
b->mark = Fmake_marker ();
BUF_MARKERS (b) = 0;
b->point_marker = Fmake_marker ();
- Fset_marker (b->point_marker, make_int (1), buf);
+ Fset_marker (b->point_marker,
+ /* For indirect buffers, point is already set. */
+ b->base_buffer ? make_int (BUF_PT (b)) : make_int (1),
+ buf);
}
void
}
void
@@
-531,7
+542,7
@@
uninit_buffer_markers (struct buffer *b)
{
/* Unchain all markers of this buffer
and leave them pointing nowhere. */
{
/* Unchain all markers of this buffer
and leave them pointing nowhere. */
- REGISTER struct Lisp_Marker *m, *next;
+ REGISTER Lisp_Marker *m, *next;
for (m = BUF_MARKERS (b); m; m = next)
{
m->buffer = 0;
for (m = BUF_MARKERS (b); m; m = next)
{
m->buffer = 0;