I'm still trying to build my __weak_capture, the original implementation "worked" but I want to improve it, especially to be able to __weak_capture __weak variables.
For those who don't know what it is, __weak_capture allow you to capture in a block a locally declared ObjC object variable from the parent scope. The block structure would capture that variable as if it was __weak. When the block is executed, the object is retained as if it was stored into a __strong variable in the scope of the block, which means that a nested block would capture a __strong and not whatever the variable as been declared as before.
I've came to the conclusion that, to keep the implementation simple, I had to shadow the __weak_captured variables with a local declaration with the same type but different qualifiers.
As an example, with this code:
__autoreleasing id obj = someValue;
if(obj == nil) return;
With the __weak_capture, the "obj" variable in the if would be defined as "const __strong id obj", const coming from the normal block capture, and the __strong coming from the __weak_capture. However, I'm not sure how to build that VarDecl so that other parts of the program can find it.
Can anyone tell me where I should start looking in order to define a proper local declaration in the block ?