core: Drop support for number based cells.
This removes the POINTER_CELLS define and all its references. * simple.make (CFLAGS): Remove -D POINTER_CELLS. * include/mes/mes.h: Remove #define POINTER_CELLS. * include/mes/cc.h: Remove !POINTER_CELLS branches. * include/mes/macros.h: Likewise. * src/gc.c: Likewise. * src/symbol.c: Likewise. * src/test/gc.c: Likewise.
This commit is contained in:
parent
5c9f2edd90
commit
1cdbadfe98
|
@ -21,11 +21,7 @@
|
|||
#ifndef __MES_CC_H
|
||||
#define __MES_CC_H
|
||||
|
||||
#if POINTER_CELLS
|
||||
typedef struct scm* SCM;
|
||||
#else
|
||||
typedef long SCM;
|
||||
#endif
|
||||
|
||||
#if __MESC__
|
||||
typedef long FUNCTION;
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
#ifndef __MES_MACROS_H
|
||||
#define __MES_MACROS_H
|
||||
|
||||
#if POINTER_CELLS
|
||||
|
||||
#define TYPE(x) g_cells[x - g_cells].type
|
||||
#define CAR(x) g_cells[x - g_cells].car
|
||||
#define CDR(x) g_cells[x - g_cells].cdr
|
||||
|
@ -56,43 +54,6 @@
|
|||
#define NSTRING(x) g_news[x - g_news].string
|
||||
#define NVECTOR(x) g_news[x - g_news].vector
|
||||
|
||||
#else
|
||||
|
||||
#define TYPE(x) g_cells[x].type
|
||||
#define CAR(x) g_cells[x].car
|
||||
#define CDR(x) g_cells[x].cdr
|
||||
|
||||
#define NTYPE(x) g_news[x].type
|
||||
#define NCAR(x) g_news[x].car
|
||||
#define NCDR(x) g_news[x].cdr
|
||||
|
||||
#define STYPE(x) TYPE (g_stack_array[x])
|
||||
#define SCAR(x) CAR (g_stack_array[x])
|
||||
#define SCDR(x) CDR (g_stack_array[x])
|
||||
|
||||
#define BYTES(x) g_cells[x].car
|
||||
#define LENGTH(x) g_cells[x].car
|
||||
#define REF(x) g_cells[x].car
|
||||
#define VARIABLE(x) g_cells[x].car
|
||||
|
||||
#define CLOSURE(x) g_cells[x].cdr
|
||||
#define CONTINUATION(x) g_cells[x].cdr
|
||||
|
||||
#define MACRO(x) g_cells[x].car
|
||||
#define NAME(x) g_cells[x].cdr
|
||||
#define PORT(x) g_cells[x].car
|
||||
#define STRING(x) g_cells[x].cdr
|
||||
#define STRUCT(x) g_cells[x].cdr
|
||||
#define VALUE(x) g_cells[x].cdr
|
||||
#define VECTOR(x) g_cells[x].cdr
|
||||
|
||||
#define NLENGTH(x) g_news[x].car
|
||||
#define NVALUE(x) g_news[x].cdr
|
||||
#define NSTRING(x) g_news[x].cdr
|
||||
#define NVECTOR(x) g_news[x].cdr
|
||||
|
||||
#endif
|
||||
|
||||
#define CAAR(x) CAR (CAR (x))
|
||||
#define CADR(x) CAR (CDR (x))
|
||||
#define CDAR(x) CDR (CAR (x))
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
#ifndef __MES_MES_H
|
||||
#define __MES_MES_H
|
||||
|
||||
#define POINTER_CELLS 0
|
||||
|
||||
#include <sys/types.h>
|
||||
#include "mes/cc.h"
|
||||
|
||||
|
@ -86,13 +84,8 @@ char *g_arena;
|
|||
SCM cell_arena;
|
||||
SCM cell_zero;
|
||||
|
||||
#if !POINTER_CELLS
|
||||
long g_free;
|
||||
long g_symbol;
|
||||
#else
|
||||
SCM g_free;
|
||||
SCM g_symbol;
|
||||
#endif
|
||||
|
||||
SCM *g_stack_array;
|
||||
struct scm *g_cells;
|
||||
|
|
|
@ -40,7 +40,6 @@ CFLAGS:= \
|
|||
-D _GNU_SOURCE \
|
||||
-D const= \
|
||||
-ggdb \
|
||||
-D POINTER_CELLS=0 \
|
||||
-D SYSTEM_LIBC=1 \
|
||||
-D 'MES_VERSION="git"' \
|
||||
-D 'MES_PKGDATADIR="/usr/local/share/mes"' \
|
||||
|
|
115
src/gc.c
115
src/gc.c
|
@ -28,34 +28,21 @@
|
|||
|
||||
int g_dump_filedes;
|
||||
|
||||
#if __M2_PLANET__
|
||||
#define M2_CELL_SIZE 12
|
||||
// CONSTANT M2_CELL_SIZE 12
|
||||
#else
|
||||
#define M2_CELL_SIZE 1
|
||||
// CONSTANT M2_CELL_SIZE 12
|
||||
#endif
|
||||
|
||||
char *
|
||||
cell_bytes (SCM x)
|
||||
{
|
||||
#if POINTER_CELLS
|
||||
char *p = x;
|
||||
return p + (2 * sizeof (long));
|
||||
#else
|
||||
return &CDR (x);
|
||||
#endif
|
||||
}
|
||||
|
||||
char *
|
||||
news_bytes (SCM x)
|
||||
{
|
||||
#if POINTER_CELLS
|
||||
char *p = x;
|
||||
return p + (2 * sizeof (long));
|
||||
#else
|
||||
return &NCDR (x);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -70,16 +57,8 @@ gc_init ()
|
|||
#endif
|
||||
STACK_SIZE = 20000;
|
||||
|
||||
#if !POINTER_CELLS
|
||||
JAM_SIZE = 20000;
|
||||
MAX_ARENA_SIZE = 100000000;
|
||||
#elif !__M2_PLANET__
|
||||
JAM_SIZE = 10;
|
||||
MAX_ARENA_SIZE = 10000000;
|
||||
#else
|
||||
JAM_SIZE = 10;
|
||||
MAX_ARENA_SIZE = 20000000;
|
||||
#endif
|
||||
GC_SAFETY = 2000;
|
||||
MAX_STRING = 524288;
|
||||
|
||||
|
@ -112,13 +91,8 @@ gc_init ()
|
|||
g_cells = g_arena;
|
||||
g_stack_array = g_arena + arena_bytes;
|
||||
|
||||
#if !POINTER_CELLS
|
||||
/* The vector that holds the arenea. */
|
||||
cell_arena = -1;
|
||||
#else
|
||||
/* The vector that holds the arenea. */
|
||||
cell_arena = g_cells;
|
||||
#endif
|
||||
|
||||
cell_zero = cell_arena + M2_CELL_SIZE;
|
||||
|
||||
|
@ -131,11 +105,7 @@ gc_init ()
|
|||
TYPE (cell_zero) = TCHAR;
|
||||
VALUE (cell_zero) = 'c';
|
||||
|
||||
#if !POINTER_CELLS
|
||||
g_free = 1;
|
||||
#else
|
||||
g_free = g_cells + M2_CELL_SIZE;
|
||||
#endif
|
||||
|
||||
/* FIXME: remove MES_MAX_STRING, grow dynamically. */
|
||||
g_buf = malloc (MAX_STRING);
|
||||
|
@ -144,22 +114,14 @@ gc_init ()
|
|||
long
|
||||
gc_free ()
|
||||
{
|
||||
#if POINTER_CELLS
|
||||
return (g_free - g_cells) / M2_CELL_SIZE;
|
||||
#else
|
||||
return g_free;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
gc_stats_ (char const* where)
|
||||
{
|
||||
#if !POINTER_CELLS
|
||||
long i = g_free;
|
||||
#else
|
||||
long i = g_free - g_cells;
|
||||
i = i / M2_CELL_SIZE;
|
||||
#endif
|
||||
eputs (where);
|
||||
eputs (": [");
|
||||
eputs (ltoa (i));
|
||||
|
@ -171,12 +133,8 @@ alloc (long n)
|
|||
{
|
||||
SCM x = g_free;
|
||||
g_free = g_free + (n * M2_CELL_SIZE);
|
||||
#if !POINTER_CELLS
|
||||
long i = g_free;
|
||||
#else
|
||||
long i = g_free - g_cells;
|
||||
i = i / M2_CELL_SIZE;
|
||||
#endif
|
||||
|
||||
if (i > ARENA_SIZE)
|
||||
assert_msg (0, "alloc: out of memory");
|
||||
|
@ -188,12 +146,8 @@ make_cell (long type, SCM car, SCM cdr)
|
|||
{
|
||||
SCM x = g_free;
|
||||
g_free = g_free + M2_CELL_SIZE;
|
||||
#if !POINTER_CELLS
|
||||
long i = g_free;
|
||||
#else
|
||||
long i = g_free - g_cells;
|
||||
i = i / M2_CELL_SIZE;
|
||||
#endif
|
||||
if (i > ARENA_SIZE)
|
||||
assert_msg (0, "alloc: out of memory");
|
||||
TYPE (x) = type;
|
||||
|
@ -314,26 +268,15 @@ make_string_port (SCM x) /*:((internal)) */
|
|||
void
|
||||
gc_init_news ()
|
||||
{
|
||||
#if !POINTER_CELLS
|
||||
g_news = g_cells + g_free;
|
||||
SCM ncell_arena = cell_arena;
|
||||
#else
|
||||
g_news = g_free;
|
||||
SCM ncell_arena = g_news;
|
||||
#endif
|
||||
|
||||
SCM ncell_zero = ncell_arena + M2_CELL_SIZE;
|
||||
|
||||
g_news = g_news + M2_CELL_SIZE;
|
||||
|
||||
NTYPE (ncell_arena) = TVECTOR;
|
||||
NLENGTH (ncell_arena) = LENGTH (cell_arena);
|
||||
|
||||
#if !POINTER_CELLS
|
||||
NVECTOR (ncell_arena) = 0;
|
||||
#else
|
||||
NVECTOR (ncell_arena) = g_news;
|
||||
#endif
|
||||
|
||||
NTYPE (ncell_zero) = TCHAR;
|
||||
NVALUE (ncell_zero) = 'n';
|
||||
|
@ -352,25 +295,16 @@ gc_up_arena ()
|
|||
else
|
||||
ARENA_SIZE = MAX_ARENA_SIZE - JAM_SIZE;
|
||||
long arena_bytes = (ARENA_SIZE + JAM_SIZE) * sizeof (struct scm);
|
||||
#if !POINTER_CELLS
|
||||
long stack_offset = arena_bytes;
|
||||
long realloc_bytes = arena_bytes + (STACK_SIZE * sizeof (struct scm));
|
||||
#else
|
||||
long stack_offset = (arena_bytes * 2);
|
||||
long realloc_bytes = (arena_bytes * 2) + (STACK_SIZE * sizeof (struct scm));
|
||||
#endif
|
||||
void *p = realloc (g_cells - M2_CELL_SIZE, realloc_bytes);
|
||||
if (p == 0)
|
||||
{
|
||||
eputs ("realloc failed, g_free=");
|
||||
eputs (ltoa (g_free));
|
||||
eputs (":");
|
||||
#if !POINTER_CELLS
|
||||
long i = g_free;
|
||||
#else
|
||||
long i = g_free - g_cells;
|
||||
i = i / M2_CELL_SIZE;
|
||||
#endif
|
||||
eputs (ltoa (ARENA_SIZE - i));
|
||||
eputs ("\n");
|
||||
assert_msg (0, "0");
|
||||
|
@ -468,7 +402,6 @@ gc_cellcpy (struct scm *dest, struct scm *src, size_t n)
|
|||
void
|
||||
gc_flip ()
|
||||
{
|
||||
#if POINTER_CELLS
|
||||
if (g_free - g_news > JAM_SIZE)
|
||||
JAM_SIZE = (g_free - g_news) + ((g_free - g_news) / 2);
|
||||
|
||||
|
@ -486,25 +419,8 @@ gc_flip ()
|
|||
for (i = g_stack; i < STACK_SIZE; i = i + 1)
|
||||
g_stack_array[i] = g_stack_array[i] - dist;
|
||||
|
||||
#else
|
||||
|
||||
g_cells = g_news;
|
||||
cell_arena = g_news - M2_CELL_SIZE;
|
||||
cell_zero = cell_arena + M2_CELL_SIZE;
|
||||
cell_nil = cell_zero + M2_CELL_SIZE;
|
||||
#endif
|
||||
|
||||
if (g_debug > 2)
|
||||
gc_stats_ (";;; => jam");
|
||||
|
||||
#if POINTER_CELLS
|
||||
/* Nothing. */
|
||||
return;
|
||||
#else
|
||||
if (g_free > JAM_SIZE)
|
||||
JAM_SIZE = g_free + g_free / 2;
|
||||
memcpy (g_cells, g_news, g_free * sizeof (struct scm));
|
||||
#endif
|
||||
}
|
||||
|
||||
SCM
|
||||
|
@ -618,11 +534,7 @@ gc_loop (SCM scan)
|
|||
SCM
|
||||
gc_check ()
|
||||
{
|
||||
#if !POINTER_CELLS
|
||||
long used = g_free + GC_SAFETY;
|
||||
#else
|
||||
long used = ((g_free - g_cells) / M2_CELL_SIZE) + GC_SAFETY;
|
||||
#endif
|
||||
if (used >= ARENA_SIZE)
|
||||
return gc ();
|
||||
return cell_unspecified;
|
||||
|
@ -641,11 +553,7 @@ gc_ ()
|
|||
eputs (ltoa (ARENA_SIZE - gc_free ()));
|
||||
eputs ("]...");
|
||||
}
|
||||
#if !POINTER_CELLS
|
||||
g_free = 1;
|
||||
#else
|
||||
g_free = g_news + M2_CELL_SIZE;
|
||||
#endif
|
||||
|
||||
if (ARENA_SIZE < MAX_ARENA_SIZE && g_cells == g_arena + M2_CELL_SIZE)
|
||||
{
|
||||
|
@ -760,14 +668,10 @@ void
|
|||
gc_dump_register (char const* n, SCM r)
|
||||
{
|
||||
dumps (n); dumps (": ");
|
||||
#if !POINTER_CELLS
|
||||
long i = r;
|
||||
#else
|
||||
long i = r;
|
||||
long a = g_arena;
|
||||
i = i - a;
|
||||
i = i / M2_CELL_SIZE;
|
||||
#endif
|
||||
dumps (ltoa (i));
|
||||
dumps ("\n");
|
||||
}
|
||||
|
@ -802,13 +706,8 @@ gc_dump_stack ()
|
|||
void
|
||||
gc_dump_arena (struct scm *cells, long size)
|
||||
{
|
||||
#if !POINTER_CELLS
|
||||
SCM end = size;
|
||||
struct scm *dist = 0;
|
||||
#else
|
||||
SCM end = g_cells + (size * M2_CELL_SIZE);
|
||||
struct scm *dist = cells;
|
||||
#endif
|
||||
if (g_dump_filedes == 0)
|
||||
g_dump_filedes = mes_open ("dump.mo", O_CREAT|O_WRONLY, 0644);
|
||||
dumps ("stack="); dumps (ltoa (g_stack)); dumpc ('\n');
|
||||
|
@ -834,7 +733,6 @@ gc_dump_arena (struct scm *cells, long size)
|
|||
{
|
||||
dumps (ltoa (t));
|
||||
dumpc (' ');
|
||||
#if POINTER_CELLS
|
||||
if (t == TMACRO
|
||||
|| t == TPAIR
|
||||
|| t == TREF
|
||||
|
@ -844,12 +742,10 @@ gc_dump_arena (struct scm *cells, long size)
|
|||
/* dumps ("["); dumps (ltoa (a)); dumps ("]"); */
|
||||
}
|
||||
else
|
||||
#endif
|
||||
dumps (ltoa (a));
|
||||
dumpc (' ');
|
||||
if (t != TBYTES)
|
||||
{
|
||||
#if POINTER_CELLS
|
||||
if (t == TCLOSURE
|
||||
|| t == TCONTINUATION
|
||||
|| t == TKEYWORD
|
||||
|
@ -866,9 +762,7 @@ gc_dump_arena (struct scm *cells, long size)
|
|||
dumps (ltoa ((cells->cdr - dist) / M2_CELL_SIZE));
|
||||
/* dumps ("["); dumps (ltoa (d)); dumps ("]"); */
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (t == TNUMBER && d > 1000)
|
||||
else if (t == TNUMBER && d > 1000)
|
||||
dumps (ltoa (1001));
|
||||
else
|
||||
dumps (ltoa (d));
|
||||
|
@ -890,13 +784,6 @@ gc_dump_arena (struct scm *cells, long size)
|
|||
cells = cells + c * M2_CELL_SIZE;
|
||||
size = size - c;
|
||||
}
|
||||
#if 0
|
||||
else if (t == TSTRUCT)
|
||||
{
|
||||
cells = cells + (a + 1) * M2_CELL_SIZE;
|
||||
size = size - a - 1;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
cells = cells + M2_CELL_SIZE;
|
||||
|
|
|
@ -33,11 +33,7 @@
|
|||
// CONSTANT M2_CELL_SIZE 12
|
||||
#endif
|
||||
|
||||
#if !POINTER_CELLS
|
||||
long g_symbol;
|
||||
#else
|
||||
SCM g_symbol;
|
||||
#endif
|
||||
|
||||
SCM
|
||||
init_symbol (SCM x, long type, char const *name)
|
||||
|
@ -184,11 +180,7 @@ init_symbols_ () /*:((internal)) */
|
|||
SCM
|
||||
init_symbols () /*:((internal)) */
|
||||
{
|
||||
#if !POINTER_CELLS
|
||||
g_free = 1;
|
||||
#else
|
||||
g_free = g_cells + M2_CELL_SIZE;
|
||||
#endif
|
||||
|
||||
g_symbols = 0;
|
||||
cell_nil = g_free;
|
||||
|
|
|
@ -24,26 +24,17 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if POINTER_CELLS
|
||||
#define M2_CELL_SIZE 1
|
||||
// CONSTANT M2_CELL_SIZE 12
|
||||
#else
|
||||
#define M2_CELL_SIZE 1
|
||||
// CONSTANT M2_CELL_SIZE 1
|
||||
#endif
|
||||
|
||||
int g_debug;
|
||||
|
||||
void
|
||||
test_setup ()
|
||||
{
|
||||
#if POINTER_CELLS
|
||||
cell_arena = g_arena;
|
||||
g_cells = cell_arena + M2_CELL_SIZE;
|
||||
cell_zero = g_cells;
|
||||
#else
|
||||
cell_zero = 0;
|
||||
#endif
|
||||
|
||||
cell_nil = cell_zero + M2_CELL_SIZE;
|
||||
cell_f = cell_nil + M2_CELL_SIZE;
|
||||
|
@ -186,11 +177,7 @@ main (int argc, char **argv, char **envp)
|
|||
setenv ("MES_ARENA", "100", 1);
|
||||
setenv ("MES_MAX_ARENA", "100", 1);
|
||||
gc_init ();
|
||||
#if POINTER_CELLS
|
||||
cell_zero = g_cells;
|
||||
#else
|
||||
cell_zero = 0;
|
||||
#endif
|
||||
cell_nil = cell_zero + M2_CELL_SIZE;
|
||||
cell_f = cell_nil + M2_CELL_SIZE;
|
||||
g_symbols = cell_zero;
|
||||
|
|
Loading…
Reference in a new issue