On Friday, 21 August 2015 at 13:47:49 UTC, Andrei Alexandrescu wrote:

I think these need to be fixed (by replacing indirect-calls-based code with templates) regardless of where we go with TypeInfo. There's a fair amount of druntime code that suffers from being written before templates or in avoidance thereof. -- Andrei

For whatever it's worth, below is a list of druntime functions that take TypeInfo as a parameter. My immediate need is to make it possible for an -fno-rtti switch to be added to the compiler with as little compromise as possible. In general, I'm not actually trying disable D features, even those that I don't actually need. I only need to remove dead code. If -fno-rtti is the best I can hope for, than I'll take it.

Perhaps templating some of these functions will make an -fno-rtti switch more viable. I'm judging from the comments in this thread that there may be additional benefits.

Would submitting pull requests towards this goal be a distraction from current priorities? Should I wait until after DDMD is out?

Mike


\core\memory.d
143 extern (C) void gc_addRange( in void* p, size_t sz, const TypeInfo ti = null ) nothrow @nogc; 364 static void* malloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) pure nothrow 390 static BlkInfo qalloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) pure nothrow 417 static void* calloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) pure nothrow 457 static void* realloc( void* p, size_t sz, uint ba = 0, const TypeInfo ti = null ) pure nothrow 501 static size_t extend( void* p, size_t mx, size_t sz, const TypeInfo ti = null ) pure nothrow 754 static void addRange( in void* p, size_t sz, const TypeInfo ti = null ) @nogc nothrow /* FIXME pure */

\object.d
1761 inout(void)[] _aaValues(inout void* p, in size_t keysize, in size_t valuesize, const TypeInfo tiValArray) pure nothrow; 1762 inout(void)[] _aaKeys(inout void* p, in size_t keysize, const TypeInfo tiKeyArray) pure nothrow;
1778 int _aaEqual(in TypeInfo tiRaw, in void* e1, in void* e2);
1779 hash_t _aaGetHash(in void* aa, in TypeInfo tiRaw) nothrow;
2794 extern (C) void _d_arrayshrinkfit(const TypeInfo ti, void[] arr) nothrow; 2795 extern (C) size_t _d_arraysetcapacity(const TypeInfo ti, size_t newcapacity, void *arrptr) pure nothrow; 3231 private extern (C) void[] _d_newarrayU(const TypeInfo ti, size_t length) pure nothrow;

\core\stdc\stdarg.d
60   void va_arg()(ref va_list ap, TypeInfo ti, void* parmn)
131  void va_arg()(ref va_list ap, TypeInfo ti, void* parmn)
345  void va_arg()(va_list apx, TypeInfo ti, void* parmn)

\gc\proxy.d
58   void function(void*, size_t, const TypeInfo ti) gc_addRange;
184 void* gc_malloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) nothrow 191 BlkInfo gc_qalloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) nothrow 203 void* gc_calloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) nothrow 210 void* gc_realloc( void* p, size_t sz, uint ba = 0, const TypeInfo ti = null ) nothrow 217 size_t gc_extend( void* p, size_t mx, size_t sz, const TypeInfo ti = null ) nothrow 282 void gc_addRange( void* p, size_t sz, const TypeInfo ti = null ) nothrow

\gcstub\gc.d
65 extern (C) void function(void*, size_t, const TypeInfo ti) gc_addRange; 184 extern (C) void* gc_malloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) 197 extern (C) BlkInfo gc_qalloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) 210 extern (C) void* gc_calloc( size_t sz, uint ba = 0, const TypeInfo ti = null ) 223 extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0, const TypeInfo ti = null ) 236 extern (C) size_t gc_extend( void* p, size_t mx, size_t sz, const TypeInfo ti = null ) 293 extern (C) void gc_addRange( void* p, size_t sz, const TypeInfo ti = null )

\rt\arrayassign.d
27 extern (C) void[] _d_arrayassign(TypeInfo ti, void[] from, void[] to) 49 extern (C) void[] _d_arrayassign_l(TypeInfo ti, void[] src, void[] dst, void* ptmp) 141 extern (C) void[] _d_arrayassign_r(TypeInfo ti, void[] src, void[] dst, void* ptmp) 167 extern (C) void[] _d_arrayctor(TypeInfo ti, void[] from, void[] to) 205 extern (C) void* _d_arraysetassign(void* p, void* value, int count, TypeInfo ti) 236 extern (C) void* _d_arraysetctor(void* p, void* value, int count, TypeInfo ti)

\rt\aaA.d
438 extern (C) inout(void[]) _aaValues(inout AA aa, in size_t keysz, in size_t valsz, const TypeInfo tiValueArray) pure nothrow 461 extern (C) inout(void[]) _aaKeys(inout AA aa, in size_t keysz, const TypeInfo tiKeyArray) pure nothrow 567 extern (C) int _aaEqual(in TypeInfo tiRaw, in AA aa1, in AA aa2) 597 extern (C) hash_t _aaGetHash(in AA* aa, in TypeInfo tiRaw) nothrow

\rt\adi.d
24   extern (C) void[] _adSort(void[] a, TypeInfo ti);
365  extern (C) int _adEq(void[] a1, void[] a2, TypeInfo ti)
386  extern (C) int _adEq2(void[] a1, void[] a2, TypeInfo ti)
415  extern (C) int _adCmp(void[] a1, void[] a2, TypeInfo ti)
445  extern (C) int _adCmp2(void[] a1, void[] a2, TypeInfo ti)

\gc\gc.d
484 void *malloc(size_t size, uint bits = 0, size_t *alloc_size = null, const TypeInfo ti = null) nothrow 516 private void *mallocNoSync(size_t size, uint bits, ref size_t alloc_size, const TypeInfo ti = null) nothrow 546 void *calloc(size_t size, uint bits = 0, size_t *alloc_size = null, const TypeInfo ti = null) nothrow 578 void *realloc(void *p, size_t size, uint bits = 0, size_t *alloc_size = null, const TypeInfo ti = null) nothrow 603 private void *reallocNoSync(void *p, size_t size, ref uint bits, ref size_t alloc_size, const TypeInfo ti = null) nothrow 753 size_t extend(void* p, size_t minsize, size_t maxsize, const TypeInfo ti = null) nothrow 766 private size_t extendNoSync(void* p, size_t minsize, size_t maxsize, const TypeInfo ti = null) nothrow 1178 void addRange(void *p, size_t sz, const TypeInfo ti = null) nothrow @nogc 1568 void addRange(void *pbot, void *ptop, const TypeInfo ti) nothrow @nogc 1826 void* bigAlloc(size_t size, ref size_t alloc_size, uint bits, const TypeInfo ti = null) nothrow

\rt\qsort.d
26   extern (C) void[] _adSort(void[] a, TypeInfo ti)
41   extern (C) void[] _adSort(void[] a, TypeInfo ti)
56   extern (C) void[] _adSort(void[] a, TypeInfo ti)
68   private TypeInfo tiglobal;
70   extern (C) void[] _adSort(void[] a, TypeInfo ti)

\rt\typeinfo\ti_Aint.d
19   extern (C) void[] _adSort(void[] a, TypeInfo ti);

\rt\tracegc.d
87 extern (C) void[] _d_newarrayT(const TypeInfo ti, size_t length); 88 extern (C) void[] _d_newarrayiT(const TypeInfo ti, size_t length); 89 extern (C) void[] _d_newarraymTX(const TypeInfo ti, size_t[] dims); 90 extern (C) void[] _d_newarraymiTX(const TypeInfo ti, size_t[] dims); 109 extern (C) void[] _d_newarrayTTrace(string file, int line, string funcname, const TypeInfo ti, size_t length) 125 extern (C) void[] _d_newarrayiTTrace(string file, int line, string funcname, const TypeInfo ti, size_t length) 141 extern (C) void[] _d_newarraymTXTrace(string file, int line, string funcname, const TypeInfo ti, size_t[] dims) 160 extern (C) void[] _d_newarraymiTXTrace(string file, int line, string funcname, const TypeInfo ti, size_t[] dims) 179 extern (C) void* _d_newitemTTrace(string file, int line, string funcname, in TypeInfo ti) 194 extern (C) void* _d_newitemiTTrace(string file, int line, string funcname, in TypeInfo ti)
214  extern (C) void _d_delstruct(void** p, TypeInfo_Struct inf)
274 extern (C) void _d_delstructTrace(string file, int line, string funcname, void** p, TypeInfo_Struct inf) 319 extern (C) void* _d_arrayliteralTX(const TypeInfo ti, size_t length); 322 extern (C) void* _d_arrayliteralTXTrace(string file, int line, string funcname, const TypeInfo ti, size_t length) 358 extern (C) byte[] _d_arraycatT(const TypeInfo ti, byte[] x, byte[] y); 359 extern (C) void[] _d_arraycatnTX(const TypeInfo ti, byte[][] arrs); 361 extern (C) byte[] _d_arraycatTTrace(string file, int line, string funcname, const TypeInfo ti, byte[] x, byte[] y) 378 extern (C) void[] _d_arraycatnTXTrace(string file, int line, string funcname, const TypeInfo ti, byte[][] arrs) 397 extern (C) void[] _d_arrayappendT(const TypeInfo ti, ref byte[] x, byte[] y); 398 extern (C) byte[] _d_arrayappendcTX(const TypeInfo ti, ref byte[] px, size_t n); 402 extern (C) void[] _d_arrayappendTTrace(string file, int line, string funcname, const TypeInfo ti, ref byte[] x, byte[] y) 419 extern (C) byte[] _d_arrayappendcTXTrace(string file, int line, string funcname, const TypeInfo ti, ref byte[] px, size_t n) 480 extern (C) void[] _d_arraysetlengthT(const TypeInfo ti, size_t newlength, void[]* p); 481 extern (C) void[] _d_arraysetlengthiT(const TypeInfo ti, size_t newlength, void[]* p); 483 extern (C) void[] _d_arraysetlengthTTrace(string file, int line, string funcname, const TypeInfo ti, size_t newlength, void[]* p) 500 extern (C) void[] _d_arraysetlengthiTTrace(string file, int line, string funcname, const TypeInfo ti, size_t newlength, void[]* p)

\rt\lifetime.d
180  extern (C) void _d_delstruct(void** p, TypeInfo_Struct inf)
215 size_t structTypeInfoSize(const TypeInfo ti) pure nothrow @nogc 269 bool __setArrayAllocLength(ref BlkInfo info, size_t newlength, bool isshared, const TypeInfo tinext, size_t oldlength = ~0) pure nothrow 374 size_t __arrayAllocLength(ref BlkInfo info, const TypeInfo tinext) pure nothrow 398 size_t __arrayPad(size_t size, const TypeInfo tinext) nothrow pure @trusted 407 BlkInfo __arrayAlloc(size_t arrsize, const TypeInfo ti, const TypeInfo tinext) nothrow pure 421 BlkInfo __arrayAlloc(size_t arrsize, ref BlkInfo info, const TypeInfo ti, const TypeInfo tinext) 631 extern(C) void _d_arrayshrinkfit(const TypeInfo ti, void[] arr) /+nothrow+/
670  package bool hasPostblit(in TypeInfo ti)
675  void __doPostblit(void *ptr, size_t len, const TypeInfo ti)
712 extern(C) size_t _d_arraysetcapacity(const TypeInfo ti, size_t newcapacity, void[]* p) 882 extern (C) void[] _d_newarrayU(const TypeInfo ti, size_t length) pure nothrow 941 extern (C) void[] _d_newarrayT(const TypeInfo ti, size_t length) pure nothrow 954 extern (C) void[] _d_newarrayiT(const TypeInfo ti, size_t length) pure nothrow 987 void[] _d_newarrayOpT(alias op)(const TypeInfo ti, size_t[] dims) 1028 extern (C) void[] _d_newarraymTX(const TypeInfo ti, size_t[] dims) 1044 extern (C) void[] _d_newarraymiTX(const TypeInfo ti, size_t[] dims) 1413 extern (C) void[] _d_arraysetlengthT(const TypeInfo ti, size_t newlength, void[]* p) 1597 extern (C) void[] _d_arraysetlengthiT(const TypeInfo ti, size_t newlength, void[]* p) 1794 extern (C) void[] _d_arrayappendT(const TypeInfo ti, ref byte[] x, byte[] y) 1894 byte[] _d_arrayappendcTX(const TypeInfo ti, ref byte[] px, size_t n) 2076 extern (C) byte[] _d_arraycatT(const TypeInfo ti, byte[] x, byte[] y) 2141 extern (C) void[] _d_arraycatnTX(const TypeInfo ti, byte[][] arrs)
2180 void* _d_arrayliteralTX(const TypeInfo ti, size_t length)




Reply via email to