From 8858214f83db5c36500285d8f0a8dc1e856c2612 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Sun, 17 Jul 2011 19:38:06 -0700 Subject: [PATCH] fix Array --- src/arraytypes.h | 56 ++++++++++++++++++++++++------------------------ src/doc.c | 2 +- src/e2ir.c | 2 +- src/lib.h | 4 ++-- src/mars.h | 6 +++--- src/root/array.c | 40 +++++++++++++++++----------------- src/root/root.c | 4 +--- src/root/root.h | 48 ++++++++++++++++++++--------------------- src/tk/mem.c | 16 +++++++------- src/todt.c | 2 +- 10 files changed, 89 insertions(+), 91 deletions(-) diff --git a/src/arraytypes.h b/src/arraytypes.h index b31e509b5a1b..be854a62c738 100644 --- a/src/arraytypes.h +++ b/src/arraytypes.h @@ -18,60 +18,60 @@ #include "root.h" -typedef Array TemplateParameters; +typedef ArrayBase TemplateParameters; -typedef Array Expressions; +typedef ArrayBase Expressions; -typedef Array Statements; +typedef ArrayBase Statements; -typedef Array BaseClasses; +typedef ArrayBase BaseClasses; -typedef Array ClassDeclarations; +typedef ArrayBase ClassDeclarations; -typedef Array Dsymbols; +typedef ArrayBase Dsymbols; -typedef Array Objects; +typedef ArrayBase Objects; -typedef Array FuncDeclarations; +typedef ArrayBase FuncDeclarations; -typedef Array Parameters; +typedef ArrayBase Parameters; -typedef Array Identifiers; +typedef ArrayBase Identifiers; -typedef Array Initializers; +typedef ArrayBase Initializers; -typedef Array VarDeclarations; +typedef ArrayBase VarDeclarations; -typedef Array Types; +typedef ArrayBase Types; -typedef Array ScopeDsymbols; +typedef ArrayBase ScopeDsymbols; -typedef Array Catches; +typedef ArrayBase Catches; -typedef Array StaticDtorDeclarations; +typedef ArrayBase StaticDtorDeclarations; -typedef Array SharedStaticDtorDeclarations; +typedef ArrayBase SharedStaticDtorDeclarations; -typedef Array AliasDeclarations; +typedef ArrayBase AliasDeclarations; -typedef Array Modules; +typedef ArrayBase Modules; -typedef Array Files; +typedef ArrayBase Files; -typedef Array CaseStatements; +typedef ArrayBase CaseStatements; -typedef Array CompoundStatements; +typedef ArrayBase CompoundStatements; -typedef Array GotoCaseStatements; +typedef ArrayBase GotoCaseStatements; -typedef Array TemplateInstances; +typedef ArrayBase TemplateInstances; -typedef Array Strings; +//typedef ArrayBase Strings; -typedef Array Voids; +typedef ArrayBase Voids; -typedef Array Blocks; +typedef ArrayBase Blocks; -typedef Array Symbols; +typedef ArrayBase Symbols; #endif diff --git a/src/doc.c b/src/doc.c index 27f83c165fa6..aa4ac3b4ad5a 100644 --- a/src/doc.c +++ b/src/doc.c @@ -65,7 +65,7 @@ struct MacroSection : Section void write(DocComment *dc, Scope *sc, Dsymbol *s, OutBuffer *buf); }; -typedef Array
Sections; +typedef ArrayBase
Sections; struct DocComment { diff --git a/src/e2ir.c b/src/e2ir.c index e7ca936b5312..d5ce87f291d5 100644 --- a/src/e2ir.c +++ b/src/e2ir.c @@ -44,7 +44,7 @@ static char __file__[] = __FILE__; /* for tassert.h */ #include "tassert.h" -typedef Array Elems; +typedef ArrayBase Elems; elem *addressElem(elem *e, Type *t); elem *array_toPtr(Type *t, elem *e); diff --git a/src/lib.h b/src/lib.h index e68e242b3874..abd31cb2022c 100644 --- a/src/lib.h +++ b/src/lib.h @@ -25,8 +25,8 @@ struct ObjSymbol #include "arraytypes.h" -typedef Array ObjModules; -typedef Array ObjSymbols; +typedef ArrayBase ObjModules; +typedef ArrayBase ObjSymbols; struct Library { diff --git a/src/mars.h b/src/mars.h index b10acf6e5770..2e8124348454 100644 --- a/src/mars.h +++ b/src/mars.h @@ -121,9 +121,9 @@ void unittests(); struct OutBuffer; // Can't include arraytypes.h here, need to declare these directly. -template struct Array; -typedef Array Identifiers; -typedef Array Strings; +template struct ArrayBase; +typedef ArrayBase Identifiers; +typedef ArrayBase Strings; // Put command line switches in here struct Param diff --git a/src/root/array.c b/src/root/array.c index 64d75677891e..e1828598d220 100644 --- a/src/root/array.c +++ b/src/root/array.c @@ -46,20 +46,20 @@ /********************************* Array ****************************/ -ArrayBase::ArrayBase() +Array::Array() { data = SMALLARRAYCAP ? &smallarray[0] : NULL; dim = 0; allocdim = SMALLARRAYCAP; } -ArrayBase::~ArrayBase() +Array::~Array() { if (data != &smallarray[0]) mem.free(data); } -void ArrayBase::mark() +void Array::mark() { unsigned u; mem.mark(data); @@ -67,9 +67,9 @@ void ArrayBase::mark() mem.mark(data[u]); // BUG: what if arrays of Object's? } -void ArrayBase::reserve(unsigned nentries) +void Array::reserve(unsigned nentries) { - //printf("ArrayBase::reserve: dim = %d, allocdim = %d, nentries = %d\n", dim, allocdim, nentries); + //printf("Array::reserve: dim = %d, allocdim = %d, nentries = %d\n", dim, allocdim, nentries); if (allocdim - dim < nentries) { if (allocdim == 0) @@ -96,7 +96,7 @@ void ArrayBase::reserve(unsigned nentries) } } -void ArrayBase::setDim(unsigned newdim) +void Array::setDim(unsigned newdim) { if (dim < newdim) { @@ -105,7 +105,7 @@ void ArrayBase::setDim(unsigned newdim) dim = newdim; } -void ArrayBase::fixDim() +void Array::fixDim() { if (dim != allocdim) { @@ -123,18 +123,18 @@ void ArrayBase::fixDim() } } -void ArrayBase::push(void *ptr) +void Array::push(void *ptr) { reserve(1); data[dim++] = ptr; } -void *ArrayBase::pop() +void *Array::pop() { return data[--dim]; } -void ArrayBase::shift(void *ptr) +void Array::shift(void *ptr) { reserve(1); memmove(data + 1, data, dim * sizeof(*data)); @@ -142,7 +142,7 @@ void ArrayBase::shift(void *ptr) dim++; } -void ArrayBase::insert(unsigned index, void *ptr) +void Array::insert(unsigned index, void *ptr) { reserve(1); memmove(data + index + 1, data + index, (dim - index) * sizeof(*data)); @@ -151,7 +151,7 @@ void ArrayBase::insert(unsigned index, void *ptr) } -void ArrayBase::insert(unsigned index, ArrayBase *a) +void Array::insert(unsigned index, Array *a) { if (a) { unsigned d; @@ -170,19 +170,19 @@ void ArrayBase::insert(unsigned index, ArrayBase *a) * Append array a to this array. */ -void ArrayBase::append(ArrayBase *a) +void Array::append(Array *a) { insert(dim, a); } -void ArrayBase::remove(unsigned i) +void Array::remove(unsigned i) { if (dim - i - 1) memmove(data + i, data + i + 1, (dim - i - 1) * sizeof(data[0])); dim--; } -char *ArrayBase::toChars() +char *Array::toChars() { unsigned len; unsigned u; @@ -214,12 +214,12 @@ char *ArrayBase::toChars() return str; } -void ArrayBase::zero() +void Array::zero() { memset(data,0,dim * sizeof(data[0])); } -void *ArrayBase::tos() +void *Array::tos() { return dim ? data[dim - 1] : NULL; } @@ -236,7 +236,7 @@ int return ox->compare(oy); } -void ArrayBase::sort() +void Array::sort() { if (dim) { @@ -244,9 +244,9 @@ void ArrayBase::sort() } } -ArrayBase *ArrayBase::copy() +Array *Array::copy() { - ArrayBase *a = new ArrayBase(); + Array *a = new Array(); a->setDim(dim); memcpy(a->data, data, dim * sizeof(void *)); diff --git a/src/root/root.c b/src/root/root.c index a3612f9825eb..deda8d7d9217 100644 --- a/src/root/root.c +++ b/src/root/root.c @@ -1,5 +1,5 @@ -// Copyright (c) 1999-2010 by Digital Mars +// Copyright (c) 1999-2011 by Digital Mars // All Rights Reserved // written by Walter Bright // http://www.digitalmars.com @@ -46,8 +46,6 @@ #include "dchar.h" #include "rmem.h" -#include "../arraytypes.h" - #if 0 //__SC__ //def DEBUG extern "C" void __cdecl _assert(void *e, void *f, unsigned line) { diff --git a/src/root/root.h b/src/root/root.h index 8757108a4742..d33cf081f0e3 100644 --- a/src/root/root.h +++ b/src/root/root.h @@ -62,9 +62,9 @@ longlong randomx(); struct OutBuffer; // Can't include arraytypes.h here, need to declare these directly. -template struct Array; -typedef Array Files; -typedef Array Strings; +template struct ArrayBase; +typedef ArrayBase Files; +typedef ArrayBase Strings; struct Object @@ -312,7 +312,7 @@ struct OutBuffer : Object char *extractString(); }; -struct ArrayBase : Object +struct Array : Object { unsigned dim; protected: @@ -324,9 +324,9 @@ struct ArrayBase : Object void *smallarray[SMALLARRAYCAP]; // inline storage for small arrays public: - ArrayBase(); - ~ArrayBase(); - //ArrayBase(const ArrayBase&); + Array(); + ~Array(); + //Array(const Array&); void mark(); char *toChars(); @@ -338,48 +338,48 @@ struct ArrayBase : Object void shift(void *ptr); void insert(unsigned index, void *ptr); protected: - void insert(unsigned index, ArrayBase *a); - void append(ArrayBase *a); + void insert(unsigned index, Array *a); + void append(Array *a); public: void remove(unsigned i); void zero(); void *tos(); void sort(); protected: - ArrayBase *copy(); + Array *copy(); }; template -struct Array : ArrayBase +struct ArrayBase : Array { TYPE **tdata() { return (TYPE **)data; } - + void insert(unsigned index, TYPE *v) { - ArrayBase::insert(index, (void *)v); + Array::insert(index, (void *)v); } - - void insert(unsigned index, Array *a) + + void insert(unsigned index, ArrayBase *a) { - ArrayBase::insert(index, (ArrayBase *)a); + Array::insert(index, (Array *)a); } - - void append(Array *a) + + void append(ArrayBase *a) { - ArrayBase::append((ArrayBase *)a); + Array::append((Array *)a); } - + void push(TYPE *a) { - ArrayBase::push((void *)a); + Array::push((void *)a); } - - Array *copy() + + ArrayBase *copy() { - return (Array *)ArrayBase::copy(); + return (ArrayBase *)Array::copy(); } }; diff --git a/src/tk/mem.c b/src/tk/mem.c index 15b6592c1bd1..7744e63958f9 100644 --- a/src/tk/mem.c +++ b/src/tk/mem.c @@ -342,7 +342,7 @@ static struct mem_debug #define mem_ptrtodl(p) ((struct mem_debug *) ((char *)p - offsetof(struct mem_debug,data[0]))) /* Convert from a mem_debug struct to a mem_ptr. */ -#define mem_dltoptr(dl) ( &((dl)->tdata()[0])) +#define mem_dltoptr(dl) ((void *) &((dl)->data[0])) /***************************** * Set new value of file,line @@ -439,9 +439,9 @@ void *mem_calloc_debug(unsigned n, const char *fil, int lin) dl->Mnbytes = n; dl->Mbeforeval = BEFOREVAL; #if SUN || SUN386 /* bus error if we store a long at an odd address */ - memcpy(&(dl->tdata()[n]),&afterval,sizeof(AFTERVAL)); + memcpy(&(dl->data[n]),&afterval,sizeof(AFTERVAL)); #else - * &(dl->tdata()[n]) = AFTERVAL; + *(long *) &(dl->data[n]) = AFTERVAL; #endif /* Add dl to start of allocation list */ @@ -476,9 +476,9 @@ void mem_free_debug(void *ptr, const char *fil, int lin) goto err2; } #if SUN || SUN386 /* Bus error if we read a long from an odd address */ - if (memcmp(&dl->tdata()[dl->Mnbytes],&afterval,sizeof(AFTERVAL)) != 0) + if (memcmp(&dl->data[dl->Mnbytes],&afterval,sizeof(AFTERVAL)) != 0) #else - if (* &dl->tdata()[dl->Mnbytes] != AFTERVAL) + if (*(long *) &dl->data[dl->Mnbytes] != AFTERVAL) #endif { PRINT "Pointer x%lx overrun\n",(long)ptr); @@ -563,9 +563,9 @@ static void mem_checkdl(struct mem_debug *dl) goto err2; } #if SUN || SUN386 /* Bus error if we read a long from an odd address */ - if (memcmp(&dl->tdata()[dl->Mnbytes],&afterval,sizeof(AFTERVAL)) != 0) + if (memcmp(&dl->data[dl->Mnbytes],&afterval,sizeof(AFTERVAL)) != 0) #else - if (* &dl->tdata()[dl->Mnbytes] != AFTERVAL) + if (*(long *) &dl->data[dl->Mnbytes] != AFTERVAL) #endif { PRINT "Pointer x%lx overrun\n",(long)p); @@ -600,7 +600,7 @@ void mem_checkptr(void *p) for (dl = mem_alloclist.Mnext; dl != NULL; dl = dl->Mnext) { - if (p >= &(dl->tdata()[0]) && + if (p >= (void *) &(dl->data[0]) && p < (void *)((char *)dl + sizeof(struct mem_debug)-1 + dl->Mnbytes)) goto L1; } diff --git a/src/todt.c b/src/todt.c index 5845d47335bc..cc50c402868a 100644 --- a/src/todt.c +++ b/src/todt.c @@ -42,7 +42,7 @@ extern Symbol *static_sym(); -typedef Array Dts; +typedef ArrayBase Dts; /* ================================================================ */