[SAoC 2021] Replace druntime Hooks with Templates: Milestone 4, Week 4

Teodor Dutu teodor.dutu at gmail.com
Mon Jan 17 17:27:02 UTC 2022


This week, following the discussions on the 
[PR](https://github.com/dlang/dmd/pull/13495) for lowering 
`_d_arrayappend{cTX,T}` to templates, my mentors and I decided we 
should probably change the implementation of the template hooks 

Because of the fact that `_d_arrayappendT` only appends 2 arrays, 
if the rhs is a single element, the lowering of `lhs ~= rhs` 
currently has to look like this:
_d_arrayappendcTX(lhs, 1), a[lhs.length - 1] = rhs, lhs;
This makes it impossible for CTFE to convert the lowering back to 
`lhs ~= rhs`. Therefore, the complete lowering is:
__ctfe ? lhs ~= rhs : _d_arrayappendcTX(lhs, 1), a[lhs.length - 
1] = rhs, lhs;
This lowering is problematic because the IR generator has to 
discard the `CondExp` and its `true` branch manually.

We asked 
[this](https://forum.dlang.org/post/dcwxswfamadkdnflkaap@forum.dlang.org) question on the forum about the issue above. In it, we propose to extend `_d_arrayappendT` to be able to concatenate both arrays and single elements to the lhs array, so that semantic3 can simply lower the `lhs ~= rhs` to `_d_arrayappendT` every time.

Additionally, I started working on the `_d_newitem{U,iT,T}` 
hooks. It is likely we won't be able to remove the usage of 
`TypeInfo` from `_d_newitemU`. The old hook writes the `TypeInfo` 
object at the end of the newly created `struct` object. This is 
most likely in order to help the GC. We asked yet another 
[question](https://forum.dlang.org/post/vmysmecdycsmuiuuqifn@forum.dlang.org) on the forum about this `TypeInfo` object and whether its removal would cause trouble or not.


More information about the Digitalmars-d mailing list