From f72b50071a89d12431e89851c68ff7367b3de9c3 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sun, 20 Oct 2019 13:39:12 +0200 Subject: [PATCH] core: Prepare for M2-Planet: struct.c. * src/struct.c: Rewrite C constructs not supported by M2-Planet. --- src/struct.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/struct.c b/src/struct.c index 4e06a5ed..16f94e75 100644 --- a/src/struct.c +++ b/src/struct.c @@ -29,9 +29,16 @@ make_struct (SCM type, SCM fields, SCM printer) long size = 2 + length__ (fields); SCM v = alloc (size); SCM x = make_cell__ (TSTRUCT, size, v); - g_cells[v] = g_cells[vector_entry (type)]; - g_cells[v + 1] = g_cells[vector_entry (printer)]; - for (long i = 2; i < size; i++) + SCM vt = vector_entry (type); + TYPE (v) = TYPE (vt); + CAR (v) = CAR (vt); + CDR (v) = CDR (vt); + SCM vp = vector_entry (printer); + TYPE (v + 1) = TYPE (vp); + CAR (v + 1) = CAR (vp); + CDR (v + 1) = CDR (vp); + long i; + for (i = 2; i < size; i = i + 1) { SCM e = cell_unspecified; if (fields != cell_nil) @@ -39,7 +46,10 @@ make_struct (SCM type, SCM fields, SCM printer) e = CAR (fields); fields = CDR (fields); } - g_cells[v + i] = g_cells[vector_entry (e)]; + SCM ve = vector_entry (e); + TYPE (v + i) = TYPE (ve); + CAR (v + i) = CAR (ve); + CDR (v + i) = CDR (ve); } return x; }