[Issue 24132] ImportC: Add support for wchar_t, char16_t, char32_t

2023-09-03 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=24132

Adam Wilson  changed:

   What|Removed |Added

Summary|ImportC: Add support for|ImportC: Add support for
   |wchar_t |wchar_t, char16_t, char32_t

--- Comment #2 from Adam Wilson  ---
(In reply to ryuukk_ from comment #1)
> Sounds like an easy PR to do, add the define here:
> 
> https://github.com/dlang/dmd/blob/master/druntime/src/importc.h

It's not *quite* that simple. wchar_t is #define as an unsigned short in C, and
either an unsigned short *or* an intrinsic type in C++. This means that when
the preprocessor runs it emits an unsigned short. However, most C preprocessors
have a switch that treat wchar_t as an intrinsic type instead of "typedef
wchar_t unsigned short" However, the current ImportC implementation does not
support this and vomits up errors when you try to use it.

What we need is the ability for ImportC to recognize wchar_t, char16_t, and
char32_t *after* the preprocessor has run so that ImportC can emit the
appropriate char/wchar/dchar types.

--


[Issue 24132] ImportC: Add support for wchar_t, char16_t, char32_t

2023-09-11 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=24132

--- Comment #3 from Walter Bright  ---
C11 defines char32_t as uint_least32_t, which is specified to be a typedef, not
a macro or a keyword.

Preprocessors usually key off the existence of __cplusplus to turn C++
semantics on and off. ImportC currently does not do that.

I suggest putting:

 typedef wchar_t unsigned short;

in your copy of importc.h and see how far that gets?

--


[Issue 24132] ImportC: Add support for wchar_t, char16_t, char32_t

2023-10-28 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=24132

--- Comment #4 from Adam Wilson  ---
So I was poking around the compiler source today and I noticed that in lexer.d
at line 80 there is a reference to wchar_t in ImportC specific code, so it
appears to know about wide-chars in C. 

Then I discovered Ckeywords in tokens.d. So all we have to do is add wchar_ and
dchar_ to that list and add the following to importc.h

#define wchar_t wchar
#define char16_t wchar
#define char32_t dchar

A little hacky maybe, but for ImportC it would work, and it would allow us to
use D style strings natively which is the semantically correct outcome. IIRC,
the wchar and dchar types are unsigned short and unsigned int respectively when
using export(C) so that should function as normal.

--


[Issue 24132] ImportC: Add support for wchar_t, char16_t, char32_t

2023-10-30 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=24132

Dlang Bot  changed:

   What|Removed |Added

   Keywords||pull

--- Comment #5 from Dlang Bot  ---
@LightBender created dlang/dmd pull request #15757 "Issue 24132 - ImportC: Add
support for wide-chars." fixing this issue:

- Fix Issue 24132. Add wchar/dchar to C Keywords list. Use #defines to convert
C wide-chars to wchar/dchar.

https://github.com/dlang/dmd/pull/15757

--


[Issue 24132] ImportC: Add support for wchar_t, char16_t, char32_t

2023-11-20 Thread d-bugmail--- via Digitalmars-d-bugs
https://issues.dlang.org/show_bug.cgi?id=24132

Adam Wilson  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |WONTFIX

--- Comment #6 from Adam Wilson  ---
I'm going to close this as WON'T FIX. 

I'll try to attack my problem with a post-processor script.

--