#include C headers in D code
Atila Neves
atila.neves at gmail.com
Mon Apr 16 11:20:51 UTC 2018
On Saturday, 14 April 2018 at 04:07:12 UTC, Petar Kirov
[ZombineDev] wrote:
> On Friday, 13 April 2018 at 10:31:43 UTC, Atila Neves wrote:
>> On Wednesday, 11 April 2018 at 14:33:26 UTC, Jacob Carlborg
>> wrote:
>>> On Monday, 9 April 2018 at 11:03:48 UTC, Atila Neves wrote:
>>>> Here's my blog post about my project that allows directly
>>>> #including C headers in D*
>>>
>>> I don't know the exact details of your project but can't you
>>> just:
>>>
>>> 1. Copy the includes
>>> 2. Paste them into a C file
>>> 3. Run DStep on the C file
>>> 4. Replace the includes in the first file with the result
>>> from DStep
>>>
>>> This would require changing DStep to always return `false`
>>> here [1]. Or perhaps run the preprocessor to expand the
>>> includes and then run DStep.
>>>
>>> [1]
>>> https://github.com/jacob-carlborg/dstep/blob/master/dstep/translator/Translator.d#L326
>>>
>>> --
>>> /Jacob Carlborg
>>
>> That wouldn't have the same semantics as I want.
>>
>> I tried using dstep as a library. It didn't work.
>
> You also mentioned this in the reddit thread, though I'm still
> curious to understand what's difference in the semantics
> between the approach you have taken and the approach Jacob
> proposed.
You can use the C macros in the headers that you #include in your
dpp file.
dstep has a lot of code for translating macros. I don't want to
translate macros at all, but it's deeply intertwined with
translating everything else. This bug just can't happen with the
dpp approach:
https://github.com/jacob-carlborg/dstep/issues/166
In the idea above it assumes that all #include directives are
together at the top of the file. They probably are, but they
might not be for some reason. I can't remember the specifics, but
dstep by default ignores declarations from other headers because
the idea is to translate this one particular header. I don't want
that either. I also don't want D code generated that has an
`import` to a D file that's actually a translation of another C
header.
I want it to work like it does in C++. dstep doesn't set out to
do that, which is fine, but contorting it to make it do what I
wanted it to was more trouble than it was worth.
Believe me, if I can avoid writing code, I do. Writing
translations from scratch was not a decision I made lightly. In
the end it turned out to be a lot less work than I thought though
(just over 500 SLOC).
Atila
More information about the Digitalmars-d-announce
mailing list