(I hope this formatting comes out right)

>And in fact, that is what it does :)>
>void main()
>{
>    import std.stdio;
>    auto x = typeid(int);
>    writefln("%s, %s", x.init.length, x.init.ptr);
>}
>
>output:
>
>0, null


Actually, I think it is only half right.  Shouldn't x.init.length return 4?

>Doing some research, I found this tidbit in history:
>
>https://issues.dlang.org/show_bug.cgi?id=2990
>
>The only basic types that have init() defined are the ones that have non-zero 
>initializers. I suppose we have 3 options:
>
>1. Revise the documentation so it says “if this returns null with zero length, 
>it means the type is initialized with all zeros, and use tsize to get the size 
>of the type”
>2. Add the appropriate overrides to all the druntime types.
>3. We could make TypeInfo.init return (cast(void *)null)[0..tsize] by default, 
>defaulting all inits to a sane value.
>
>My personal preference is for 3, since it adds no new functions, and will fix 
>any omissions that we haven’t discovered or that would be added in the future.


I'm inclined to agree with you.  I think I'll put this on my todo list for pull 
request when the time is right.  I think now is not it.  Perhaps after 2.068 is 
released.

>Clearly, though, this identifies how unused that function really is :)
>
>I recall now, the compiler only sets up static data inside the typeinfo for 
>things like classes and structs, and the TypeInfo_Struct init() function reads 
>that when determining what to return.
>
>Everything else is defined in druntime.

Thanks Steve,  You've been very helpful.  Things are starting to come together 
for me now.

_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to