From abc564ad490078f43ffc9353a3b334389a94c784 Mon Sep 17 00:00:00 2001 From: "Jan (janneke) 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 | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/struct.c b/src/struct.c index 4e06a5ed..0b8e0bfe 100644 --- a/src/struct.c +++ b/src/struct.c @@ -1,6 +1,6 @@ /* -*-comment-start: "//";comment-end:""-*- * GNU Mes --- Maxwell Equations of Software - * Copyright © 2018 Jan (janneke) Nieuwenhuizen + * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen * * This file is part of GNU Mes. * @@ -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; }