}
+ /**
+ *
+ */
+ int delegate(int delegate(inout void*)) rootIter()
+ {
+ if (!thread_needLock())
+ {
+ return &gcx.rootIter;
+ }
+ else synchronized (gcLock)
+ {
+ return &gcx.rootIter;
+ }
+ }
+
+
/**
* add range to scan for roots
*/
}
+ /**
+ *
+ */
+ int delegate(int delegate(inout Range)) rangeIter()
+ {
+ if (!thread_needLock())
+ {
+ return &gcx.rangeIter;
+ }
+ else synchronized (gcLock)
+ {
+ return &gcx.rangeIter;
+ }
+ }
+
+
/**
* do full garbage collection
*/
void initialize()
{ int dummy;
- (cast(byte*)this)[0 .. Gcx.sizeof] = 0;
+ (cast(byte*)&this)[0 .. Gcx.sizeof] = 0;
stackBottom = cast(char*)&dummy;
log_init();
debug (THREADINVARIANT)
}
+ /**
+ *
+ */
+ int rootIter(int delegate(inout void*) dg)
+ {
+ int result = 0;
+ for( size_t i = 0; i < nroots; ++i )
+ {
+ result = dg(roots[i]);
+ if (result)
+ break;
+ }
+ return result;
+ }
+
+
/**
*
*/
}
+ /**
+ *
+ */
+ int rangeIter(int delegate(inout Range) dg)
+ {
+ int result = 0;
+ for( size_t i = 0; i < nranges; ++i )
+ {
+ result = dg(ranges[i]);
+ if (result)
+ break;
+ }
+ return result;
+ }
+
+
/**
* Find Pool that pointer is in.
* Return null if not in a Pool.