[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/noverlay-wip 7862be51f1: First version that compiles
From: |
Stefan Monnier |
Subject: |
scratch/noverlay-wip 7862be51f1: First version that compiles |
Date: |
Sun, 25 Sep 2022 12:18:40 -0400 (EDT) |
branch: scratch/noverlay-wip
commit 7862be51f10a7142fffc88ecfd454b3e39e91efc
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
First version that compiles
---
src/Makefile.in | 2 +-
src/alloc.c | 5 +++++
src/pdumper.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
3 files changed, 59 insertions(+), 6 deletions(-)
diff --git a/src/Makefile.in b/src/Makefile.in
index ed4b7a55b1..059e6c717b 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -499,7 +499,7 @@ all: ../native-lisp
endif
.PHONY: all
-dmpstruct_headers=$(srcdir)/lisp.h $(srcdir)/buffer.h \
+dmpstruct_headers=$(srcdir)/lisp.h $(srcdir)/buffer.h $(srcdir)/itree.h \
$(srcdir)/intervals.h $(srcdir)/charset.h $(srcdir)/bignum.h
ifeq ($(CHECK_STRUCTS),true)
pdumper.o: dmpstruct.h
diff --git a/src/alloc.c b/src/alloc.c
index d37bafe278..20b8981bd6 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3129,6 +3129,11 @@ cleanup_vector (struct Lisp_Vector *vector)
if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BIGNUM))
mpz_clear (PSEUDOVEC_STRUCT (vector, Lisp_Bignum)->value);
+ else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_OVERLAY))
+ {
+ struct Lisp_Overlay *ol = PSEUDOVEC_STRUCT (vector, Lisp_Overlay);
+ xfree (ol->interval);
+ }
else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FINALIZER))
unchain_finalizer (PSEUDOVEC_STRUCT (vector, Lisp_Finalizer));
else if (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FONT))
diff --git a/src/pdumper.c b/src/pdumper.c
index 3ec867e281..0564c6e197 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -2133,17 +2133,65 @@ dump_marker (struct dump_context *ctx, const struct
Lisp_Marker *marker)
return finish_dump_pvec (ctx, &out->header);
}
+static dump_off
+dump_interval_node (struct dump_context *ctx, struct interval_node *node,
+ dump_off parent_offset)
+{
+#if CHECK_STRUCTS && !defined (HASH_interval_node_5765524F7E)
+# error "interval_node changed. See CHECK_STRUCTS comment in config.h."
+#endif
+ struct interval_node out;
+ dump_object_start (ctx, &out, sizeof (out));
+ if (node->parent)
+ dump_field_fixup_later (ctx, &out, node, &node->parent);
+ if (node->left)
+ dump_field_fixup_later (ctx, &out, node, &node->parent);
+ if (node->right)
+ dump_field_fixup_later (ctx, &out, node, &node->parent);
+ DUMP_FIELD_COPY (&out, node, begin);
+ DUMP_FIELD_COPY (&out, node, end);
+ DUMP_FIELD_COPY (&out, node, limit);
+ DUMP_FIELD_COPY (&out, node, offset);
+ DUMP_FIELD_COPY (&out, node, otick);
+ dump_field_lv (ctx, &out, node, &node->data, WEIGHT_STRONG);
+ DUMP_FIELD_COPY (&out, node, color);
+ DUMP_FIELD_COPY (&out, node, visited);
+ DUMP_FIELD_COPY (&out, node, rear_advance);
+ DUMP_FIELD_COPY (&out, node, front_advance);
+ dump_off offset = dump_object_finish (ctx, &out, sizeof (out));
+ if (node->parent)
+ dump_remember_fixup_ptr_raw
+ (ctx,
+ offset + dump_offsetof (struct interval_node, parent),
+ dump_interval_node (ctx, node->parent, offset));
+ if (node->left)
+ dump_remember_fixup_ptr_raw
+ (ctx,
+ offset + dump_offsetof (struct interval_node, left),
+ dump_interval_node (ctx, node->left, offset));
+ if (node->right)
+ dump_remember_fixup_ptr_raw
+ (ctx,
+ offset + dump_offsetof (struct interval_node, right),
+ dump_interval_node (ctx, node->right, offset));
+ return offset;
+}
+
static dump_off
dump_overlay (struct dump_context *ctx, const struct Lisp_Overlay *overlay)
{
-#if CHECK_STRUCTS && !defined (HASH_Lisp_Overlay_72EADA9882)
+#if CHECK_STRUCTS && !defined (HASH_Lisp_Overlay_1CD4249AEC)
# error "Lisp_Overlay changed. See CHECK_STRUCTS comment in config.h."
#endif
START_DUMP_PVEC (ctx, &overlay->header, struct Lisp_Overlay, out);
dump_pseudovector_lisp_fields (ctx, &out->header, &overlay->header);
- /* FIXME: We need to write this code */
- emacs_abort ();
- return finish_dump_pvec (ctx, &out->header);
+ dump_field_fixup_later (ctx, &out, overlay, &overlay->interval);
+ dump_off offset = finish_dump_pvec (ctx, &out->header);
+ dump_remember_fixup_ptr_raw
+ (ctx,
+ offset + dump_offsetof (struct Lisp_Overlay, interval),
+ dump_interval_node (ctx, overlay->interval, offset));
+ return offset;
}
static void
@@ -2701,7 +2749,7 @@ dump_hash_table (struct dump_context *ctx,
static dump_off
dump_buffer (struct dump_context *ctx, const struct buffer *in_buffer)
{
-#if CHECK_STRUCTS && !defined HASH_buffer_AA373AEE10
+#if CHECK_STRUCTS && !defined HASH_buffer_F0F08347A5
# error "buffer changed. See CHECK_STRUCTS comment in config.h."
#endif
struct buffer munged_buffer = *in_buffer;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- scratch/noverlay-wip 7862be51f1: First version that compiles,
Stefan Monnier <=