[M3devel] CHAR vs. Ctypes.char?
Tony Hosking
hosking at cs.purdue.edu
Thu Jun 24 01:09:35 CEST 2010
ADR isn't safe so why not just LOOPHOLE?
Sent from my iPhone
On Jun 23, 2010, at 6:52 PM, Jay K <jay.krell at cornell.edu> wrote:
>
> Something should change.
> I'm not sure exactly what but I'll make some suggestions.
>
>
> char_star changed from UNTRACED REF char to UNTRACED REF CHAR
> Probably not this.
> Possibly introduce Utypes.char_star = UNTRACED REF CHAR
> but leave Ctypes.char_star alone. Possibly. This is I think the
> least
> likely option.
>
>
> and/or
>
>
> Utypes.CHAR_star introduced = UNTRACED REF CHAR
> many uses of char_star in m3core/src/unix changed to CHAR_star
>
>
> and/or
>
>
> Text.i3 already has FromChars that takes array of CHAR
> add function FromCChars or somesuch that takes array of Ctypes.char
> This I think is most likely.
> Even though it adds to a "standard" interface.
> It could be TextEx or TextExtras or such if that helps.
>
>
> In particular, we often have:
>
>
> Unix.i3: PROCEDURE GetFoo(char_star);
>
>
> Wrapper.i3:
> PROCEDURE GetFoo():TEXT=
> VAR buff; ARRAY [0..N] of CHAR;
> BEGIN
> Unix.GetFoo(ADR(buff[0]));
> RETURN Text.FromChars(buff);
> END GetFoo;
>
>
> This doesn't work with -new_adr.
> because ADR(CHAR) != ADR(char).
>
>
> At a minimum you have to:
> Unix.GetFoo(LOOPHOLE(ADR(buff[0]), ADDRESS));
>
>
> but I'd much rather something more typesafe.
>
>
> e.g.:
> Wrapper.i3:
> PROCEDURE GetFoo():TEXT=
> VAR buff; ARRAY [0..N] of Ctypes.char;
> BEGIN
> Unix.GetFoo(ADR(buff[0]));
> RETURN Text.FromCChars(buff);
> END GetFoo;
>
> or
>
> Unix.i3:
> PROCEDURE GetFoo(CHAR_star);
>
> Wrapper.i3:
> PROCEDURE GetFoo():TEXT=
> VAR buff; ARRAY [0..N] of CHAR;
> BEGIN
> Unix.GetFoo(ADR(buff[0]));
> RETURN Text.FromChars(buff);
> END GetFoo;
>
>
> or even something fancier like:
>
>
> Unix.i3:
> PROCEDURE GetFoo():TEXT; !
>
>
>
> To whatever extent this occurs in sysutils, if at all, probably have
> to just LOOPHOLE,
> since it needs to be compatible with a mix of compilers and m3core.
>
>
> - Jay
>
>
>
>
>
>
>
>
>
> ----------------------------------------
>> Subject: Re: [M3devel] CHAR vs. Ctypes.char?
>> From: hosking at cs.purdue.edu
>> Date: Wed, 23 Jun 2010 09:57:04 -0400
>> CC: m3devel at elegosoft.com
>> To: jay.krell at cornell.edu
>>
>> CHAR is an enumeration.
>> Ctypes.char is a subrange.
>>
>> Never the twain shall meet.
>>
>> On 23 Jun 2010, at 09:40, Jay K wrote:
>>
>>>
>>> Is it deliberate that CHAR and Ctypes.char don't match?
>>> I'm building the tree with -new_adr.
>>> "Many" of the breaks are due to this mismatch. Not real bugs. I
>>> use LOOPHOLE to let it compile.
>>> "Many" are due to socklen_t. Real bugs on 64bit problems, at least
>>> in head.
>>> I'm not sure there are any others yet.
>>>
>>> - Jay
>>>
>>
>
More information about the M3devel
mailing list