Ronald Oussoren avatar Ronald Oussoren committed 1059289

Some small OSX 10.7 related tweaks

Comments (0)

Files changed (101)

pyobjc-core/Modules/objc/module.m

 	}
 #endif /* MAC_OS_X_VERSION_10_6 */
 
+#ifdef MAC_OS_X_VERSION_10_7
+	if (PyModule_AddIntConstant(m, "MAC_OS_X_VERSION_10_7", MAC_OS_X_VERSION_10_7) < 0) {
+		PyObjC_INITERROR();
+	}
+#endif /* MAC_OS_X_VERSION_10_6 */
+
 	if (PyModule_AddStringConstant(m, "platform", "MACOSX") < 0) {
 		PyObjC_INITERROR();
 	}

pyobjc-core/Modules/objc/pyobjc-compat.h

 #define MAC_OS_X_VERSION_10_6 1060
 #endif
 
+#ifndef MAC_OS_X_VERSION_10_7
+#define MAC_OS_X_VERSION_10_7 1070
+#endif
+
 
 /* On some versions of GCC <limits.h> defines LONG_LONG_MAX but not LLONG_MAX,
  * compensate.

pyobjc-core/libffi-src/libffi-exports.sym

+_ffi_call
+_ffi_prep_cif
+_ffi_prep_closure
+
+_ffi_type_double
+_ffi_type_float
+_ffi_type_longdouble
+_ffi_type_pointer
+_ffi_type_sint16
+_ffi_type_sint32
+_ffi_type_sint64
+_ffi_type_sint8
+_ffi_type_uint16
+_ffi_type_uint32
+_ffi_type_uint64
+_ffi_type_uint8
+_ffi_type_void

pyobjc-core/libffi-src/man/ffi.3

+.Dd July 20, 2007
+.Dt FFI 3
+.Os Darwin
+.Sh NAME
+.Nm FFI
+.Nd Foreign Function Interface
+.Sh LIBRARY
+libffi, -lffi
+.Sh SYNOPSIS
+.In ffi/ffi.h
+.Ft ffi_status
+.Fo ffi_prep_cif
+.Fa "ffi_cif *cif"
+.Fa "ffi_abi abi"
+.Fa "unsigned int nargs"
+.Fa "ffi_type *rtype"
+.Fa "ffi_type **atypes"
+.Fc
+.Ft ffi_status
+.Fo ffi_prep_closure
+.Fa "ffi_closure *closure"
+.Fa "ffi_cif *cif"
+.Fa "void (*fun)(ffi_cif*,void*,void**,void*)"
+.Fa "void *user_data"
+.Fc
+.Ft void
+.Fo ffi_call
+.Fa "ffi_cif *cif"
+.Fa "void (*fn)(void)"
+.Fa "void *rvalue"
+.Fa "void **avalue"
+.Fc
+.Sh DESCRIPTION
+The foreign function interface provides a mechanism by which a function can
+generate a call to another function at runtime without requiring knowledge of
+the called function's interface at compile time.
+.Sh SEE ALSO
+.Xr ffi_prep_cif 3 ,
+.Xr ffi_prep_closure 3 ,
+.Xr ffi_call 3

pyobjc-core/libffi-src/man/ffi_call.3

+.Dd July 20, 2007
+.Dt ffi_call 3
+.Os Darwin
+.Sh NAME
+.Nm ffi_call
+.Nd Invoke a foreign function.
+.Sh SYNOPSIS
+.In ffi/ffi.h
+.Ft void
+.Fo ffi_call
+.Fa "ffi_cif *cif"
+.Fa "void (*fn)(void)"
+.Fa "void *rvalue"
+.Fa "void **avalue"
+.Fc
+.Sh DESCRIPTION
+The
+.Nm ffi_call
+function provides a simple mechanism for invoking a function without
+requiring knowledge of the function's interface at compile time.
+.Fa fn
+is called with the values retrieved from the pointers in the
+.Fa avalue
+array. The return value from
+.Fa fn
+is placed in storage pointed to by
+.Fa rvalue .
+.Fa cif
+contains information describing the data types, sizes and alignments of the
+arguments to and return value from
+.Fa fn ,
+and must be initialized with
+.Nm ffi_prep_cif
+before it is used with
+.Nm ffi_call .
+.Pp
+.Fa rvalue
+must point to storage that is sizeof(long) or larger. For smaller
+return value sizes, the
+.Nm ffi_arg
+or
+.Nm ffi_sarg
+integral type must be used to hold
+the return value.
+.Sh EXAMPLES
+.Bd -literal
+#define MACOSX  // for fficonfig.h on Darwin
+
+#include <ffi/ffi.h>
+#include <stdio.h>
+
+unsigned char
+foo(unsigned int, float);
+
+int
+main(int argc, const char **argv)
+{
+    ffi_cif cif;
+    ffi_type *arg_types[2];
+    void *arg_values[2];
+    ffi_status status;
+
+    // Because the return value from foo() is smaller than sizeof(long), it
+    // must be passed as ffi_arg or ffi_sarg.
+    ffi_arg result;
+
+    // Specify the data type of each argument. Available types are defined
+    // in <ffi/ffi.h>.
+    arg_types[0] = &ffi_type_uint;
+    arg_types[1] = &ffi_type_float;
+
+    // Prepare the ffi_cif structure.
+    if ((status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI,
+        2, &ffi_type_uint8, arg_types)) != FFI_OK)
+    {
+        // Handle the ffi_status error.
+    }
+
+    // Specify the values of each argument.
+    unsigned int arg1 = 42;
+    float arg2 = 5.1;
+
+    arg_values[0] = &arg1;
+    arg_values[1] = &arg2;
+
+    // Invoke the function.
+    ffi_call(&cif, FFI_FN(foo), &result, arg_values);
+
+    // The ffi_arg 'result' now contains the unsigned char returned from foo(),
+    // which can be accessed by a typecast.
+    printf("result is %hhu", (unsigned char)result);
+
+    return 0;
+}
+
+// The target function.
+unsigned char
+foo(unsigned int x, float y)
+{
+    unsigned char result = x - y;
+    return result;
+}
+.Ed
+.Sh SEE ALSO
+.Xr ffi 3 ,
+.Xr ffi_prep_cif 3

pyobjc-core/libffi-src/man/ffi_prep_cif.3

+.Dd July 20, 2007
+.Dt ffi_prep_cif 3
+.Os Darwin
+.Sh NAME
+.Nm ffi_prep_cif
+.Nd Prepare a
+.Nm ffi_cif
+structure for use with
+.Nm ffi_call
+or
+.Nm ffi_prep_closure .
+.Sh SYNOPSIS
+.In ffi/ffi.h
+.Ft ffi_status
+.Fo ffi_prep_cif
+.Fa "ffi_cif *cif"
+.Fa "ffi_abi abi"
+.Fa "unsigned int nargs"
+.Fa "ffi_type *rtype"
+.Fa "ffi_type **atypes"
+.Fc
+.Sh DESCRIPTION
+The
+.Nm ffi_prep_cif
+function prepares a
+.Nm ffi_cif
+structure for use with 
+.Nm ffi_call
+or
+.Nm ffi_prep_closure .
+.Fa abi
+specifies a set of calling conventions to use.
+.Fa atypes
+is an array of
+.Fa nargs
+pointers to
+.Nm ffi_type
+structs that describe the data type, size and alignment of each argument.
+.Fa rtype
+points to an
+.Nm ffi_type
+that describes the data type, size and alignment of the
+return value.
+.Sh RETURN VALUES
+Upon successful completion,
+.Nm ffi_prep_cif
+returns
+.Nm FFI_OK .
+It will return
+.Nm FFI_BAD_TYPEDEF
+if
+.Fa cif
+is
+.Nm NULL
+or
+.Fa atypes
+or
+.Fa rtype
+is malformed. If
+.Fa abi
+does not refer to a valid ABI,
+.Nm FFI_BAD_ABI
+will be returned. Available ABIs are
+defined in
+.Nm <ffi/ppc-ffitarget.h>
+and
+.Nm <ffi/x86-ffitarget.h> .
+.Sh SEE ALSO
+.Xr ffi 3 ,
+.Xr ffi_call 3 ,
+.Xr ffi_prep_closure 3

pyobjc-core/libffi-src/man/ffi_prep_closure.3

+.Dd July 20, 2007
+.Dt ffi_prep_closure 3
+.Os Darwin
+.Sh NAME
+.Nm ffi_prep_closure
+.Nd Prepare a
+.Nm ffi_closure
+for execution.
+.Sh SYNOPSIS
+.In ffi/ffi.h
+.Ft ffi_status
+.Fo ffi_prep_closure
+.Fa "ffi_closure *closure"
+.Fa "ffi_cif *cif"
+.Fa "void (*fun)(ffi_cif*,void*,void**,void*)"
+.Fa "void *user_data"
+.Fc
+.Sh DESCRIPTION
+.Fa closure
+is prepared to execute
+.Fa fun .
+.Fa cif
+contains information describing the data types, sizes and alignments of the
+arguments to and return value from the function that will be called from
+.Fa fun ,
+and must be initialized with
+.Nm ffi_prep_cif
+before it is used with
+.Nm ffi_prep_closure .
+.Fa user_data
+may point to additional data to be used in
+.Fa fun .
+If no additional data is needed,
+.Fa user_data
+may be
+.Nm NULL .
+When
+.Fa closure
+is invoked,
+.Fa fun
+is called with
+.Fa cif ,
+an array of pointers to arguments, a pointer to a return value, and
+.Fa user_data .
+.Pp
+Some architectures do not allow the execution of data by default. In such cases,
+it is necessary to manually alter the permissions of the page that contains
+.Fa closure
+prior to its execution.
+.Sh RETURN VALUES
+Upon successful completion,
+.Nm ffi_prep_closure
+returns
+.Nm FFI_OK .
+If the ABI specified in
+.Fa cif
+does not refer to a valid ABI,
+.Nm FFI_BAD_ABI
+will be returned. Available ABIs are
+defined in
+.Nm <ffi/ppc-ffitarget.h>
+and
+.Nm <ffi/x86-ffitarget.h> .
+.Sh EXAMPLES
+.Bd -literal
+#define MACOSX  // for fficonfig.h on Darwin
+
+#include <ffi/ffi.h>
+#include <sys/mman.h>   // for mmap()
+
+unsigned char
+foo(unsigned int, float);
+
+static void
+foo_closure(ffi_cif*, void*, void**, void*);
+
+int
+main(int argc, const char **argv)
+{
+    ffi_cif cif;
+    ffi_closure *closure;
+    ffi_type *arg_types[2];
+    ffi_arg result;
+    ffi_status status;
+
+    // Specify the data type of each argument. Available types are defined
+    // in <ffi/ffi.h>.
+    arg_types[0] = &ffi_type_uint;
+    arg_types[1] = &ffi_type_float;
+
+    // Allocate a page to hold the closure with read and write permissions.
+    if ((closure = mmap(NULL, sizeof(ffi_closure), PROT_READ | PROT_WRITE,
+        MAP_ANON | MAP_PRIVATE, -1, 0)) == (void*)-1)
+    {
+        // Check errno and handle the error.
+    }
+
+    // Prepare the ffi_cif structure.
+    if ((status = ffi_prep_cif(&cif, FFI_DEFAULT_ABI,
+        2, &ffi_type_uint8, arg_types)) != FFI_OK)
+    {
+        // Handle the ffi_status error.
+    }
+
+    // Prepare the ffi_closure structure.
+    if ((status = ffi_prep_closure(closure, &cif, foo_closure, NULL)) != FFI_OK)
+    {
+        // Handle the ffi_status error.
+    }
+
+    // Ensure that the closure will execute on all architectures.
+    if (mprotect(closure, sizeof(closure), PROT_READ | PROT_EXEC) == -1)
+    {
+        // Check errno and handle the error.
+    }
+
+    // The closure is now ready to be executed, and can be saved for later
+    // execution if desired.
+
+    // Invoke the closure.
+    result = ((unsigned char(*)(float, unsigned int))closure)(42, 5.1);
+
+    // Free the memory associated with the closure.
+    if (munmap(closure, sizeof(closure)) == -1)
+    {
+        // Check errno and handle the error.
+    }
+
+    return 0;
+}
+
+// Invoking the closure transfers control to this function.
+static void
+foo_closure(ffi_cif* cif, void* result, void** args, void* userdata)
+{
+    // Access the arguments to be sent to foo().
+    float arg1 = *(float*)args[0];
+    unsigned int arg2 = *(unsigned int*)args[1];
+
+    // Call foo() and save its return value.
+    unsigned char ret_val = foo(arg1, arg2);
+
+    // Copy the returned value into result. Because the return value of foo()
+    // is smaller than sizeof(long), typecast it to ffi_arg. Use ffi_sarg
+    // instead for signed types.
+    *(ffi_arg*)result = (ffi_arg)ret_val;
+}
+
+// The closed-over function.
+unsigned char
+foo(unsigned int x, float y)
+{
+    unsigned char result = x - y;
+    return result;
+}
+.Ed
+.Sh SEE ALSO
+.Xr ffi 3 ,
+.Xr ffi_prep_cif 3 ,
+.Xr mmap 2 ,
+.Xr munmap 2 ,
+.Xr mprotect 2

pyobjc-core/libffi-src/tests/dejagnu.py

+#!/usr/bin/python
+"""
+A very crude emulator of dejagnu, just enough to integrate the libbfi 
+unittests into the pyobjc ones.
+"""
+import os
+import re
+import sys
+import signal
+from fnmatch import fnmatch
+import unittest
+from distutils.util import get_platform
+
+gDgCommands=re.compile(r'''
+        (?:{\s*(dg-do)\s*run\s*({[^}]*})?\s*})
+        |
+        (?:{\s*(dg-output)\s*"([^"]*)"\s*})
+        ''',
+            re.VERBOSE|re.MULTILINE)
+
+def signame(code):
+    for nm in dir(signal):
+        if nm.startswith('SIG') and nm[3] != '_' \
+                and getattr(signal, nm) == code:
+            return nm
+    return code
+
+def exitCode2Description(code):
+    """
+    Convert the exit code as returned by os.popen().close() to a string
+    """
+    if os.WIFEXITED(code):
+        return 'exited with status %s'%(os.WEXITSTATUS(code),)
+    
+    elif os.WIFSIGNALED(code):
+        sig = os.WTERMSIG(code)
+        return 'crashed with signal %s [%s]'%(signame(sig), sig)
+
+    else:
+        return 'exit code %s'%(code,)
+
+def platform_matches(matchstr):
+    # This is a hack
+    if sys.byteorder == 'little':
+        platform = 'i386-apple-darwin'
+    else:
+        platform = 'powerpc-apple-darwin'
+
+    return fnmatch(platform, matchstr)
+
+def parseDG(fdata):
+    result = []
+    for  item in gDgCommands.findall(fdata):
+        if item[0] == 'dg-do':
+            result.append(('run', item[1]))
+        elif item[2] == 'dg-output':
+            result.append(('expect', item[3].decode('string_escape')))
+    return result
+
+
+class DgTestCase (unittest.TestCase):
+    def __init__(self, filename):
+        unittest.TestCase.__init__(self)
+        self.filename = filename
+
+    #archOption = "-arch ppc"
+    #archOption = "-arch ppc64"
+    #archOption = "-arch i386"
+    archOption = "-arch x86_64"
+    #archOption = ""
+    compileOptionsBase = "-g -DMACOSX -Iinclude -o /tmp/test.bin -lffi"
+    compileOptionsList = ( # HACK ALERT: Yes, there are better ways to do this, but this is easy and extremely flexible
+        "%s %s %s" % (compileOptionsBase, archOption, "-O0"), 
+        "%s %s %s" % (compileOptionsBase, archOption, "-O1"), 
+        "%s %s %s" % (compileOptionsBase, archOption, "-O2"), 
+        "%s %s %s" % (compileOptionsBase, archOption, "-O3"), 
+        "%s %s %s" % (compileOptionsBase, archOption, "-Os"),
+        "%s %s %s" % (compileOptionsBase, archOption, "-Oz"),  # Note: Apple-Only, see gcc man page for details
+        )
+    def runTest(self):
+        script = parseDG(open(self.filename).read())
+        output = []
+
+        for command, data in script:
+            if command == 'run':
+                action = 'run'
+                action_data = data
+            if command == 'expect':
+                output.append(data)
+        output = ''.join(output)
+        output = output.replace('\\', '')
+
+        d = action_data.split()
+        if d and d[1] == 'target':
+            for item in d[2:]:
+                if platform_matches(item):
+                    break
+
+            else:
+                # Test shouldn't be run on this platform
+                return
+
+        # NOTE: We're ignoring the xfail data for now, none of the
+        # testcases are supposed to fail on darwin.
+        
+        for compileOptions in self.compileOptionsList:
+            self.compileTestCase(compileOptions)
+            data = self.runTestCase()
+
+            if output != '':
+                self.assertEquals(data.rstrip(), output.rstrip())
+                os.unlink('/tmp/test.bin')
+
+
+    def shortDescription(self):
+        fn = os.path.basename(self.filename)[:-2]
+        dn = os.path.basename(os.path.dirname(self.filename))
+        return "dejagnu.%s.%s"%(dn, fn)
+
+    def compileTestCase(self, compileOptions):
+        # libdir = os.path.join('build', 'temp.%s-%d.%d'%(get_platform(), sys.version_info[0], sys.version_info[1]), 'libffi-src')
+        # libffiobjects = self.object_files(libdir)
+
+        commandline='cc %s %s 2>&1' % (compileOptions, self.filename)
+        fp = os.popen(commandline)
+        data = fp.read()
+        xit = fp.close()
+        if xit != None:
+            self.fail("Compile failed[%s]:\n%s"%(xit, data))
+
+
+    def runTestCase(self):
+        os.environ['DYLD_BIND_AT_LAUNCH'] = '1'
+        fp = os.popen('/tmp/test.bin', 'r')
+        del os.environ['DYLD_BIND_AT_LAUNCH']
+        data = fp.read()
+        xit = fp.close()
+        if xit != None:
+            self.fail("Running failed (%s)"%(exitCode2Description(xit),))
+        return data
+
+
+    def object_files(self, basedir):
+        result = []
+        for dirpath, dirnames, filenames in os.walk(basedir):
+            for fn in filenames:
+                if fn.endswith('.o'):
+                    result.append(os.path.join(dirpath, fn))
+        return result
+            
+
+def testSuiteForDirectory(dirname):
+    tests = []
+    for fn in os.listdir(dirname):
+        if not fn.endswith('.c'): continue
+        tst = DgTestCase(os.path.join(dirname, fn))
+        if alltests and tst.shortDescription() not in alltests:
+            continue
+        tests.append(tst)
+
+    return unittest.TestSuite(tests)
+
+alltests = []
+if __name__ == "__main__":
+    alltests = sys.argv[1:]
+    runner = unittest.TextTestRunner(verbosity=2)
+    runner.run(testSuiteForDirectory('tests/testsuite/libffi.call'))

pyobjc-core/libffi-src/tests/run-tests.py

+"""
+'test' action for setup.py
+"""
+# XXX - use setuptools test suite support
+import sys, os, string, glob
+from os.path import basename, dirname, splitext, join, expanduser, walk
+from fnmatch import fnmatch
+import unittest
+import dejagnu
+
+deja_suite = dejagnu.testSuiteForDirectory('tests/testsuite/libffi.call')            
+suite = unittest.TestSuite((deja_suite, ))
+runner = unittest.TextTestRunner(verbosity=1)
+runner.run(suite)

pyobjc-core/libffi-src/tests/testsuite/libffi.call/promotion2.c

+/* Area:	ffi_call
+   Purpose:	Promotion test.
+   Limitations:	none.
+   PR:		none.
+   Originator:	From the original ffitest.c  */
+
+/* { dg-do run } */
+#include "ffitest.h"
+static inline unsigned int promotion(short s1, short s2)
+{
+  unsigned int r = s1 << 16 | s2;
+
+  return r;
+}
+
+int main (void)
+{
+  ffi_cif cif;
+  ffi_type *args[MAX_ARGS];
+  void *values[MAX_ARGS];
+  ffi_arg rint;
+  short us;
+  short us2;
+  unsigned long ul = 0;
+
+  args[0] = &ffi_type_ushort;
+  args[1] = &ffi_type_ushort;
+  values[0] = &us;
+  values[1] = &us2;
+  
+  /* Initialize the cif */
+  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 2, 
+		     &ffi_type_uint, args) == FFI_OK);
+  
+  for (us = 55; us < 30000; us+=1034) {
+    for (us2 = 100; us2 < 30000; us2+=1945) {
+      ffi_call(&cif, FFI_FN(promotion), &rint, values);
+      CHECK((unsigned int)rint == (us << 16 | us2));
+    }
+  }
+  printf("%lu promotion2 tests run\n", ul);
+  exit(0); 
+}

pyobjc-framework-Cocoa/BridgeSupport/CoreFoundation.bridgesupport

   <cftype gettypeid_func='CFDateGetTypeID' name='CFDateRef' tollfree='__NSCFDate,NSCFDate,__NSDate' type='^{__CFDate=}' type64='^{__CFDate=}' />
   <cftype gettypeid_func='CFDictionaryGetTypeID' name='CFDictionaryRef' tollfree='__NSCFDictionary,NSCFDictionary' type='^{__CFDictionary=}' type64='^{__CFDictionary=}' />
   <cftype gettypeid_func='CFErrorGetTypeID' name='CFErrorRef' tollfree='__NSCFError,NSCFError' type='^{__CFError=}' type64='^{__CFError=}' />
+  <cftype gettypeid_func='CFFileSecurityGetTypeID' name='CFFileSecurityRef' type='^{__CFFileSecurity=}' type64='^{__CFFileSecurity=}' />
   <cftype gettypeid_func='CFFileDescriptorGetTypeID' name='CFFileDescriptorRef' type='^{__CFFileDescriptor=}' type64='^{__CFFileDescriptor=}' />
   <cftype gettypeid_func='CFLocaleGetTypeID' name='CFLocaleRef' tollfree='__NSCFLocale,NSCFLocale' type='^{__CFLocale=}' type64='^{__CFLocale=}' />
   <cftype gettypeid_func='CFMachPortGetTypeID' name='CFMachPortRef' tollfree='NSMachPort' type='^{__CFMachPort=}' type64='^{__CFMachPort=}' />
   <cftype gettypeid_func='CFWriteStreamGetTypeID' name='CFWriteStreamRef' tollfree='__NSCFOutputStream,NSCFOutputStream' type='^{__CFWriteStream=}' type64='^{__CFWriteStream=}' />
   <cftype gettypeid_func='CFXMLNodeGetTypeID' name='CFXMLNodeRef' type='^{__CFXMLNode=}' type64='^{__CFXMLNode=}' />
   <cftype gettypeid_func='CFXMLParserGetTypeID' name='CFXMLParserRef' type='^{__CFXMLParser=}' type64='^{__CFXMLParser=}' />
+  <constant name='kCFURLKeysOfUnsetValuesKey' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceIdentifierKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIdentifierKey' type='^{__CFString}' />
+  <constant name='kCFURLPreferredIOBlockSizeKey' type='^{__CFString}' />
+  <constant name='kCFURLIsReadableKey' type='^{__CFString}' />
+  <constant name='kCFURLIsWritableKey' type='^{__CFString}' />
+  <constant name='kCFURLIsExecutableKey' type='^{__CFString}' />
+  <constant name='kCFURLFileSecurityKey' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeKey' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeNamedPipe' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeCharacterSpecial' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeDirectory' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeBlockSpecial' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeRegular' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeSymbolicLink' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeSocket' type='^{__CFString}' />
+  <constant name='kCFURLTotalFileAllocatedSizeKey' type='^{__CFString}' />
+  <constant name='kCFURLTotalFileSizeKey' type='^{__CFString}' />
+  <constant name='kCFURLIsMountTriggerKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeSupportsRootDirectoryDatesKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeSupportsVolumeSizesKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeSupportsRenamingKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeSupportsAdvisoryFileLockingKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeSupportsExtendedSecurityKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsBrowsableKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeMaximumFileSizeKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsEjectableKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsRemovableKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsInternalKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsAutomountedKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsLocalKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeIsReadOnlyKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeCreationDateKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeURLForRemountingKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeUUIDStringKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeNameKey' type='^{__CFString}' />
+  <constant name='kCFURLVolumeLocalizedNameKey' type='^{__CFString}' />
+  <constant name='kCFURLIsUbiquitousItemKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemHasUnresolvedConflictsKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemIsDownloadedKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemIsDownloadingKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemIsUploadedKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemIsUploadingKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemPercentDownloadedKey' type='^{__CFString}' />
+  <constant name='kCFURLUbiquitousItemPercentUploadedKey' type='^{__CFString}' />
+  <constant name='kCFURLFileResourceTypeUnknown' type='^{__CFString}' />
   <constant name='kCFURLNameKey' type='^{__CFString}' />
   <constant name='kCFURLLocalizedNameKey' type='^{__CFString}' />
   <constant name='kCFURLIsRegularFileKey' type='^{__CFString}' />
   <constant name='kCFErrorLocalizedFailureReasonKey' type='^{__CFString=}' />
   <constant name='kCFErrorLocalizedRecoverySuggestionKey' type='^{__CFString=}' />
   <constant name='kCFErrorUnderlyingErrorKey' type='^{__CFString=}' />
+  <constant name='kCFErrorURLKey' type='^{__CFString=}' />
+  <constant name='kCFErrorFilePathKey' type='^{__CFString=}' />
   <constant name='kCFGregorianCalendar' type='^{__CFString=}' />
   <constant name='kCFHebrewCalendar' type='^{__CFString=}' />
   <constant name='kCFIslamicCalendar' type='^{__CFString=}' />
   <constant name='kCFXMLTreeErrorLineNumber' type='^{__CFString=}' />
   <constant name='kCFXMLTreeErrorLocation' type='^{__CFString=}' />
   <constant name='kCFXMLTreeErrorStatusCode' type='^{__CFString=}' />
+  <enum name='kCFURLEnumeratorDefaultBehavior' value='0' />
+  <enum name='kCFURLEnumeratorDescendRecursively' value='1' />
+  <enum name='kCFURLEnumeratorSkipInvisibles' value='2' />
+  <enum name='kCFURLEnumeratorGenerateFileReferenceURLs' value='4' />
+  <enum name='kCFURLEnumeratorSkipPackageContents' value='8' />
+  <enum name='kCFURLEnumeratorIncludeDirectoriesPreOrder' value='16' />
+  <enum name='kCFURLEnumeratorIncludeDirectoriesPostOrder' value='32' />
   <enum name='kCFURLBookmarkCreationPreferFileIDResolutionMask' value='256' />
   <enum name='kCFURLBookmarkCreationMinimalBookmarkMask' value='512' />
   <enum name='kCFURLBookmarkCreationSuitableForBookmarkFile' value='1024' />
   <enum name='kCFPropertyListReadUnknownVersionError' value='3841' />
   <enum name='kCFPropertyListReadStreamError' value='3842' />
   <enum name='kCFPropertyListWriteStreamError' value='3851' />
-  <enum name='kCFMessagePortBecameInvalidError' value='-5' />
   <enum name='kCFLocaleLanguageDirectionUnknown' value='0' />
   <enum name='kCFLocaleLanguageDirectionLeftToRight' value='1' />
   <enum name='kCFLocaleLanguageDirectionRightToLeft' value='2' />
   <enum name='kCFCoreFoundationVersionNumber10_5_4' value='476.14' />
   <enum name='kCFCoreFoundationVersionNumber10_5_5' value='476.15' />
   <enum name='kCFCoreFoundationVersionNumber10_5_6' value='476.17' />
+  <enum name='kCFCoreFoundationVersionNumber10_5_7' value='476.18' />
+  <enum name='kCFCoreFoundationVersionNumber10_5_8' value='476.19' />
+  <enum name='kCFCoreFoundationVersionNumber10_6' value='550.00' />
+  <enum name='kCFCoreFoundationVersionNumber10_6_1' value='550.00' />
+  <enum name='kCFCoreFoundationVersionNumber10_6_2' value='550.13' />
+  <enum name='kCFCoreFoundationVersionNumber10_6_3' value='550.19' />
+  <enum name='kCFCoreFoundationVersionNumber10_6_4' value='550.29' />
+  <enum name='kCFCoreFoundationVersionNumber10_6_5' value='550.42' />
   <enum name='kCFDataSearchBackwards' value='1' />
   <enum name='kCFDataSearchAnchored' value='2' />
   <enum name='kCFCalendarUnitQuarter' value='2048' />
+  <enum name='kCFCalendarUnitWeekOfMonth' value='4096' />
+  <enum name='kCFCalendarUnitWeekOfYear' value='8192' />
+  <enum name='kCFCalendarUnitYearForWeekOfYear' value='16384' />
   <enum name='kCFURLEnumeratorSuccess' value='1' />
   <enum name='kCFURLEnumeratorEnd' value='2' />
   <enum name='kCFURLEnumeratorError' value='3' />
-  <enum name='kCFURLEnumeratorDescendRecursively' value='1' />
-  <enum name='kCFURLEnumeratorSkipInvisibles' value='2' />
-  <enum name='kCFURLEnumeratorGenerateFileReferenceURLs' value='4' />
-  <enum name='kCFURLEnumeratorSkipPackageContents' value='8' />
   <enum name='CFByteOrderBigEndian' value='2' />
   <enum name='CFByteOrderLittleEndian' value='1' />
   <enum name='CFByteOrderUnknown' value='0' />
   <enum name='kCFMessagePortSendTimeout' value='-1' />
   <enum name='kCFMessagePortSuccess' value='0' />
   <enum name='kCFMessagePortTransportError' value='-4' />
+  <enum name='kCFMessagePortBecameInvalidError' value='-5' />
   <enum name='kCFNotFound' value='-1' />
   <enum name='kCFNotificationDeliverImmediately' value='1' />
   <enum name='kCFNotificationPostToAllSessions' value='2' />
   <function name='CFURLEnumeratorGetTypeID'>
      <retval type='i' type64='q' />
   </function>
+  <function name='CFFileSecurityGetTypeID'>
+     <retval type='i' type64='q' />
+  </function>
   <function name='CFURLEnumeratorGetSourceDidChange'>
     <retval type='B' />
     <arg type='^{__CFURLEnumerator=}' />
     <retval type='l' type64='q' />
     <arg type='^{__CFRunLoopObserver=}' />
   </function>
+  <function name='CFRunLoopObserverCreateWithHandler'>
+    <retval type='^{__CFRunLoopObserver=}' already_cfretained='true' />
+    <arg type='^{__CFAllocator=}' />
+    <arg type='L' type64='Q' />
+    <arg type='B' >
+    <arg type='L' type64='Q' />
+    <arg type='@?' block='true'>
+      <retval type='v' />
+      <arg type='^{__CFRunLoopObserver=}' />
+      <arg type='L' type64='Q' />
+    </arg>
+  </function>
   <function name='CFRunLoopObserverGetTypeID'>
     <retval type='L' type64='Q' />
   </function>
   <function name='CFRunLoopStop'>
     <arg type='^{__CFRunLoop=}' />
   </function>
+  <function name='CFRunLoopTimerCreateWithHandler'>
+    <retval type='^{__CFRunLoopTimer=}' already_cfretained='true'/>
+    <arg type='^{__CFAllocator=}' />
+    <arg type='d' />
+    <arg type='L' type64='Q' />
+    <arg type='l' type64='q' />
+    <arg type='@?' block='true'>
+      <retval type='v' />
+      <arg type='^{__CFRunLoopTimer=}' />
+    </arg>
+  </function>
   <function name='CFRunLoopTimerDoesRepeat'>
     <retval type='B' />
     <arg type='^{__CFRunLoopTimer=}' />
     <arg type='^^{__CFReadStream}' type_modifier='o' />
     <arg type='^^{__CFWriteStream}' type_modifier='o' />
   </function>
+  <function name='CFStringGetHyphenationLocationBeforeIndex'>
+    <retval type='l' type64='q' />
+    <arg type='^{__CFString=}' />
+    <arg type='l' type64='q' />
+    <arg type='{_CFRange=ll}' type64='{_CFRange=ll}' />
+    <arg type='L' type64='Q' />
+    <arg type='^{__CFLocale=}' type64='^{__CFLocale=}' />
+    <arg type_modifier='o' type='^I'>
+  </function>
+  <function name='CFStringIsHyphenationAvailableForLocale'>
+    <retval type='B' />
+    <arg type='^{__CFLocale=}' type64='^{__CFLocale=}' />
+  </function>
   <function name='CFStringAppend'>
     <arg type='^{__CFString=}' />
     <arg type='^{__CFString=}' />
     <retval type='L' type64='Q' />
     <arg type='l' type64='l' />
   </function>
+  <function name='CFFileSecurityCreate'>
+    <retval already_cfretained='true' type='^{__CFFileSecurity=}' />
+    <arg type='^{__CFAllocator=}' />
+  </function>
+  <function name='CFFileSecurityCreateCopy'>
+    <retval already_cfretained='true' type='^{__CFFileSecurity=}' />
+    <arg type='^{__CFAllocator=}' />
+    <arg type='^{__CFFileSecurity=}' />
+  </function>
+  <function name='CFFileSecurityCopyOwnerUUID'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type_modifier='o' type='^^{__CFUUID=}' />
+  </function>
+  <function name='CFFileSecuritySetOwnerUUID'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type='^{__CFUUID=}' />
+  </function>
+  <function name='CFFileSecurityCopyGroupUUID'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type_modifier='o' type='^^{__CFUUID=}' />
+  </function>
+  <function name='CFFileSecuritySetGroupUUID'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type='^{__CFUUID=}' />
+  </function>
+  <function name='CFFileSecurityGetOwner'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type_modifier='o' type='^I' />
+  </function>
+  <function name='CFFileSecuritySetOwner'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type='I' />
+  </function>
+  <function name='CFFileSecurityGetGroup'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type_modifier='o' type='^I' />
+  </function>
+  <function name='CFFileSecuritySetGroup'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type='I' />
+  </function>
+  <function name='CFFileSecurityGetMode'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type_modifier='o' type='^S' />
+  </function>
+  <function name='CFFileSecuritySetMode'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type='S' />
+  </function>
+  <function name='CFFileSecurityCopyAccessControlList'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type_modifier='o' type='^^{_acl=}' />
+  </function>
+  <function name='CFFileSecuritySetAccessControlList'>
+    <retval type='B' />
+    <arg type='^{__CFFileSecurity=}' />
+    <arg type='^{_acl=}' />
+  </function>
 </signatures>

pyobjc-framework-Cocoa/BridgeSupport/Foundation.bridgesupport

   <struct name='NSSwappedFloat' type='{_NSSwappedFloat="v"I}' type64='{_NSSwappedFloat="v"I}' />
   <opaque name='NSAppleEventManagerSuspensionID' type='^{__NSAppleEventManagerSuspension=}' type64='^{__NSAppleEventManagerSuspension=}' />
   <opaque name='NSZone*' type='^{_NSZone=}' type64='^{_NSZone=}' />
+  <constant name='NSMetadataQueryLocalDocumentsScope' type='@' />
+  <constant name='NSMetadataQueryUbiquitousDocumentsScope' type='@' />
+  <constant name='NSMetadataQueryUbiquitousDataScope' type='@' />
+  <constant name='NSMetadataItemFSNameKey' type='@' />
+  <constant name='NSMetadataItemDisplayNameKey' type='@' />
+  <constant name='NSMetadataItemURLKey' type='@' />
+  <constant name='NSMetadataItemPathKey' type='@' />
+  <constant name='NSMetadataItemFSSizeKey' type='@' />
+  <constant name='NSMetadataItemFSCreationDateKey' type='@' />
+  <constant name='NSMetadataItemFSContentChangeDateKey' type='@' />
+  <constant name='NSMetadataItemIsUbiquitousKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemHasUnresolvedConflictsKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemIsDownloadedKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemIsDownloadingKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemIsUploadedKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemIsUploadingKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemPercentDownloadedKey' type='@' />
+  <constant name='NSMetadataUbiquitousItemPercentUploadedKey' type='@' />
+  <constant name='NSLinguisticTagSchemeTokenType' type='@' />
+  <constant name='NSLinguisticTagSchemeLexicalClass' type='@' />
+  <constant name='NSLinguisticTagSchemeNameType' type='@' />
+  <constant name='NSLinguisticTagSchemeNameTypeOrLexicalClass' type='@' />
+  <constant name='NSLinguisticTagSchemeLemma' type='@' />
+  <constant name='NSLinguisticTagSchemeLanguage' type='@' />
+  <constant name='NSLinguisticTagSchemeScriptNSLinguisticTagWord' type='@' />
+  <constant name='NSLinguisticTagPunctuation' type='@' />
+  <constant name='NSLinguisticTagWhitespace' type='@' />
+  <constant name='NSLinguisticTagOther' type='@' />
+  <constant name='NSLinguisticTagNoun' type='@' />
+  <constant name='NSLinguisticTagVerb' type='@' />
+  <constant name='NSLinguisticTagAdjective' type='@' />
+  <constant name='NSLinguisticTagAdverb' type='@' />
+  <constant name='NSLinguisticTagPronoun' type='@' />
+  <constant name='NSLinguisticTagDeterminer' type='@' />
+  <constant name='NSLinguisticTagParticle' type='@' />
+  <constant name='NSLinguisticTagPreposition' type='@' />
+  <constant name='NSLinguisticTagNumber' type='@' />
+  <constant name='NSLinguisticTagConjunction' type='@' />
+  <constant name='NSLinguisticTagInterjection' type='@' />
+  <constant name='NSLinguisticTagClassifier' type='@' />
+  <constant name='NSLinguisticTagIdiom' type='@' />
+  <constant name='NSLinguisticTagOtherWord' type='@' />
+  <constant name='NSLinguisticTagSentenceTerminator' type='@' />
+  <constant name='NSLinguisticTagOpenQuote' type='@' />
+  <constant name='NSLinguisticTagCloseQuote' type='@' />
+  <constant name='NSLinguisticTagOpenParenthesis' type='@' />
+  <constant name='NSLinguisticTagCloseParenthesis' type='@' />
+  <constant name='NSLinguisticTagWordJoiner' type='@' />
+  <constant name='NSLinguisticTagDash' type='@' />
+  <constant name='NSLinguisticTagOtherPunctuation' type='@' />
+  <constant name='NSLinguisticTagParagraphBreak' type='@' />
+  <constant name='NSLinguisticTagOtherWhitespace' type='@' />
+  <constant name='NSLinguisticTagPersonalName' type='@' />
+  <constant name='NSLinguisticTagPlaceName' type='@' />
+  <constant name='NSLinguisticTagOrganizationName' type='@' />
   <constant name='NSURLAuthenticationMethodClientCertificate' type='@'/>
   <constant name='NSURLAuthenticationMethodServerTrust' type='@'/>
   <constant name='NSURLErrorFailingURLErrorKey' type='@'/>
   <constant name='NSTextCheckingZIPKey' type='@' />
   <constant name='NSTextCheckingCountryKey' type='@' />
   <constant name='NSTextCheckingPhoneKey' type='@' />
+  <constant name='NSFileCoordinatorReadingWithoutChanges' value='1' />
+  <constant name='NSFileCoordinatorReadingResolvesSymbolicLink' value='2' />
+  <constant name='NSFileCoordinatorWritingForDeleting' value='1' />
+  <constant name='NSFileCoordinatorWritingForMoving' value='2' />
+  <constant name='NSFileCoordinatorWritingForMerging' value='4' />
+  <constant name='NSFileCoordinatorWritingForReplacing' value='8' />
+  <enum name='NSRegularExpressionCaseInsensitive' value='1' />
+  <enum name='NSRegularExpressionAllowCommentsAndWhitespace' value='2' />
+  <enum name='NSRegularExpressionIgnoreMetacharacters' value='4' />
+  <enum name='NSRegularExpressionDotMatchesLineSeparators' value='8' />
+  <enum name='NSRegularExpressionAnchorsMatchLines' value='16' />
+  <enum name='NSRegularExpressionUseUnixLineSeparators' value='32' />
+  <enum name='NSRegularExpressionUseUnicodeWordBoundaries' value='64' />
+  <enum name='NSMatchingReportProgress' value='1' />
+  <enum name='NSMatchingReportCompletion' value='2' />
+  <enum name='NSMatchingAnchored' value='4' />
+  <enum name='NSMatchingWithTransparentBounds' value='8' />
+  <enum name='NSMatchingWithoutAnchoringBounds' value='16' />
+  <enum name='NSMatchingProgress' value='1' />
+  <enum name='NSMatchingCompleted' value='2' />
+  <enum name='NSMatchingHitEnd' value='4' />
+  <enum name='NSMatchingRequiredEnd' value='8' />
+  <enum name='NSMatchingInternalError' value='16' />
+  <enum name='NSLinguisticTaggerOmitWords' value='1' />
+  <enum name='NSLinguisticTaggerOmitPunctuation' value='2' />
+  <enum name='NSLinguisticTaggerOmitWhitespace' value='4' />
+  <enum name='NSLinguisticTaggerOmitOther' value='8' />
+  <enum name='NSLinguisticTaggerJoinNames' value='16' />
+  <enum name='NSJSONReadingMutableContainers' value='1' />
+  <enum name='NSJSONReadingMutableLeaves' value='2' />
+  <enum name='NSJSONReadingAllowFragments' value='4' />
+  <enum name='NSJSONWritingPrettyPrinted' value='1' />
+  <enum name='NSAlignMinXInward' value='1' />
+  <enum name='NSAlignMinYInward' value='2' />
+  <enum name='NSAlignMaxXInward' value='4' />
+  <enum name='NSAlignMaxYInward' value='8' />
+  <enum name='NSAlignWidthInward' value='16' />
+  <enum name='NSAlignHeightInward' value='32' />
+
+  <enum name='NSAlignMinXOutward' value='256' />
+  <enum name='NSAlignMinYOutward' value='512' />
+  <enum name='NSAlignMaxXOutward' value='1024' />
+  <enum name='NSAlignMaxYOutward' value='2048' />
+  <enum name='NSAlignWidthOutward' value='4096' />
+  <enum name='NSAlignHeightOutward' value='8192' />
+
+  <enum name='NSAlignMinXNearest' value='65536' />
+  <enum name='NSAlignMinYNearest' value='131072' />
+  <enum name='NSAlignMaxXNearest' value='262144' />
+  <enum name='NSAlignMaxYNearest' value='524288' />
+  <enum name='NSAlignWidthNearest' value='1048576' />
+  <enum name='NSAlignHeightNearest' value='2097152' />
+
+  <enum name='NSAlignRectFlipped' value='9223372036854775808' />
+
+  <enum name='NSAlignAllEdgesInward' value='15' />
+  <enum name='NSAlignAllEdgesOutward' value='3840' />
+  <enum name='NSAlignAllEdgesNearest' value='983040' />
+  <enum name='NSFileVersionAddingByMoving' value='1' />
+  <enum name='NSFileVersionReplacingByMoving' value='1' />
   <enum name='NSFileWriteVolumeReadOnlyError' value='642' />
   <enum name='NSTextCheckingTypeOrthography' value='1' />
   <enum name='NSTextCheckingTypeSpelling' value='2' />
   <enum name='NSDeveloperApplicationDirectory' value='3' />
   <enum name='NSDeveloperDirectory' value='6' />
   <enum name='NSDiacriticInsensitivePredicateOption' value='2' />
+  <enum name='NSNormalizedPredicateOption' value='4' />
   <enum name='NSDiacriticInsensitiveSearch' value='128' />
   <enum name='NSDirectPredicateModifier' value='0' />
   <enum name='NSDocumentDirectory' value='9' />
   <enum name='NSFoundationVersionNumber10_5_4' value='677.19' />
   <enum name='NSFoundationVersionNumber10_5_5' value='677.21' />
   <enum name='NSFoundationVersionNumber10_5_6' value='677.22' />
+  <enum name='NSFoundationVersionNumber10_5_7' value='677.24' />
+  <enum name='NSFoundationVersionNumber10_5_8' value='677.26' />
+  <enum name='NSFoundationVersionNumber10_6' value='751.00' />
+  <enum name='NSFoundationVersionNumber10_6_1' value='751.00' />
+  <enum name='NSFoundationVersionNumber10_6_2' value='751.14' />
+  <enum name='NSFoundationVersionNumber10_6_3' value='751.21' />
+  <enum name='NSFoundationVersionNumber10_6_4' value='751.29' />
+  <enum name='NSFoundationVersionNumber10_6_5' value='751.42' />
   <enum name='NSFoundationVersionWithFileManagerResourceForkSupport' value='412' />
   <enum name='NSFunctionExpressionType' value='4' />
   <enum name='NSEnumerationConcurrent' value='1' />
   <enum name='NSSymbolStringEncoding' value='6' />
   <enum name='NSSystemDomainMask' value='8' />
   <enum name='NSTimeIntervalSince1970' value='978307200.0' />
-  <enum name='NSTimeIntervalSince1970' value='978307200.0' />
   <enum name='NSTimeZoneNameStyleGeneric' value='4' />
   <enum name='NSTimeZoneNameStyleShortGeneric' value='5' />
   <enum name='NSURLBookmarkCreationPreferFileIDResolution' value='256' />
   <enum name='NSUncachedRead' value='2' />
   <enum name='NSDataReadingMapped' value='1' />
   <enum name='NSDataReadingUncached' value='2' />
+  <enum name='NSDataReadingMappedAlways' value='4' />
   <enum name='NSDataWritingAtomic' value='1' />
   <enum name='NSUndefinedDateComponent' value='2147483647' value64='9223372036854775807' />
   <enum name='NSUndoCloseGroupingRunLoopOrdering' value='350000' />
   <enum name='NSWeekdayCalendarUnit' value='512' />
   <enum name='NSWeekdayOrdinalCalendarUnit' value='1024' />
   <enum name='NSQuarterCalendarUnit' value='2048' />
+  <enum name='NSWeekOfMonthCalendarUnit' value='4096' />
+  <enum name='NSWeekOfYearCalendarUnit' value='8192' />
+  <enum name='NSYearForWeekOfYearCalendarUnit' value='16384' />
+  <enum name='NSCalendarCalendarUnit' value='1048576' />
+  <enum name='NSTimeZoneCalendarUnit' value='2097152' />
   <enum name='NSWidthInsensitiveSearch' value='256' />
   <enum name='NSWindows95OperatingSystem' value='2' />
   <enum name='NSWindowsCP1250StringEncoding' value='15' />
     <arg type='^{_NSDecimal=}' />
     <arg type='I' type64='Q' />
   </function>
+  <function name='NSDecimalMultiplyByPowerOf10' >
+    <retval type='I' type64='Q' />
+    <arg type='^{_NSDecimal=}' />
+    <arg type='^{_NSDecimal=}' />
+    <arg type='h' />
+    <arg type='I' type64='Q' />
+  </function>
   <function name='NSDecimalSubtract' >
     <retval type='I' type64='Q' />
     <arg type='^{_NSDecimal=}' />
     <retval type='{_NSRect={_NSPoint=ff}{_NSSize=ff}}' type64='{CGRect={CGPoint=dd}{CGSize=dd}}' />
     <arg type='{_NSRect={_NSPoint=ff}{_NSSize=ff}}' type64='{CGRect={CGPoint=dd}{CGSize=dd}}' />
   </function>
+  <function name='NSIntegralRectWithOptions'>
+    <retval type='{_NSRect={_NSPoint=ff}{_NSSize=ff}}' type64='{CGRect={CGPoint=dd}{CGSize=dd}}' />
+    <arg type='{_NSRect={_NSPoint=ff}{_NSSize=ff}}' type64='{CGRect={CGPoint=dd}{CGSize=dd}}' />
+    <arg type='Q' />
+  </function>
   <function name='NSIntersectionRange'>
     <retval type='{_NSRange=II}' type64='{_NSRange=QQ}' />
     <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
 	  <method selector='fileHandleForUpdatingURL:error:' >
 		  <arg index='1' type_modifier='o' />
 	  </method>
+	  <method selector='readabilityHandler' >
+		  <retval block='true' >
+		    <retval type='v' />
+		    <arg type='@' />
+		  </retval>
+	  </method>
+	  <method selector='writeabilityHandler' >
+		  <retval block='true' >
+		    <retval type='v' />
+		    <arg type='@' />
+		  </retval>
+	  </method>
+	  <method selector='setReadabilityHandler' >
+		  <arg index='0' block='true' >
+		    <retval type='v' />
+		    <arg type='@' />
+		  </retval>
+	  </method>
+	  <method selector='setWriteabilityHandler' >
+		  <arg index='0' block='true' >
+		    <retval type='v' />
+		    <arg type='@' />
+		  </retval>
+	  </method>
 
     <method selector='initWithFileDescriptor:closeOnDealloc:'>
       <arg index='1' type='B' />
     <method selector='createDirectoryAtPath:attributes:'>
       <retval type='B' />
     </method>
+    <method selector='createDirectoryAtURL:withIntermediateDirectories:attributes:error:'>
+      <retval type='B' />
+      <arg index='1' type='B' />
+      <arg index='3' type_modifier='o' />
+    </method>
+    <method selector='createSymbolicLinkAtURL:withDestinationURL:error:'>
+      <retval type='B' />
+      <arg index='2' type_modifier='o' />
+    </method>
     <method selector='createDirectoryAtPath:withIntermediateDirectories:attributes:error:'>
       <retval type='B' />
       <arg index='1' type='B' />
 	    <arg index='4' type_modifier='o' />
 	    <arg index='5' type_modifier='o' />
     </method>
+    <method selector='setUbiquitous:itemAtURL:destinationURL:error:' >
+      <retval type='B' />
+      <arg index='0' type='B' />
+      <arg index='3' type_modifier'o' />
+    </method>
+    <method selector='isUbiquitousItemAtURL:' >
+      <retval type='B' />
+    </method>
+    <method selector='startDownloadingUbiquitousItemAtURL:error:' >
+      <retval type='B' />
+      <arg index='1' type_modifier'o' />
+    </method>
+    <method selector='evictUbiquitousItemAtURL:error:' >
+      <retval type='B' />
+      <arg index='1' type_modifier'o' />
+    </method>
+    <method selector='URLForPublishingUbiquitousItemAtURL:expirationDate:error:' >
+      <arg index='1' type_modifier'o' />
+      <arg index='2' type_modifier'o' />
+    </method>
   </class>
   <class name='NSFormatter'>
     <method selector='getObjectValue:forString:errorDescription:'>
 			  <arg type='^B' type_modifier='o' />
 		  </arg>
 	  </method>
+	  <method selector='enumerateRangesUsingBlock:'>
+		  <arg index='0' block='true'>
+			  <retvtype='v' />
+	    		  <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+			  <arg type_modifier='o' type='^B' />
+		  </arg>
+	  </method>
+	  <method selector='enumerateRangesWithOptions:usingBlock:'>
+		  <arg index='1' block='true'>
+			  <retval type='v' />
+	    		  <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+			  <arg type_modifier='o' type='^B' />
+		  </arg>
+	  </method>
+	  <method selector='enumerateRangesInRange:options:usingBlock:'>
+		  <arg index='0' type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+		  <arg index='2' block='true'>
+			  <retval type='v' />
+	    		  <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+			  <arg type_modifier='o' type='^B' />
+		  </arg>
+	  </method>
+
   </class>
   <class name='NSInputStream'>
     <method selector='getBuffer:length:' suggestion='Not supported at the moment' />
     </method>
   </class>
   <class name='NSObject'>
+	  <method selector='allowsWeakReference'>
+		  <retval type='B' />
+	  </method>
+	  <method selector='retainWeakReference'>
+		  <retval type='B' />
+	  </method>
+	  <method selector='relinquishPresentedItemToReader:'>
+		  <arg index='0' type='@?' block='true' >
+			  <retval type='v' />
+			  <arg type='@?' block='true'>
+				  <retval type='v' />
+			  </arg>
+		  </arg>
+	  </method>
+	  <method selector='relinquishPresentedItemToWriter:'>
+		  <arg index='0' type='@?' block='true' >
+			  <retval type='v' />
+			  <arg type='@?' block='true'>
+				  <retval type='v' />
+			  </arg>
+		  </arg>
+	  </method>
+	  <method selector='savePresentedItemChangesWithCompletionHandler:'>
+		  <arg index='0' type='@?' block='true' >
+			  <retval type='v' />
+			  <arg type='@' />
+		  </arg>
+	  </method>
+	  <method selector='accommodatePresentedItemDeletionWithCompletionHandler:'>
+		  <arg index='0' type='@?' block='true' >
+			  <retval type='v' />
+			  <arg type='@' />
+		  </arg>
+	  </method>
+	  <method selector='accommodatePresentedSubitemDeletionAtURL:completionHandler:'>
+		  <arg index='1' type='@?' block='true' >
+			  <retval type='v' />
+			  <arg type='@' />
+		  </arg>
+	  </method>
 	  <method selector='beginContentAccess'>
 		  <retval type='B'/>
 	  </method>
 	  <method selector='usesStrongWriteBarrier'>
 		  <retval type='B'/>
 	  </method>
+	  <method selector='setUsesStrongWriteBarrier:'>
+		  <arg index='0' type='B'/>
+	  </method>
 	  <method selector='usesWeakReadAndWriteBarriers'>
 		  <retval type='B'/>
 	  </method>
+	  <method selector='setUsesWeakReadAndWriteBarriers:'>
+		  <arg index='0' type='B'/>
+	  </method>
   </class>
   <class name='NSPointerArray'>
 	  <method selector='addPointer:'>
     </method>
   </class>
   <class name='NSProxy'>
+	  <method selector='allowsWeakReference'>
+		  <retval type='B' />
+	  </method>
+	  <method selector='retainWeakReference'>
+		  <retval type='B' />
+	  </method>
     <method class_method='true' selector='respondsToSelector:'>
       <retval type='B' />
     </method>
     </method>
   </class>
   <class name='NSString'>
+	  <method selector='linguisticTagsInRange:scheme:options:orthography:tokenRanges:'>
+		  <arg index='4' type_modifier='o' />
+	  </method>
+	  <method selector='enumeratorLinguisticTagsInRange:scheme:options:orthography:usingBlock:'>
+		  <arg index='4' block='true'>
+			  <retval type='v'/>
+			  <arg type='@'>
+			  <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+			  <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+		          <arg type='^B' type_modifier='o' />
+		  </arg>
+	  </method>
 	  <method selector='enumerateSubstringsInRange:options:usingBlock:'>
 	      <arg index='0' type='{_NSRange=II}' type64='{_NSRange=QQ}' />
 	      <arg index='2' block='true' >
       <retval type='B' />
     </method>
   </class>
+  <class name='NSFileCoordinator'>
+   <method selector='coordinateReadingItemAtURL:options:error:byAccessor:'>
+    <arg index='2' type_modifier='o' />
+    <arg index='3' block='true' >
+      <retval type='v' />
+      <arg type='@' />
+    </arg>
+   </method>
+   <method selector='coordinateWritingItemAtURL:options:error:byAccessor:'>
+    <arg index='2' type_modifier='o' />
+    <arg index='3' block='true' >
+      <retval type='v' />
+      <arg type='@' />
+    </arg>
+   </method>
+   <method selector='coordinateReadingItemAtURL:options:writingItemAtURL:options:error:byAccessor:'>
+    <arg index='4' type_modifier='o' />
+    <arg index='5' block='true' >
+      <retval type='v' />
+      <arg type='@' />
+    </arg>
+   </method>
+   <method selector='coordinateWritingItemAtURL:options:writingItemAtURL:options:error:byAccessor:'>
+    <arg index='4' type_modifier='o' />
+    <arg index='5' block='true' >
+      <retval type='v' />
+      <arg type='@' />
+    </arg>
+   </method>
+   <method selector='prepareForReadingItemsAtURLs:options:writingItemsAtURLs:options:error:byAccessor:'>
+     <arg index='4' type_modifier='o' />
+     <arg index='5' block='true' >
+       <retval type='v' />
+       <arg type='@?' block='true'>
+	  <retval type='v' />
+       </arg>
+    </arg>
+   </method>
+ </class>
+ <class name='NSFileVersions'>
+	 <method selector='removeOtherVersionsOfItemAtURL:error:'>
+		 <retval type='B' />
+		 <arg index='1' type_modifier='o' />
+	 </method>
+	 <method selector='removeAndReturnError:'>
+		 <retval type='B' />
+		 <arg index='0' type_modifier='o' />
+	 </method>
+	 <method selector='replaceItemAtURL:options:error:'>
+		 <arg index='2' type_modifier='o' />
+	 </method>
+	 <method selector='setDiscardable:'>
+		 <arg index='0' type='B' />
+	 </method>
+	 <method selector='isDiscardable'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='setResolved:'>
+		 <arg index='0' type='B' />
+	 </method>
+	 <method selector='isResolved'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='setConflict:'>
+		 <arg index='0' type='B' />
+	 </method>
+	 <method selector='isConflict'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='addVersionOfItemAtURL:withContentsOfURL:options:error:'>
+		<arg index='3' type_modifier='o' />
+	</method>
+ </class>
+ <class name='NSJSONSerialization'>
+	 <method selector='isValidJSONObject:'>
+		 <retval type='B' />
+	 </method>
+	 <method class_method='true' selector='dataWithJSONObject:options:error:'>
+		 <arg index='2' type_modifier='o' />
+	 </method>
+	 <method class_method='true' selector='JSONObjectWithData:options:error:'>
+		 <arg index='2' type_modifier='o' />
+	 </method>
+	 <method class_method='true' selector='writeJSONObject:toStream:options:error:'>
+		 <arg index='3' type_modifier='o' />
+	 </method>
+	 <method class_method='true' selector='JSONObjectWithStream:options:error:'>
+		 <arg index='2' type_modifier='o' />
+	 </method>
+ </class>
+ <class name='NSLinguisticTagger'>
+	 <method selector='orthographyAtIndex:effectiveRange:'>
+		 <arg index='1' type_modifier='o' type='^{_NSRange=II}' type64='^{_NSRange=QQ}' />
+	 </method>
+	 <method selector='enumerateTagsInRange:scheme:options:usingBlock:'>
+		 <arg index='3' block='true'>
+			 <retval type='v' />
+			 <arg type='@' />
+			 <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+			 <arg type='{_NSRange=II}' type64='{_NSRange=QQ}' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='tagAtIndex:scheme:tokenRange:sentenceRange:'>
+		 <arg index='2' type_modifier='o' type='^{_NSRange=II}' type64='^{_NSRange=QQ}' />
+		 <arg index='3' type_modifier='o' type='^{_NSRange=II}' type64='^{_NSRange=QQ}' />
+	 </method>
+	 <method selector='tagsInRange:scheme:options:tokenRanges:'>
+		 <arg index='3' type_modifier='o' />
+	 </method>
+	 <method selector='possibleTagsAtIndex:scheme:tokenRange:sentenceRange:scores:'>
+		 <arg index='2' type_modifier='o' type='^{_NSRange=II}' type64='^{_NSRange=QQ}' />
+		 <arg index='3' type_modifier='o' type='^{_NSRange=II}' type64='^{_NSRange=QQ}' />
+		 <arg index='4' type_modifier='o' />
+	 </method>
+ </class>
+ <class name='NSOrderedSet'>
+	 <method selector='isEqualToOrderedSet:'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='containsObject:'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='intersectsOrderedSet:'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='insersectsSet:'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='isSubsetOfOrderedSet:'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='isSubsetOfSet:'>
+		 <retval type='B' />
+	 </method>
+	 <method selector='enumerateObjectsUsingBlock:'>
+		 <arg index='0' block='true'>
+			 <retval type='v' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='enumerateObjectsWithOptions:usingBlock:'>
+		 <arg index='1' block='true'>
+			 <retval type='v' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='enumerateObjectsAtIndexes:options:usingBlock:'>
+		 <arg index='2' block='true'>
+			 <retval type='v' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexOfObjectPassingTest:'>
+		 <arg index='0' block='true'>
+			 <retval type='B' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexOfObjectWithOptions:passingTest:'>
+		 <arg index='1' block='true'>
+			 <retval type='B' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexOfObjectAtIndexes:options:passingTest:'>
+		 <arg index='2' block='true'>
+			 <retval type='B' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexesOfObjectsPassingTest:'>
+		 <arg index='0' block='true'>
+			 <retval type='B' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexesOfObjecstWithOptions:passingTest:'>
+		 <arg index='1' block='true'>
+			 <retval type='B' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexesOfObjectsAtIndexes:options:passingTest:'>
+		 <arg index='2' block='true'>
+			 <retval type='B' />
+			 <arg type='@' />
+			 <arg type='L' />
+			 <arg type_modifier='o' type='^B' />
+		 </arg>
+	 </method>
+	 <method selector='indexOfObject:inSortedRange:options:usingComparator:'>
+		  <arg index='3' block='true' >
+			  <retval type='l'/>
+			  <arg type='@' />
+			  <arg type='@' />
+		  </arg>
+	 </method>
+	 <method selector='sortedArrayUsingComparator:'>
+		  <arg index='0' block='true' >
+			  <retval type='l'/>
+			  <arg type='@' />
+			  <arg type='@' />
+		  </arg>
+	 </method>
+	 <method selector='sortedArrayWithOptions:usingComparator:'>
+		  <arg index='1' block='true' >
+			  <retval type='l'/>
+			  <arg type='@' />
+			  <arg type='@' />
+		  </arg>
+	 </method>
+	 <method selector='orderedSetWithObjects:count:' class_method='true'>
+		 <arg index='0' c_array_length_in_arg='1' type_modifier='n' />
+	 </method>
+	 <method c_array_delimited_by_null='true' class_method='true' selector='orderedSetWithObjects:' variadic='true' />
+	 <method selector='initWithObjects:count:'>
+		 <arg index='0' c_array_length_in_arg='1' type_modifier='n' />
+	 </method>
+	 <method c_array_delimited_by_null='true' selector='initWithObjects:' variadic='true' />
+	 <method selector='orderedSetWithOrderedSet:range:copyItems:' class_method='true'>
+		 <arg index='2' type='B' />
+	 </method>
+	 <method selector='orderedSetWithOrderedSet:copyItems:' class_method='true'>
+		 <arg index='1' type='B' />
+	 </method>
+	 <method selector='orderedSetWithArray:range:copyItems:' class_method='true'>
+		 <arg index='2' type='B' />
+	 </method>
+	 <method selector='orderedSetWithArray:copyItems:' class_method='true'>
+		 <arg index='2' type='B' />
+	 </method>
+	 <method selector='orderedSetWithSet:copyItems:' class_method='true'>
+		 <arg index='1' type='B' />
+	 </method>
+	 <method selector='initWithOrderedSet:range:copyItems:'>
+		 <arg index='2' type='B' />
+	 </method>
+	 <method selector='initWithOrderedSet:copyItems:'>
+		 <arg index='1' type='B' />
+	 </method>
+	 <method selector='initWithArray:range:copyItems:'>
+		 <arg index='2' type='B' />
+	 </method>
+	 <method selector='initWithArray:copyItems:'>
+		 <arg index='1' type='B' />
+	 </method>
+	 <method selector='initWithSet:copyItems:'>
+		 <arg index='1' type='B' />
+	 </method>
+ </class>
+ <class name='NSMutableOrderedSet'>
+	 <method selector='addObjects:count:'>
+		 <arg index='0' c_array_length_in_arg='1' type_modifier='n' />
+	 </method>
+	 <method selector='replaceObjectsInRange:withObjects:count:'>
+		 <arg index='1' c_array_length_in_arg='2' type_modifier='n' />
+	 </method>
+	 <method selector='sortUsingComparator:'>
+		  <arg index='0' block='true' >
+			  <retval type='l'/>
+			  <arg type='@' />
+			  <arg type='@' />
+		  </arg>
+	  </method>
+	 <method selector='sortWithOptions:usingComparator:'>
+		  <arg index='1' block='true' >
+			  <retval type='l'/>
+			  <arg type='@' />
+			  <arg type='@' />
+		  </arg>
+	  </method>
+	 <method selector='sortRange:options:usingComparator:'>
+		  <arg index='2' block='true' >
+			  <retval type='l'/>
+			  <arg type='@' />
+			  <arg type='@' />
+		  </arg>
+	  </method>
+  </class>
+  <class name='NSRegularExpression'>
+	  <method selector='regularExpressionWithPattern:options:error:' class_method='true'>
+		  <arg index='2' type_modifier='o' />
+	  </method>
+	  <method selector='initWithPattern:options:error:' >
+		  <arg index='2' type_modifier='o' />
+	  </method>
+	  <method selector='enumerateMatchesInString:options:range:usingBlock:' >
+		  <arg index='3' block='true'>
+			  <retval type='v' />
+			  <arg type='@' />
+			  <arg type='I' type64='Q' />
+			  <arg type_modifier='o' type='B' />
+		  </arg>
+	  </method>
+  </class>
+  <class name='NSDataDetector'>
+	  <method selector='dataDetectorWithTypes:error:' class_method='true'>
+		  <arg index='1' type_modifier='o' />
+	  </method>
+	  <method selector='initWithTypes:error:'>
+		  <arg index='1' type_modifier='o' />
+	  </method>
+  </class>
 </signatures>

pyobjc-framework-Cocoa/Doc/api-notes-Foudation.txt

 API Notes for the Foundation framework
 ======================================
 
+Introduction
+------------
+
+This document contains information about APIs that do not work, or work
+differently than expected. All other APIs are supported and can be accessed
+using the standard mechanisms described in the PyObjC Core documentation.
+
 ``NSFastEnumeration``
 ---------------------
 
 
   These functions are not yet supported.
 
+``NSExpression``
+----------------
+
+* ``expressionWithFormat:``
+
+  This method is currently not supported because there is no API documentation,
+  which makes it impossible to wrap this method with a vararg signature.
+
 
 ``NSGarbageCollector``
 ----------------------
 	with NSDisabledSuddenTermination:
 	    # sudden termination is disabled here
 	    pass
+
+PyObjC defines a context named ``NSDisabledAutomaticTermination``. This can be used to 
+disable automatic termination for a block of code. The context works on all versions of
+OSX, but only has a real side effect on OSX 10.6 or later.
+
+Usage::
+
+	with NSDisabledAutomaticTermination("Updating status"):
+	    # sudden termination is disabled here
+	    pass
 	
 
 ``NSSet``

pyobjc-framework-Cocoa/Lib/Foundation/_functiondefines.py

 
 
 NSDisabledSuddenTermination = _OC_DisabledSuddenTermination()
+
+if hasattr(NSProcessInfo, 'disableSuddenTermination_'):
+    class NSDisabledAutomaticTermination (object):
+        """
+        Helper class to implement NSDisabledAutomaticTermination
+
+        Usage::
+
+            with NSDisabledAutomaticTermination:
+                pass
+
+        Inside the with block sudden termination is disabled.
+
+        This only has an effect on OSX 10.6 or later.
+        """
+        def __init__(self, reason):
+            self._reason = reason
+
+        def __enter__(self):
+            NSProcessInfo.processInfo().disableAutomaticTermination_(self._reason)
+
+        def __exit__(self, type, value, tb):
+            NSProcessInfo.processInfo().enableAutomaticTermination_(self._reason)

pyobjc-framework-Cocoa/PyObjCTest/test_cfarray.py

         self.assertEqual(cpy, [1,2,3,4])
         self.assertIsInstance(cpy, CFMutableArrayRef)
         self.assertIsNot(cpy, array )
+
     def testCounts(self):
         array = CFArrayCreate(None, [1,2,3,4,4,2], 6, kCFTypeArrayCallBacks)
         self.assertEqual(array, [1,2,3,4,4,2])
         self.assertEqual(CFArrayGetCountOfValue(array, (0,6), 4) , 2 )
         self.assertEqual(CFArrayGetCountOfValue(array, (0,6), 2) , 2 )
         self.assertEqual(CFArrayGetCountOfValue(array, (0,6), 3) , 1 )
+
     def testContains(self):
         array = CFArrayCreate(None, [u"a",2,3,4,4,2], 6, kCFTypeArrayCallBacks)
         self.assertEqual(array, [u"a",2,3,4,4,2])
         self.assertArgHasType(CFArrayGetFirstIndexOfValue, 2, b'@')
         self.assertArgHasType(CFArrayGetLastIndexOfValue, 2, b'@')
 
-
     def testGetting(self):
         array = CFArrayCreate(None, [u"a",2,3,4,4,2], 6, kCFTypeArrayCallBacks)
         self.assertEqual(array, [u"a",2,3,4,4,2])
         self.assertIsInstance(array, NSArray)
         array = CFArrayCreateMutableCopy(None, 0, array)
 
-
         self.assertArgHasType(CFArrayAppendValue, 1, b'@')
         self.assertArgHasType(CFArrayInsertValueAtIndex, 2, b'@')
         self.assertArgHasType(CFArraySetValueAtIndex, 2, b'@')
         CFArraySetValueAtIndex(array, 2, u"two")
         self.assertEqual(array, [u"a",4, u"two",4,4,2,u"foo"])
 
-
         CFArrayExchangeValuesAtIndices(array, 1,2)
         self.assertEqual(array, [u"a",u"two",4,4,4,2,u"foo"])
 
 
         array2 = CFArrayCreate(None, [u'hello', u'earth'], 2, kCFTypeArrayCallBacks)
         CFArrayAppendArray(array, array2, (0,2))
-        self.assertEqual(array, [u"a",u"two",u'a', u'b', u'c', u'd', u'e', u'f', 2, u'foo', u'hello', u'earth'])
+        self.assertEqual(array, [
+            u"a",u"two",u'a', u'b', u'c', u'd', u'e', u'f', 2, u'foo', u'hello', u'earth'])
 
         CFArrayRemoveAllValues(array)
         self.assertEqual(array, [])

pyobjc-framework-Cocoa/PyObjCTest/test_cfattributedstring.py