On 27 Jul 2017, at 17:06, Fred Kiefer <fredkie...@gmx.de> wrote:
> 
>> 
>> Am 27.07.2017 um 10:26 schrieb David Chisnall <thera...@sucs.org>:
>> 
>> On 26 Jul 2017, at 14:58, Josh Freeman <gnustep_li...@twilightedge.com> 
>> wrote:
>>> 
>>> On Jul 26, 2017, at 7:37 AM, Daniel Ferreira (theiostream) wrote:
>>> 
>>>> Also, the reason it just does not assign the same const string to the 
>>>> different constants is because the two consts should be the same pointer, 
>>>> and doing it explicitly seemed like a good way to make that intent clear 
>>>> and guarantee that would happen.
>>> 
>>> 
>>> Changing the second string constant into a macro of the first would 
>>> guarantee they're the same pointer:
>>> 
>>> APPKIT_EXPORT NSString *NSStringPboardType;
>>> 
>>> ...
>>> 
>>> #if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
>>> #    define NSPasteboardTypeString NSStringPboardType
>>> #endif
>> 
>> Am I missing something?  Why not simply make the first symbol an alias for 
>> the second?
> 
> 
> David, what do you mean by alias?

I thought that GCC had an attribute for it, but apparently not.  The following 
works on ELF platforms, at least, and there are equivalents for Mach-O:

        #include <stdio.h>
        int x;

        extern int y;
        asm (".weakref y, x");

        int main(void)
        {
                y = 0;
                x = 42;
                // Prints 42
                printf(“%d\n”, y);
        }

So this would work for our use:

        extern NSPasteboardTypeString;
        asm(".weakref NSPasteboardTypeString NSStringPboardType");

We’d end up in the linked binary with a single location with two symbol names.  

David


_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to