Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
June 06, 2019 How to preserve function parameters scopeness | ||||
---|---|---|---|---|
| ||||
I want to extract function parameters types from declaration, remove some of them and construct new function pointer type from remaining types. Doing this in obvious way cause parameters to lost their scope storage class: https://run.dlang.io/is/cQBFRW I can extract and store scope information separately via ParameterStorageClassTuple but I don't know how to apply this information back when constructing new function pointer type. Of course I can CTFE string representation with full declaration and mixin it but it's ugly and probably slow to compile. Any ideas how to do this better? I need this for my jit-bind template machinery, if someone interested https://github.com/ldc-developers/ldc/blob/master/runtime/jit-rt/d/ldc/dynamic_compile.d#L120 |
June 06, 2019 Re: How to preserve function parameters scopeness | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Butygin | On Thursday, 6 June 2019 at 09:45:08 UTC, Ivan Butygin wrote: > I want to extract function parameters types from declaration, remove some of them and construct new function pointer type from remaining types. Doing this in obvious way cause > parameters to lost their scope storage class: https://run.dlang.io/is/cQBFRW > > I can extract and store scope information separately via ParameterStorageClassTuple but I don't know how to apply this information back when constructing new function pointer type. Of course I can CTFE string representation with full declaration and mixin it but it's ugly and probably slow to compile. Any ideas how to do this better? > > I need this for my jit-bind template machinery, if someone interested > https://github.com/ldc-developers/ldc/blob/master/runtime/jit-rt/d/ldc/dynamic_compile.d#L120 As far as I know, this is currently impossible without CTFE and mixins. FWIW, it's filed here: https://issues.dlang.org/show_bug.cgi?id=19787 -- Simen |
June 06, 2019 Re: How to preserve function parameters scopeness | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Butygin | On Thursday, 6 June 2019 at 09:45:08 UTC, Ivan Butygin wrote:
> I want to extract function parameters types from declaration, remove some of them and construct new function pointer type from remaining types.
Do you know where they are likely to be or how many will be filtered?
Slicing the Params thing directly, without using Filter, can do it:
void main()
{
alias P = Parameters!foo[1 .. $];
alias P2 = Parameters!foo[0 .. 1];
pragma(msg, P);
alias F1 = ReturnType!foo function(P, P2);
pragma(msg, F1);
}
So if you can make a helper function to find the indexes for you, you can call that and do these slices, then put them back together when defining the new function.
But doing this when you don't know how many you are slicing is tricky. I suppose it could be written recursively; do one iteration of this technique for each param to be removed, then if there's another to go, run it again on the generated function until you get to what you want. (this is kinda how Filter works inside anyway, just I don't think the scopeness there is preserved through one of its non-function middle steps. Keeping the params inside a function for each middle step will sidestep this.... I think).
Just I haven't actually tried that and imo it would be much prettier if you can just slice out one block lol.
|
June 06, 2019 Re: How to preserve function parameters scopeness | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Butygin | On Thursday, 6 June 2019 at 09:45:08 UTC, Ivan Butygin wrote: > I want to extract function parameters types from declaration, remove some of them and construct new function pointer type from remaining types. Doing this in obvious way cause > parameters to lost their scope storage class: https://run.dlang.io/is/cQBFRW I don't understand your example that well, but are you perhaps encountering this issue? https://forum.dlang.org/post/yixvtosbkuphnvxydtxr@forum.dlang.org |
June 07, 2019 Re: How to preserve function parameters scopeness | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Franklin | On Thursday, 6 June 2019 at 11:26:20 UTC, Mike Franklin wrote:
> On Thursday, 6 June 2019 at 09:45:08 UTC, Ivan Butygin wrote:
>> I want to extract function parameters types from declaration, remove some of them and construct new function pointer type from remaining types. Doing this in obvious way cause
>> parameters to lost their scope storage class: https://run.dlang.io/is/cQBFRW
>
> I don't understand your example that well, but are you perhaps encountering this issue? https://forum.dlang.org/post/yixvtosbkuphnvxydtxr@forum.dlang.org
The issue is that `ref`, `scope`, `return`, etc. are parameter storage classes and not type constructors. It is unrelated to your post.
|
Copyright © 1999-2021 by the D Language Foundation