]> git.llucax.com Git - software/druntime.git/blobdiff - src/compiler/dmd/lifetime.d
add hidden function error support
[software/druntime.git] / src / compiler / dmd / lifetime.d
index 55861b06a2c23253e10ff9b59bf5574b1c72983e..e5ef60f6b903f380046f30a638501f4bb286796f 100644 (file)
@@ -81,6 +81,15 @@ private
 }
 
 
 }
 
 
+/**
+ *
+ */
+extern (C) void* _d_allocmemory(size_t sz)
+{
+    return gc_malloc(sz);
+}
+
+
 /**
  *
  */
 /**
  *
  */
@@ -397,25 +406,46 @@ struct Array
 
 
 /**
 
 
 /**
- *
+ * This function has been replaced by _d_delarray_t
  */
  */
-void* _d_allocmemory(size_t nbytes)
+extern (C) void _d_delarray(Array *p)
 {
 {
-    return gc_malloc(nbytes);
+    if (p)
+    {
+        assert(!p.length || p.data);
+
+        if (p.data)
+            gc_free(p.data);
+        p.data = null;
+        p.length = 0;
+    }
 }
 
 
 /**
  *
  */
 }
 
 
 /**
  *
  */
-extern (C) void _d_delarray(Array *p)
+extern (C) void _d_delarray_t(Array *p, TypeInfo ti)
 {
     if (p)
     {
         assert(!p.length || p.data);
 {
     if (p)
     {
         assert(!p.length || p.data);
-
         if (p.data)
         if (p.data)
+        {
+            if (ti)
+            {
+                // Call destructors on all the sub-objects
+                auto sz = ti.tsize();
+                auto pe = p.data;
+                auto pend = pe + p.length * sz;
+                while (pe != pend)
+                {
+                    pend -= sz;
+                    ti.destroy(pend);
+                }
+            }
             gc_free(p.data);
             gc_free(p.data);
+        }
         p.data = null;
         p.length = 0;
     }
         p.data = null;
         p.length = 0;
     }