shared and getParameterStorageClasses bug?
Petar
Petar
Tue Aug 25 13:45:36 UTC 2020
On Tuesday, 25 August 2020 at 12:52:14 UTC, Jean-Louis Leroy
wrote:
> On Tuesday, 25 August 2020 at 07:16:39 UTC, Petar Kirov
> [ZombineDev] wrote:
>> Interesting, so essentially, you need a good solution for your
>> refractParameter function, right? I'll try to check the code
>> in more detail later and think about it.
>
> Actually it already works as is:
>
> void original(lazy const Object);
>
> enum edited =
> refract!(original, "original")
> .withName("copy")
> .withParametersAt(0, Parameter("foo", "int"));
> mixin(edited.mixture);
>
> void expected(int, lazy const Object);
> static assert(is(typeof(©) == typeof(&expected)));
>
> The generated mixin is:
>
> pragma(msg, edited.mixture);
> // @system bolts.experimental.refraction.ReturnType!(original)
> // copy(int foo, lazy
> bolts.experimental.refraction.Parameters!(original)[0] _0);
>
> (In this case, Parameters!(original)[0..1] (note the ..) would
> have worked as well - and it would have looker better too. I'll
> implement that soon.)
>
> Let's look at the function types:
>
> pragma(msg, typeof(&original).stringof); // void function(lazy
> const(Object))
> pragma(msg, typeof(©).stringof); // void function(int
> foo, lazy const(Object) _0) @system
Nice!
> It looks like it is impossible to tell the difference between
> 'const object' and 'const(Object)' - the substitution happens
> too early. So I guess it doesn't matter...
Yes, `Q T` and `Q(T)` is exactly the same type (for Q ∈ { const,
immutable, shared, inout } ), so you shouldn't try to
differentiate between the two. (And `Q(T)` is the canonical
notation.)
BTW, 2-3 years ago I played with a similar task (meta programming
utility library), and one difference in the approach I took was
to avoid thick abstractions. In some cases, this works well,
though since I didn't have use cases involving heavy function
type processing recently I didn't push much in that direction.
You can find some of the code here:
https://gist.github.com/PetarKirov/a808c94857de84858accfb094c19bf77#file-rxd-meta2-d-L65-L123
More information about the Digitalmars-d
mailing list