view tango-0.99.8.patch @ 1508:e1e93343fc11

Move function codegen data from IrFunction to new FuncGen. This change reduces memory consumption significantly by releasing the memory held by the STL containers that are now inside FuncGen.
author Christian Kamm <kamm incasoftware de>
date Sat, 20 Jun 2009 19:11:44 +0200
parents 2a8d4f98b543
children
line wrap: on
line source

Index: object.di
===================================================================
--- object.di	(revision 4578)
+++ object.di	(working copy)
@@ -35,15 +35,17 @@
     Interface[] interfaces;
     ClassInfo   base;
     void*       destructor;
-    void(*classInvariant)(Object);
+    void*       classInvariant;
     uint        flags;
     // 1:       // IUnknown
     // 2:       // has no possible pointers into GC memory
     // 4:       // has offTi[] member
     // 8:       // has constructors
+    // 32:      // has typeinfo    
     void*       deallocator;
     OffsetTypeInfo[] offTi;
     void*       defaultConstructor;
+    TypeInfo typeinfo;
 
     static ClassInfo find(char[] classname);
     Object create();
@@ -127,10 +129,11 @@
     char[] name;
     void[] m_init;
 
-    uint function(void*)      xtoHash;
-    int function(void*,void*) xopEquals;
-    int function(void*,void*) xopCmp;
-    char[] function(void*)    xtoString;
+    // These are ONLY for use as a delegate.funcptr!
+    hash_t function()   xtoHash;
+    int function(void*) xopEquals;
+    int function(void*) xopCmp;
+    char[] function()   xtoString;
 
     uint m_flags;
 }
Index: lib/common/tango/core/Thread.d
===================================================================
--- lib/common/tango/core/Thread.d	(revision 4578)
+++ lib/common/tango/core/Thread.d	(working copy)
@@ -295,7 +295,7 @@
                 }
                 else version (X86_64)
                 {
-                    ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15;
+                    ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r8,r9,r10,r11,r12,r13,r14,r15;
                     asm
                     {
                         movq rax[RBP], RAX        ;
@@ -306,6 +306,8 @@
                         movq rsi[RBP], RSI        ;
                         movq rdi[RBP], RDI        ;
                         movq rsp[RBP], RSP        ;
+                        movq  r8[RBP], R8         ;
+                        movq  r9[RBP], R9         ;
                         movq r10[RBP], R10        ;
                         movq r11[RBP], R11        ;
                         movq r12[RBP], R12        ;
Index: lib/gc/basic/gcx.d
===================================================================
--- lib/gc/basic/gcx.d	(revision 4578)
+++ lib/gc/basic/gcx.d	(working copy)
@@ -2198,7 +2198,7 @@
             }
             else version (X86_64)
             {
-                ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r10,r11,r12,r13,r14,r15;
+                ulong rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp,r8,r9,r10,r11,r12,r13,r14,r15;
                 asm
                 {
                     movq rax[RBP], RAX      ;
@@ -2209,6 +2209,8 @@
                     movq rsi[RBP], RSI      ;
                     movq rdi[RBP], RDI      ;
                     movq rsp[RBP], RSP      ;
+                    movq  r8[RBP], R8       ;
+                    movq  r9[RBP], R9       ;
                     movq r10[RBP], R10      ;
                     movq r11[RBP], R11      ;
                     movq r12[RBP], R12      ;
Index: tango/text/convert/Layout.d
===================================================================
--- tango/text/convert/Layout.d	(revision 4578)
+++ tango/text/convert/Layout.d	(working copy)
@@ -660,8 +660,12 @@
 
                        case TypeCode.STRUCT:
                             auto s = cast(TypeInfo_Struct) type;
-                            if (s.xtoString)
-                                return Utf.fromString8 (s.xtoString(p), result);
+                            if (s.xtoString) {
+                                char[] delegate() toString;
+                                toString.ptr = p;
+                                toString.funcptr = cast(char[] function()) s.xtoString;
+                                return Utf.fromString8 (toString(), result);
+                            }
                             goto default;
 
                        case TypeCode.INTERFACE:
Index: tango/net/Socket.d
===================================================================
--- tango/net/Socket.d	(revision 4578)
+++ tango/net/Socket.d	(working copy)
@@ -1545,10 +1545,10 @@
 
 abstract class Address
 {
-        protected sockaddr* name();
-        protected int nameLen();
-        AddressFamily addressFamily();
-        char[] toString();
+        abstract protected sockaddr* name();
+        abstract protected int nameLen();
+        abstract AddressFamily addressFamily();
+        abstract char[] toString();
 
         /***********************************************************************