diff lphobos/gc/gcx.d @ 131:5825d48b27d1 trunk

[svn r135] * Merged DMD 1.025 * * Fixed a minor linking order mishap * * Added an command line option -annotate * * Fixed some problems with running optimizations * * Added std.stdio and dependencies to lphobos (still not 100% working, but compiles and links) * * Fixed problems with passing aggregate types to variadic functions * * Added initial code towards full GC support, currently based on malloc and friends, not all the runtime calls the GC yet for memory * * Fixed problems with resolving nested function context pointers for some heavily nested cases * * Redid function argument passing + other minor code cleanups, still lots to do on this end... *
author lindquist
date Fri, 04 Jan 2008 01:38:42 +0100
parents
children 373489eeaf90
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lphobos/gc/gcx.d	Fri Jan 04 01:38:42 2008 +0100
@@ -0,0 +1,243 @@
+/*
+ *  Copyright (C) 2004 by Digital Mars, www.digitalmars.com
+ *  Written by Walter Bright
+ *
+ *  This software is provided 'as-is', without any express or implied
+ *  warranty. In no event will the authors be held liable for any damages
+ *  arising from the use of this software.
+ *
+ *  Permission is granted to anyone to use this software for any purpose,
+ *  including commercial applications, and to alter it and redistribute it
+ *  freely, subject to the following restrictions:
+ *
+ *  o  The origin of this software must not be misrepresented; you must not
+ *     claim that you wrote the original software. If you use this software
+ *     in a product, an acknowledgment in the product documentation would be
+ *     appreciated but is not required.
+ *  o  Altered source versions must be plainly marked as such, and must not
+ *     be misrepresented as being the original software.
+ *  o  This notice may not be removed or altered from any source
+ *     distribution.
+ */
+
+// D Garbage Collector stub to prevent linking in gc
+
+/*
+ * Modified for use as the preliminary GC for LLVMDC (LLVM D Compiler)
+ * by Tomas Lindquist Olsen, Dec 2007
+ */
+
+module gcx;
+
+debug=PRINTF;
+
+/***************************************************/
+
+
+version (Win32)
+{
+    import win32;
+}
+
+version (linux)
+{
+    import gclinux;
+}
+
+import gcstats;
+import stdc = std.c.stdlib;
+
+
+//alias GC* gc_t;
+alias GC gc_t;
+
+//struct GCStats { }
+
+/* ============================ GC =============================== */
+
+
+//alias int size_t;
+alias void (*GC_FINALIZER)(void *p, bool dummy);
+
+const uint GCVERSION = 1;   // increment every time we change interface
+                // to GC.
+
+class GC
+{
+    uint gcversion = GCVERSION;
+
+    void *gcx;          // implementation
+
+    void initialize()
+    {
+    debug(PRINTF) printf("GC initialize()\n");
+    }
+
+
+    void Dtor()
+    {
+    debug(PRINTF) printf("GC Dtor()\n");
+    }
+
+    invariant
+    {
+    debug(PRINTF) printf("GC invariant()\n");
+    }
+
+    void *malloc(size_t size)
+    {
+    debug(PRINTF) printf("GC malloc()\n");
+    return malloc(size);
+    }
+
+    void *mallocNoSync(size_t size)
+    {
+    debug(PRINTF) printf("GC mallocNoSync()\n");
+    return malloc(size);
+    }
+
+
+    void *calloc(size_t size, size_t n)
+    {
+    debug(PRINTF) printf("GC calloc()\n");
+    return calloc(n, size);
+    }
+
+
+    void *realloc(void *p, size_t size)
+    {
+    debug(PRINTF) printf("GC realloc()\n");
+    return realloc(p, size);
+    }
+
+
+    void free(void *p)
+    {
+    debug(PRINTF) printf("GC free()\n");
+    stdc.free(p);
+    }
+
+    size_t capacity(void *p)
+    {
+    debug(PRINTF) printf("GC capacity()\n");
+    return 0;
+    }
+
+    void check(void *p)
+    {
+    debug(PRINTF) printf("GC check()\n");
+    }
+
+
+    void setStackBottom(void *p)
+    {
+    debug(PRINTF) printf("GC setStackBottom()\n");
+    }
+
+    static void scanStaticData(gc_t g)
+    {
+    void *pbot;
+    void *ptop;
+    uint nbytes;
+
+    debug(PRINTF) printf("GC scanStaticData()\n");
+    //debug(PRINTF) printf("+GC.scanStaticData()\n");
+    os_query_staticdataseg(&pbot, &nbytes);
+    ptop = pbot + nbytes;
+    g.addRange(pbot, ptop);
+    //debug(PRINTF) printf("-GC.scanStaticData()\n");
+    }
+
+    static void unscanStaticData(gc_t g)
+    {
+    void *pbot;
+    uint nbytes;
+
+    debug(PRINTF) printf("GC unscanStaticData()\n");
+    os_query_staticdataseg(&pbot, &nbytes);
+    g.removeRange(pbot);
+    }
+
+
+    void addRoot(void *p)   // add p to list of roots
+    {
+    debug(PRINTF) printf("GC addRoot()\n");
+    }
+
+    void removeRoot(void *p)    // remove p from list of roots
+    {
+    debug(PRINTF) printf("GC removeRoot()\n");
+    }
+
+    void addRange(void *pbot, void *ptop)   // add range to scan for roots
+    {
+    debug(PRINTF) printf("GC addRange()\n");
+    }
+
+    void removeRange(void *pbot)        // remove range
+    {
+    debug(PRINTF) printf("GC removeRange()\n");
+    }
+
+    void fullCollect()      // do full garbage collection
+    {
+    debug(PRINTF) printf("GC fullCollect()\n");
+    }
+
+    void fullCollectNoStack()       // do full garbage collection
+    {
+    debug(PRINTF) printf("GC fullCollectNoStack()\n");
+    }
+
+    void genCollect()   // do generational garbage collection
+    {
+    debug(PRINTF) printf("GC genCollect()\n");
+    }
+
+    void minimize() // minimize physical memory usage
+    {
+    debug(PRINTF) printf("GC minimize()\n");
+    }
+
+    void setFinalizer(void *p, GC_FINALIZER pFn)
+    {
+    debug(PRINTF) printf("GC setFinalizer()\n");
+    }
+
+    void enable()
+    {
+    debug(PRINTF) printf("GC enable()\n");
+    }
+
+    void disable()
+    {
+    debug(PRINTF) printf("GC disable()\n");
+    }
+
+    void getStats(out GCStats stats)
+    {
+    debug(PRINTF) printf("GC getStats()\n");
+    }
+
+    void hasPointers(void* p)
+    {
+    debug(PRINTF) printf("GC hasPointers()\n");
+    }
+
+    void hasNoPointers(void* p)
+    {
+    debug(PRINTF) printf("GC hasNoPointers()\n");
+    }
+
+    void setV1_0()
+    {
+    debug(PRINTF) printf("GC setV1_0()\n");
+    assert(0);
+    }
+
+    size_t extend(void* p, size_t minsize, size_t maxsize)
+    {
+    debug(PRINTF) printf("GC extend()\n");
+    assert(0);
+    }
+}