Difference between revisions of "Runtime Hooks"

From D Wiki
Jump to: navigation, search
(split out associative arrays)
 
(22 intermediate revisions by 4 users not shown)
Line 30: Line 30:
 
|-
 
|-
 
| _d_assocarrayliteralTX || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aaA.d#L737  rt/aaA.d]||
 
| _d_assocarrayliteralTX || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aaA.d#L737  rt/aaA.d]||
 +
|}
 +
 +
 +
{| class="wikitable" width="100%"
 +
|+dynamic array support
 +
|-
 +
!mangled name!!calling convention!!description!!druntime definition!!comment
 +
|-
 +
| _adEq || extern(C)|| array equality test|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L368  rt/adi.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L352 __equals]
 +
|-
 +
| _adEq2 || extern(C)|| array equality test|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L389  rt/adi.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L352 __equals]
 +
|-
 +
| _adEqBit || ???|| || ???||Can't find this in druntime. Deprecated?
 +
|-
 +
| _adReverse || extern(C)|| implement .reverse property (generic)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L236  rt/adi.d]|| [https://dlang.org/deprecate.html#.sort%20and%20.reverse%20properties%20for%20arrays Removed from the language] in v2.075
 +
|-
 +
| _adReverseChar || extern(C)|| implement .reverse property (char array)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L47  rt/adi.d]|| [https://dlang.org/deprecate.html#.sort%20and%20.reverse%20properties%20for%20arrays Removed from the language] in v2.075
 +
|-
 +
| _adReverseWchar || extern(C)|| implement .reverse property (wchar array)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L142  rt/adi.d]|| [https://dlang.org/deprecate.html#.sort%20and%20.reverse%20properties%20for%20arrays Removed from the language] in v2.075
 +
|-
 +
| _adSort || extern(C)|| Implement .sort property (generic)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/qsort.d#L43  rt/qsort.d]|| [https://dlang.org/deprecate.html#.sort%20and%20.reverse%20properties%20for%20arrays Removed from the language] in v2.075
 +
|-
 +
| _adSortChar || extern(C)|| Implement .sort property (char array)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L321  rt/adi.d]|| [https://dlang.org/deprecate.html#.sort%20and%20.reverse%20properties%20for%20arrays Removed from the language] in v2.075
 +
|-
 +
| _adSortWchar || extern(C)|| Implement .sort property (wchar array)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L343  rt/adi.d]|| [https://dlang.org/deprecate.html#.sort%20and%20.reverse%20properties%20for%20arrays Removed from the language] in v2.075
 
|}
 
|}
  
Line 57: Line 82:
  
 
{| class="wikitable" width="100%"
 
{| class="wikitable" width="100%"
|+List of unsorted runtime hooks
+
|+hooks for thread support
 
|-
 
|-
 
!mangled name!!calling convention!!description!!druntime definition!!comment
 
!mangled name!!calling convention!!description!!druntime definition!!comment
 
|-
 
|-
| D9invariant12_d_invariantFC6ObjectZv || extern(D) || || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/invariant.d#L19 rt/invariant.d]||
+
| ___tls_get_addr || extern(D)|| Returns the thread local address of a variable. Used to emulate thread local storage on Mac OS X. || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/core/thread.d#L4550 core/thread.d]|| Only used on Mac OS X.
 +
|}
 +
 
 +
{| class="wikitable" width="100%"
 +
|+hooks for GC support
 
|-
 
|-
| _D9invariant12_d_invariantFC6ObjectZv || || || || ???
+
!mangled name!!calling convention!!description!!druntime definition!!comment
 
|-
 
|-
| _aApplyRcd1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L31  rt/aApplyR.d]||
+
| RTInfo || (not a function) || Used to create runtime type information which can then be obtained by the GC at runtime. || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/object_.d#L2629 object_.d]|| This is a template which gets instantiated for '''every''' type.
|-
+
|}
| _aApplyRcd2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L493  rt/aApplyR.d]||
+
 
|-
+
{| class="wikitable" width="100%"
| _aApplyRcw1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L169  rt/aApplyR.d]||
+
|+utf decoding for foreach loops
|-
 
| _aApplyRcw2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L636  rt/aApplyR.d]||
 
|-
 
| _aApplyRdc1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L341  rt/aApplyR.d]||
 
|-
 
| _aApplyRdc2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L812  rt/aApplyR.d]||
 
|-
 
| _aApplyRdw1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L420 rt/aApplyR.d]||
 
|-
 
| _aApplyRdw2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L892  rt/aApplyR.d]||
 
|-
 
| _aApplyRwc1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L256  rt/aApplyR.d]||
 
|-
 
| _aApplyRwc2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L725  rt/aApplyR.d]||
 
|-
 
| _aApplyRwd1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L105  rt/aApplyR.d]||
 
|-
 
| _aApplyRwd2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L570  rt/aApplyR.d]||
 
 
|-
 
|-
 
| _aApplycd1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApply.d#L26  rt/aApply.d]||
 
| _aApplycd1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApply.d#L26  rt/aApply.d]||
Line 112: Line 123:
 
|-
 
|-
 
| _aApplywd2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApply.d#L227  rt/aApply.d]||
 
| _aApplywd2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApply.d#L227  rt/aApply.d]||
 +
|}
 +
 +
{| class="wikitable" width="100%"
 +
|+utf decoding for foreach_reverse loops
 +
|-
 +
| _aApplyRcd1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L31  rt/aApplyR.d]||
 +
|-
 +
| _aApplyRcd2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L493  rt/aApplyR.d]||
 +
|-
 +
| _aApplyRcw1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L169  rt/aApplyR.d]||
 +
|-
 +
| _aApplyRcw2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L636  rt/aApplyR.d]||
 +
|-
 +
| _aApplyRdc1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L341  rt/aApplyR.d]||
 
|-
 
|-
| _adCmp || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L415 rt/adi.d]||
+
| _aApplyRdc2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L812 rt/aApplyR.d]||
 
|-
 
|-
| _adCmp2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L445 rt/adi.d]||
+
| _aApplyRdw1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L420 rt/aApplyR.d]||
 
|-
 
|-
| _adCmpBit || ???|| || ???||
+
| _aApplyRdw2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L892  rt/aApplyR.d]||
 
|-
 
|-
| _adCmpChar || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L471 rt/adi.d]||
+
| _aApplyRwc1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L256 rt/aApplyR.d]||
 
|-
 
|-
| _adDupT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L2222 rt/lifetime.d]||
+
| _aApplyRwc2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L725 rt/aApplyR.d]||
 
|-
 
|-
| _adEq || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L368 rt/adi.d]||
+
| _aApplyRwd1 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L105 rt/aApplyR.d]||
 
|-
 
|-
| _adEq2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L389 rt/adi.d]||
+
| _aApplyRwd2 || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/aApplyR.d#L570 rt/aApplyR.d]||
 +
|}
 +
 
 +
{| class="wikitable" width="100%"
 +
|+Hooks for switch suppprt
 
|-
 
|-
| _adEqBit || ???|| || ???||
+
!mangled name!!calling convention!!description!!druntime definition!!comment
 
|-
 
|-
| _adReverse || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L236 rt/adi.d]||
+
| _d_switch_dstring || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/switch_.d#L310 rt/switch_.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L4237 __switch]
 
|-
 
|-
| _adReverseChar || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L47 rt/adi.d]||
+
| _d_switch_error || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L238 rt/dmain2.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L4399 __switch_error]
 
|-
 
|-
| _adReverseWchar || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L142 rt/adi.d]||
+
| _d_switch_string || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/switch_.d#L30 rt/switch_.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L4237 __switch]
 +
|-
 +
| _d_switch_ustring || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/switch_.d#L177  rt/switch_.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L4237 __switch]
 +
|}
 +
 
 +
{| class="wikitable" width="100%"
 +
|+Hooks for assert suppprt
 
|-
 
|-
| _adSort || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/qsort.d#L43  rt/qsort.d]||
+
!mangled name!!calling convention!!description!!druntime definition!!comment
 
|-
 
|-
| _adSortChar || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L321 rt/adi.d]||
+
| _d_assert || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L213 rt/dmain2.d]||
 
|-
 
|-
| _adSortWchar || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/adi.d#L343 rt/adi.d]||
+
| _d_assert_msg || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L208 rt/dmain2.d]||
 
|-
 
|-
| _d_allocmemory || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L87 rt/lifetime.d]||
+
| _d_assertm || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L203 rt/dmain2.d]||
 +
|}
 +
 
 +
{| class="wikitable" width="100%"
 +
|+List of runtime hooks for dynamic array support
 
|-
 
|-
| _d_array_bounds || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L233  rt/dmain2.d]||
+
!mangled name!!calling convention!!description!!druntime definition!!comment
 
|-
 
|-
 
| _d_arrayappendT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1635  rt/lifetime.d]||
 
| _d_arrayappendT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1635  rt/lifetime.d]||
Line 157: Line 196:
 
| _d_arrayassign || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/arrayassign.d#L30  rt/arrayassign.d]||
 
| _d_arrayassign || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/arrayassign.d#L30  rt/arrayassign.d]||
 
|-
 
|-
| _d_arraycast || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/arraycast.d#L26  rt/arraycast.d]||
+
| _d_arraycast || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/arraycast.d#L26  rt/arraycast.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L4830 __ArrayCast]
 
|-
 
|-
| _d_arraycast_frombit || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/arraycast.d#L68  rt/arraycast.d]||
+
| _d_arraycast_frombit || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/arraycast.d#L68  rt/arraycast.d]|| No longer exists
 
|-
 
|-
 
| _d_arraycatT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1955  rt/lifetime.d]||
 
| _d_arraycatT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1955  rt/lifetime.d]||
Line 181: Line 220:
 
| _d_arraysetlengthiT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1443  rt/lifetime.d]||
 
| _d_arraysetlengthiT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1443  rt/lifetime.d]||
 
|-
 
|-
| _d_assert || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L213 rt/dmain2.d]||
+
| _d_delarray || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1097 rt/lifetime.d]||
 +
|-
 +
| _d_delarray_t || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1125  rt/lifetime.d]||
 +
|-
 +
| _d_newarrayU || extern(C)||  Allocate an array with the garbage collector. Leave elements uninitialized || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]||
 +
|-
 +
| _d_newarrayT || extern(C)||  Initializes to 0 (e.g `new int[]`) || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]||
 +
|-
 +
| _d_newarrayiT|| extern(C)||  Initializes based on initializer retrieved from TypeInfo (e.g `new float[]`)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]||
 +
|-
 +
| _d_newarraymT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L975  rt/lifetime.d]|| Returns a void[]. Internally, this void[] is reinterpret casted to T[]. The block returned should be sliced to take into account the length.
 +
|-
 +
| _d_newarraymTX || extern(C)||  Create a new multi-dimensional array which initializes to 0|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]|| new int[][](10, 20);// _d_newarraymTX(typeid(float), [10, 20]);
 +
|-
 +
| _d_newarraymiT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1000  rt/lifetime.d]|| (Deprecated?)
 +
|-
 +
| _d_newarraymiTX|| extern(C)||  which initializes elements based on `TypeInfo` || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]|| new float[][][](10, 20, 30); // _d_newarraymiTX(typeid(float), [10, 20, 30]);
 +
|}
 +
 
 +
{| class="wikitable" width="100%"
 +
|+List of unsorted runtime hooks
 +
|-
 +
!mangled name!!calling convention!!description!!druntime definition!!comment
 +
|-
 +
| D9invariant12_d_invariantFC6ObjectZv || extern(D) ||  || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/invariant.d#L19  rt/invariant.d]||
 +
|-
 +
| _D9invariant12_d_invariantFC6ObjectZv || || || || ???
 
|-
 
|-
| _d_assert_msg || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L208 rt/dmain2.d]||
+
| _d_allocmemory || extern(C)|| Allocate memory using the garbage collector. DMD uses this to allocate closures || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L87 rt/lifetime.d]||
 
|-
 
|-
| _d_assertm || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L203 rt/dmain2.d]||
+
| _d_allocmemoryT || extern(C)|| For allocating a single POD value  (LDC Only)|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L87 rt/lifetime.d]||
 
|-
 
|-
 
| _d_callfinalizer || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1188  rt/lifetime.d]||
 
| _d_callfinalizer || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1188  rt/lifetime.d]||
Line 196: Line 261:
 
|-
 
|-
 
| _d_criticalexit || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/critical_.d#L110  rt/critical_.d]||
 
| _d_criticalexit || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/critical_.d#L110  rt/critical_.d]||
|-
 
| _d_delarray || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1097  rt/lifetime.d]||
 
|-
 
| _d_delarray_t || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1125  rt/lifetime.d]||
 
 
|-
 
|-
 
| _d_delclass || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L164  rt/lifetime.d]||
 
| _d_delclass || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L164  rt/lifetime.d]||
Line 207: Line 268:
 
| _d_delmemory || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1161  rt/lifetime.d]||
 
| _d_delmemory || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1161  rt/lifetime.d]||
 
|-
 
|-
| _d_dynamic_cast || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/cast_.d#L69  rt/cast_.d]||
+
| _d_dynamic_cast || extern(C)|| Attempts to cast Object o to class c Returns o if successful, null if not. || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/cast_.d#L69  rt/cast_.d]||
 
|-
 
|-
 
| _d_hidden_func || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L244  rt/dmain2.d]||
 
| _d_hidden_func || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L244  rt/dmain2.d]||
Line 225: Line 286:
 
| _d_monitorexit || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/deh.d#L945  rt/deh.d]||
 
| _d_monitorexit || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/deh.d#L945  rt/deh.d]||
 
|-
 
|-
| _d_newarrayT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L762  rt/lifetime.d]||
+
| _d_newclass || extern(C)|| Create a new class instance. Allocates memory and sets fields to their initial value, but does not call a constructor || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]||
|-
 
| _d_newarrayiT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L821  rt/lifetime.d]||
 
|-
 
| _d_newarraymT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L975  rt/lifetime.d]||
 
|-
 
| _d_newarraymTX || ???|| || ???||
 
|-
 
| _d_newarraymiT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1000  rt/lifetime.d]||
 
|-
 
| _d_newarraymiTX || ???|| || ???||
 
|-
 
| _d_newclass || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L96  rt/lifetime.d]||
 
|-
 
| _d_newitemT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1026  rt/lifetime.d]||
 
|-
 
| _d_newitemiT || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1054  rt/lifetime.d]||
 
|-
 
| _d_obj_cmp || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/obj.d#L32  rt/obj.d]||
 
 
|-
 
|-
| _d_obj_eq || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/obj.d#L22 rt/obj.d]||
+
| _d_newitemU || extern(C)|| Leaves the item uninitialized || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1026 rt/lifetime.d]||
 
|-
 
|-
| _d_switch_dstring || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/switch_.d#L310 rt/switch_.d]||
+
| _d_newitemT || extern(C)|| Zero initializes the item || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1026 rt/lifetime.d]||
 
|-
 
|-
| _d_switch_error || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/dmain2.d#L238 rt/dmain2.d]||
+
| _d_newitemiT || extern(C)|| Uses a non-zero initializer from `TypeInfo`|| [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/lifetime.d#L1054 rt/lifetime.d]||
 
|-
 
|-
| _d_switch_string || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/switch_.d#L30 rt/switch_.d]||
+
| _d_obj_cmp || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/obj.d#L32 rt/obj.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L131 __cmp]
 
|-
 
|-
| _d_switch_ustring || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/switch_.d#L177 rt/switch_.d]||
+
| _d_obj_eq || extern(C)|| || [https://github.com/D-Programming-Language/druntime/blob/e47a00bff935c3f079bb567a6ec97663ba384487/src/rt/obj.d#L22 rt/obj.d]|| Converted to template [https://github.com/dlang/druntime/blob/79a966df9b9f3b3992f7d8c1155c2f0293d64be5/src/object.d#L352 __equals]
 
|}
 
|}

Latest revision as of 16:10, 27 January 2023

This page lists runtime functions to which the compiler may automatically generate calls to in certain circumstances. This list was taken from dmd's backend/rtlsym.h.


This list is not complete and may even list functions which are no longer needed. Please help to verify this list.

hooks for associative array support
mangled name calling convention description druntime definition comment
_aaApply extern(C) rt/aaA.d
_aaApply2 extern(C) rt/aaA.d
_aaDelX extern(C) rt/aaA.d
_aaEqual extern(C) rt/aaA.d
_aaGetRvalueX extern(C) rt/aaA.d
_aaGetX extern(C) rt/aaA.d
_aaInX extern(C) rt/aaA.d
_aaLen extern(C) rt/aaA.d
_d_assocarrayliteralT extern(C) rt/aaA.d
_d_assocarrayliteralTX extern(C) rt/aaA.d


dynamic array support
mangled name calling convention description druntime definition comment
_adEq extern(C) array equality test rt/adi.d Converted to template __equals
_adEq2 extern(C) array equality test rt/adi.d Converted to template __equals
_adEqBit ??? ??? Can't find this in druntime. Deprecated?
_adReverse extern(C) implement .reverse property (generic) rt/adi.d Removed from the language in v2.075
_adReverseChar extern(C) implement .reverse property (char array) rt/adi.d Removed from the language in v2.075
_adReverseWchar extern(C) implement .reverse property (wchar array) rt/adi.d Removed from the language in v2.075
_adSort extern(C) Implement .sort property (generic) rt/qsort.d Removed from the language in v2.075
_adSortChar extern(C) Implement .sort property (char array) rt/adi.d Removed from the language in v2.075
_adSortWchar extern(C) Implement .sort property (wchar array) rt/adi.d Removed from the language in v2.075
hooks for exception support
mangled name calling convention description druntime definition comment
_d_throw ??? ???
_d_throw@4 ??? ???
_d_throwc extern(C) rt/deh2.d
hooks for unit test support
mangled name calling convention description druntime definition comment
_d_unittest extern(C) rt/dmain2.d
_d_unittest_msg extern(C) rt/dmain2.d
_d_unittestm extern(C) rt/dmain2.d
hooks for thread support
mangled name calling convention description druntime definition comment
___tls_get_addr extern(D) Returns the thread local address of a variable. Used to emulate thread local storage on Mac OS X. core/thread.d Only used on Mac OS X.
hooks for GC support
mangled name calling convention description druntime definition comment
RTInfo (not a function) Used to create runtime type information which can then be obtained by the GC at runtime. object_.d This is a template which gets instantiated for every type.
utf decoding for foreach loops
_aApplycd1 extern(C) rt/aApply.d
_aApplycd2 extern(C) rt/aApply.d
_aApplycw1 extern(C) rt/aApply.d
_aApplycw2 extern(C) rt/aApply.d
_aApplydc1 extern(C) rt/aApply.d
_aApplydc2 extern(C) rt/aApply.d
_aApplydw1 extern(C) rt/aApply.d
_aApplydw2 extern(C) rt/aApply.d
_aApplywc1 extern(C) rt/aApply.d
_aApplywc2 extern(C) rt/aApply.d
_aApplywd1 extern(C) rt/aApply.d
_aApplywd2 extern(C) rt/aApply.d
utf decoding for foreach_reverse loops
_aApplyRcd1 extern(C) rt/aApplyR.d
_aApplyRcd2 extern(C) rt/aApplyR.d
_aApplyRcw1 extern(C) rt/aApplyR.d
_aApplyRcw2 extern(C) rt/aApplyR.d
_aApplyRdc1 extern(C) rt/aApplyR.d
_aApplyRdc2 extern(C) rt/aApplyR.d
_aApplyRdw1 extern(C) rt/aApplyR.d
_aApplyRdw2 extern(C) rt/aApplyR.d
_aApplyRwc1 extern(C) rt/aApplyR.d
_aApplyRwc2 extern(C) rt/aApplyR.d
_aApplyRwd1 extern(C) rt/aApplyR.d
_aApplyRwd2 extern(C) rt/aApplyR.d
Hooks for switch suppprt
mangled name calling convention description druntime definition comment
_d_switch_dstring extern(C) rt/switch_.d Converted to template __switch
_d_switch_error extern(C) rt/dmain2.d Converted to template __switch_error
_d_switch_string extern(C) rt/switch_.d Converted to template __switch
_d_switch_ustring extern(C) rt/switch_.d Converted to template __switch
Hooks for assert suppprt
mangled name calling convention description druntime definition comment
_d_assert extern(C) rt/dmain2.d
_d_assert_msg extern(C) rt/dmain2.d
_d_assertm extern(C) rt/dmain2.d
List of runtime hooks for dynamic array support
mangled name calling convention description druntime definition comment
_d_arrayappendT extern(C) rt/lifetime.d
_d_arrayappendcT extern(C) rt/lifetime.d
_d_arrayappendcTX extern(C) rt/lifetime.d
_d_arrayappendcd extern(C) rt/lifetime.d
_d_arrayappendwd extern(C) rt/lifetime.d
_d_arrayassign extern(C) rt/arrayassign.d
_d_arraycast extern(C) rt/arraycast.d Converted to template __ArrayCast
_d_arraycast_frombit extern(C) rt/arraycast.d No longer exists
_d_arraycatT extern(C) rt/lifetime.d
_d_arraycatnT extern(C) rt/lifetime.d
_d_arraycopy extern(C) rt/arraycat.d
_d_arrayctor extern(C) rt/arrayassign.d
_d_arrayliteralT extern(C) rt/lifetime.d
_d_arrayliteralTX extern(C) rt/lifetime.d
_d_arraysetassign extern(C) rt/arrayassign.d
_d_arraysetctor extern(C) rt/arrayassign.d
_d_arraysetlengthT extern(C) rt/lifetime.d
_d_arraysetlengthiT extern(C) rt/lifetime.d
_d_delarray extern(C) rt/lifetime.d
_d_delarray_t extern(C) rt/lifetime.d
_d_newarrayU extern(C) Allocate an array with the garbage collector. Leave elements uninitialized rt/lifetime.d
_d_newarrayT extern(C) Initializes to 0 (e.g `new int[]`) rt/lifetime.d
_d_newarrayiT extern(C) Initializes based on initializer retrieved from TypeInfo (e.g `new float[]`) rt/lifetime.d
_d_newarraymT extern(C) rt/lifetime.d Returns a void[]. Internally, this void[] is reinterpret casted to T[]. The block returned should be sliced to take into account the length.
_d_newarraymTX extern(C) Create a new multi-dimensional array which initializes to 0 rt/lifetime.d new int[][](10, 20);// _d_newarraymTX(typeid(float), [10, 20]);
_d_newarraymiT extern(C) rt/lifetime.d (Deprecated?)
_d_newarraymiTX extern(C) which initializes elements based on `TypeInfo` rt/lifetime.d new float[][][](10, 20, 30); // _d_newarraymiTX(typeid(float), [10, 20, 30]);
List of unsorted runtime hooks
mangled name calling convention description druntime definition comment
D9invariant12_d_invariantFC6ObjectZv extern(D) rt/invariant.d
_D9invariant12_d_invariantFC6ObjectZv ???
_d_allocmemory extern(C) Allocate memory using the garbage collector. DMD uses this to allocate closures rt/lifetime.d
_d_allocmemoryT extern(C) For allocating a single POD value (LDC Only) rt/lifetime.d
_d_callfinalizer extern(C) rt/lifetime.d
_d_callinterfacefinalizer extern(C) rt/lifetime.d
_d_cover_register extern(C) rt/cover.d
_d_criticalenter extern(C) rt/critical_.d
_d_criticalexit extern(C) rt/critical_.d
_d_delclass extern(C) rt/lifetime.d
_d_delinterface extern(C) rt/lifetime.d
_d_delmemory extern(C) rt/lifetime.d
_d_dynamic_cast extern(C) Attempts to cast Object o to class c Returns o if successful, null if not. rt/cast_.d
_d_hidden_func extern(C) rt/dmain2.d
_d_interface_cast extern(C) rt/cast_.d
_d_interface_vtbl extern(C) rt/cast_.d
_d_monitor_epilog extern(C) rt/deh.d
_d_monitor_handler extern(C) rt/deh.d
_d_monitor_prolog extern(C) rt/deh.d
_d_monitorenter extern(C) rt/deh.d
_d_monitorexit extern(C) rt/deh.d
_d_newclass extern(C) Create a new class instance. Allocates memory and sets fields to their initial value, but does not call a constructor rt/lifetime.d
_d_newitemU extern(C) Leaves the item uninitialized rt/lifetime.d
_d_newitemT extern(C) Zero initializes the item rt/lifetime.d
_d_newitemiT extern(C) Uses a non-zero initializer from `TypeInfo` rt/lifetime.d
_d_obj_cmp extern(C) rt/obj.d Converted to template __cmp
_d_obj_eq extern(C) rt/obj.d Converted to template __equals