/runtime/gc.d

http://github.com/wilkie/djehuty · D · 166 lines · 114 code · 44 blank · 8 comment · 0 complexity · 351c78c5aeb08a0741a5487a2a996c03 MD5 · raw file

  1. /*
  2. * gc.d
  3. *
  4. * This module implements the D runtime functions for interfacing the
  5. * garbage collector.
  6. *
  7. */
  8. module runtime.gc;
  9. import synch.atomic;
  10. extern(C):
  11. import scaffold.system;
  12. void gc_init() {
  13. GarbageCollector._initialize();
  14. }
  15. void gc_term() {
  16. GarbageCollector._terminate();
  17. }
  18. void gc_enable() {
  19. GarbageCollector.enable();
  20. }
  21. void gc_disable() {
  22. GarbageCollector.disable();
  23. }
  24. void gc_collect() {
  25. GarbageCollector.collect();
  26. }
  27. uint gc_getAttr(void* p) {
  28. return 0;
  29. }
  30. uint gc_setAttr(void* p, uint a) {
  31. return 0;
  32. }
  33. uint gc_clrAttr(void* p, uint a) {
  34. return 0;
  35. }
  36. void* gc_malloc(size_t sz, uint ba = 0) {
  37. return GarbageCollector.malloc(sz).ptr;
  38. }
  39. void* gc_calloc(size_t sz, uint ba = 0) {
  40. return GarbageCollector.calloc(sz).ptr;
  41. }
  42. void* gc_realloc(ubyte* p, size_t sz, uint ba = 0) {
  43. return GarbageCollector.realloc(p[0..sz], sz).ptr;
  44. }
  45. size_t gc_extend(ubyte* p, size_t mx, size_t sz) {
  46. return GarbageCollector.extend(p[0..mx], mx, sz);
  47. }
  48. void gc_free(ubyte* p) {
  49. return GarbageCollector.free(p[0..1]);
  50. }
  51. size_t gc_sizeOf(ubyte* p) {
  52. return GarbageCollector.sizeOf(p[0..1]);
  53. }
  54. void gc_addRoot(ubyte* p) {
  55. return GarbageCollector.addRoot(p[0..1]);
  56. }
  57. void gc_addRange(ubyte* p, size_t sz) {
  58. return GarbageCollector.addRange(p[0..sz]);
  59. }
  60. void gc_removeRoot(ubyte* p) {
  61. return GarbageCollector.removeRoot(p[0..1]);
  62. }
  63. void gc_removeRange(ubyte* p) {
  64. return GarbageCollector.removeRange(p[0..1]);
  65. }
  66. // Implementation
  67. struct Pool {
  68. }
  69. class GarbageCollector {
  70. public:
  71. static:
  72. void enable() {
  73. Atomic.decrement(_disabled);
  74. }
  75. void disable() {
  76. Atomic.increment(_disabled);
  77. }
  78. void minimize() {
  79. }
  80. void collect() {
  81. }
  82. ubyte[] malloc(size_t length) {
  83. return null;
  84. }
  85. ubyte[] realloc(ubyte[] original, size_t length) {
  86. return null;
  87. }
  88. ubyte[] calloc(size_t length) {
  89. return null;
  90. }
  91. size_t extend(ubyte[] original, size_t max, size_t size) {
  92. return 0;
  93. }
  94. size_t reserve(size_t length) {
  95. return 0;
  96. }
  97. void free(ubyte[] memory) {
  98. }
  99. void* addressOf(ubyte[] memory) {
  100. return null;
  101. }
  102. size_t sizeOf(ubyte[] memory) {
  103. return 0;
  104. }
  105. void addRoot(ubyte[] memory) {
  106. }
  107. void addRange(ubyte[] range) {
  108. }
  109. void removeRoot(ubyte[] memory) {
  110. }
  111. void removeRange(ubyte[] range) {
  112. }
  113. private:
  114. void _initialize() {
  115. _inited = 1;
  116. }
  117. void _terminate() {
  118. _inited = 0;
  119. }
  120. ulong _disabled;
  121. bool _inited;
  122. }