aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/objc-obj-c++-shared
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2011-06-06 22:46:58 +0000
committerNicola Pero <nicola@gcc.gnu.org>2011-06-06 22:46:58 +0000
commit88b470b80c827f069c516ceeeaf65a174a843480 (patch)
tree059bb43db4c6e79cbfc2b53aad3fae44ac932bdd /gcc/testsuite/objc-obj-c++-shared
parent889ec77132ca388f1d4a3349db729564969feac2 (diff)
downloadgcc-88b470b80c827f069c516ceeeaf65a174a843480.zip
gcc-88b470b80c827f069c516ceeeaf65a174a843480.tar.gz
gcc-88b470b80c827f069c516ceeeaf65a174a843480.tar.bz2
In gcc/testsuite/: 2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/testsuite/: 2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com> Updated all testcases in the ObjC/ObjC++ testsuites to use the Modern Objective-C runtime API. * objc/execute/next_mapping.h: Removed. * objc-obj-c++-shared/next-mapping.h: Removed. * objc-obj-c++-shared/Object1.h: Removed. * objc-obj-c++-shared/Object1.m: Removed. * objc-obj-c++-shared/Object1.mm: Removed. * objc-obj-c++-shared/Object1-implementation.h: Removed. * objc-obj-c++-shared/Protocol1.h: Removed. * objc-obj-c++-shared/objc-test-suite-types.h: Removed definition of ProtoBool, IVAR_T and METHOD. * objc-obj-c++-shared/runtime.h: New. * objc-obj-c++-shared/TestsuiteObject.h: New. * objc-obj-c++-shared/TestsuiteObject.m: New. * objc/compile/trivial.m: Use TestsuiteObject instead of Object. * objc/execute/IMP.m: Include ../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C runtime API. ([TestClass -next:]): Made it a class method. * objc/execute/_cmd.m: Include ../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C runtime API. ([TestClass +initialize]): Include this method also with the GNU runtime. * objc/execute/accessing_ivars.m: Use TestsuiteObject instead of Object. ([-setValue:]): Return void. * objc/execute/bf-common.h: Do not include objc/objc-encoding.h with the GNU runtime. Include ../../objc-obj-c++-shared/runtime.h. Do not define objc_get_class for the NeXT runtime. Use the existing print_ivars() and compare_structures() implementations for the old NeXT runtime. Added new implementations for the Modern GNU and NeXT runtimes. Enable the testcase (and hence all the bf-* ones) for __OBJC2__ as well. (main): Use objc_getClass(). Use return instead of exit. * objc/execute/bycopy-1.m: Include objc/objc.h instead of ../../objc-obj-c++-shared/Protocol1.h. (main): Use return instead of exit(). * objc/execute/bycopy-2.m: Include objc/objc.h instead of ../../objc-obj-c++-shared/Protocol1.h. Use TestsuiteObject instead of Object. (main): Use return instead of exit(). * objc/execute/bycopy-3.m: Updated includes. Use TestsuiteObject instead of Object. Removed prototype for exit(). (main): Use return instead of exit(). Use the Modern Objective-C runtime API. * objc/execute/cascading-1.m: Use TestsuiteObject instead of Object. * objc/execute/class-tests-1.h: Include ../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C runtime API. (test_class_with_superclass): Do not call [Object class]. There is no need to with the current libobjc. * objc/execute/class-tests-2.h: Include ../../objc-obj-c++-shared/runtime.h. Use the Modern Objective-C runtime API. * objc/execute/class-1.m: Do not include <objc/objc-api.h> and ../../objc-obj-c++-shared/next-mapping.h. * objc/execute/class-2.m: Likewise. * objc/execute/class-3.m: Likewise. * objc/execute/class-4.m: Do not include <objc/objc-api.h> and ../../objc-obj-c++-shared/next-mapping.h. ([RootClass +initialize]): Include this method also with the GNU runtime. (main): Use the Modern Objective-C runtime API. * objc/execute/class-5.m: Likewise. * objc/execute/class-6.m: Likewise. * objc/execute/class-7.m: Likewise. * objc/execute/class-8.m: Likewise. * objc/execute/class-9.m: Likewise. * objc/execute/class-10.m: Likewise. * objc/execute/class-11.m: Likewise. * objc/execute/class-12.m: Likewise. * objc/execute/class-13.m: Likewise. * objc/execute/class-14.m: Likewise. * objc/execute/class_self-1.m ([TestClass +initialize]): Include this method also with the GNU runtime. * objc/execute/class_self-2.m: ([TestClass +initialize], [ClassA +initialize]): Include this method also with the GNU runtime. * objc/execute/compatibility_alias.m: Use TestsuiteObject instead of Object. * objc/execute/encode-1.m: Likewise. * objc/execute/enumeration-1.m: Likewise. * objc/execute/enumeration-2.m: Likewise. * objc/execute/exceptions/catchall-1.m: Likewise. * objc/execute/exceptions/finally-1.m: Likewise. * objc/execute/exceptions/foward-1.m: Likewise. * objc/execute/exceptions/local-variables-1.m: Likewise. * objc/execute/exceptions/throw-nil.m: Likewise. * objc/execute/exceptions/trivial.m: Likewise. * objc/execute/exceptions/handler-1.m: Use TestsuiteObject instead of Object. Include objc/runtime.h instead of objc/objc-api.h. * objc/execute/exceptions/matcher-1.m: Likewise. * objc/execute/formal_protocol-1.m: Use TestsuiteObject instead of Object. * objc/execute/formal_protocol-2.m: Likewise. * objc/execute/formal_protocol-3.m: Likewise. * objc/execute/formal_protocol-4.m: Likewise. * objc/execute/formal_protocol-5.m: Include ../../objc-obj-c++-shared/runtime.h. (main): Always use protocol_getName(). * objc/execute/formal_protocol-6.m: Likewise. * objc/execute/formal_protocol-7.m: Use TestsuiteObject instead of Object. Include <objc/Protocol.h> instead of ../../objc-obj-c++-shared/Protocol1.h. * objc/execute/function-message-1.m: Use TestsuiteObject intead of Object. * objc/execute/informal_protocol.m: Likewise. * objc/execute/load-3.m: Likewise. * objc/execute/many_args_method.m ([TestClass +initialize]): Include this method with the GNU runtime as well. * objc/execute/nested-3.m ([Test +initialize]): Likewise. * objc/execute/nested-func-1.m: Use TestsuiteObject instead of Object. * objc/execute/nil_method-1.m: Likewise. * objc/execute/no_clash.m: Likewise. * objc/execute/np-1.m: Do not include ../../objc-obj-c++-shared/Protocol1.h. (main): Use return instead of exit(). * objc/execute/np-2.m: Do not include ../../objc-obj-c++-shared/Protocol1.h. ([MyObject +initialize]): Include this method also with the GNU runtime. (main): Use return instead of exit(). * objc/execute/object_is_class.m: Include ../../objc-obj-c++-shared/runtime.h. Use TestsuiteObject instead of Object. (main): Use the Modern Objective-C runtime API. * objc/execute/object_is_meta_class.m: Likewise. * objc/execute/private.m: Use TestsuiteObject instead of Object. * objc/execute/protocol-isEqual-1.m: Include objc/Protocol.h instead of ../objc-obj-c++-shared/Protocol1.h. Include ../../objc-obj-c++-shared/runtime.h. (main): Use the Modern Objective-C runtime API. * objc/execute/protocol-isEqual-2.m: Likewise. * objc/execute/protocol-isEqual-3.m: Likewise. * objc/execute/protocol-isEqual-4.m: Likewise. * objc/execute/redefining_self.m ([TestClass +initialize]): Include this method with the GNU runtime as well. * objc/execute/root_methods.m: Include ../../objc-obj-c++-shared/runtime.h. ([RootClass +initialize]): Include this method with the GNU runtime as well. (main): Use the Modern Objective-C runtime API. * objc/execute/selector-1.m: Include ../../objc-obj-c++-shared/runtime.h. Use TestsuiteObject instead of Object. (main): Use the Modern Objective-C runtime API. * objc/execute/static-1.m ([Test +initialize]): Include this method with the GNU runtime as well. * objc/execute/static-2.m: Likewise. * objc/execute/trivial.m: Use TestsuiteObject instead of Object. * objc/execute/va_method.m: Do not include objc/objc-api.h. ([MathClass +initialize]): Include this method with the GNU runtime as well. * objc.dg/attributes/categ-attribute-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/attributes/categ-attribute-1.mm: Likewise. * objc.dg/attributes/categ-attributes-2.m: Likewise. * obj-c++.dg/attributes/categ-attributes-2.mm: Likewise. * objc.dg/attributes/method-attribute-1.m: Likewise. * obj-c++.dg/attributes/method-attribute-1.mm: Likewise. * objc.dg/attributes/method-attribute-2.m: Likewise. * obj-c++.dg/attributes/method-attribute-2.mm: Likewise. * objc.dg/attributes/method-attribute-3.m: Likewise. * obj-c++.dg/attributes/method-attribute-3.mm: Likewise. * obj-c++.dg/basic.mm: Use TestsuiteObject instead of Object. * objc.dg/bitfield-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/bitfield-1.mm: Likewise. * obj-c++.dg/bitfield-2.mm: Likewise * objc.dg/bitfield-3.m: Likewise. * obj-c++.dg/bitfield-4.mm: Likewise. * objc.dg/bitfield-5.m: Likewise * objc.dg/call-super-1.m: Likewise. * objc.dg/call-super-2.m: Use TestsuiteObject instead of Object. Use objc_getClass() instead of objc_get_class(), but for the GNU runtime redefine objc_getClass as objc_get_class. Include ../objc-obj-c++-shared/runtime.h. * objc.dg/call-super-3.m: Use TestsuiteObject instead of Object. * objc.dg/category-1.m: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. * objc.dg/class-protocol-1.m: Include ../objc-obj-c++-shared/runtime.h instead of objc/objc-api.h. * obj-c++.dg/class-protocol-1.mm: Likewise. * objc.dg/comp-types-8.m: Use TestsuiteObject instead of Object. * objc.dg/comp-types-10.m: Likewise. * objc.dg/comp-types-11.m: Likewise. * objc.dg/comp-types-12.m: Likewise. * obj-c++.dg/comp-types-9.mm: Likewise. * obj-c++.dg/comp-types-11.mm: Likewise. * obj-c++.dg/comp-types-12.mm: Likewise. * obj-c++.dg/comp-types-13.mm: Likewise. * obj-c++.dg/cxx-ivars-1.mm: Likewise. * obj-c++.dg/cxx-ivars-2.mm: Likewise. * obj-c++.dg/cxx-scope-1.mm: Likewise. * obj-c++.dg/cxx-scope-2.mm: Likewise. * objc.dg/defs.m: Use TestsuiteObject instead of Object. * objc.dg/desig-init-1.m: Likewise. * obj-c++.dg/defs.mm: Likewise. * objc.dg/exceptions-2.m: Likewise. * obj-c++.dg/except-1.mm: Likewise. * obj-c++.dg/exceptions-2.mm: Likewise. * objc.dg/encode-2.m: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. * objc.dg/encode-3.m: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. Do not include ../objc-obj-c++-shared/objc-test-suite-types.h. Define ProtoBool. * objc.dg/encode-4.m: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API except when using an older NeXT runtime. * objc.dg/encode-5.m: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. * objc.dg/encode-7.m: Include objc/runtime.h instead of objc/encoding.h. * objc.dg/encode-7-next.m: Use TestsuiteObject instead of Object. * objc.dg/encode-7-next-64bit.m: Updated include. * objc.dg/encode-8.m: Include objc/runtime.h instead of objc/encoding.h. * obj-c++.dg/encode-4.mm: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. * obj-c++.dg/encode-5.mm: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. Include objc/Protocol.h instead of ../objc-obj-c++-shared/Protocol1.h. * obj-c++.dg/encode-6.mm: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API except when using an older NeXT runtime. * obj-c++.dg/encode-7.mm: Use TestsuiteObject instead of Object. Use the Modern Objective-C runtime API. * objc.dg/fix-and-continue-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/fix-and-continue-2.mm: Likewise. * objc.dg/fix-and-continue-2.m: Likewise. * objc.dg/foreach-1.m: Likewise. * objc.dg/foreach-2.m: Likewise. * objc.dg/foreach-3.m: Likewise. * objc.dg/foreach-4.m: Likewise. * objc.dg/foreach-5.m: Likewise. * objc.dg/foreach-6.m: Likewise. * objc.dg/foreach-7.m: Likewise. * objc.dg/func-ptr-1.m: Use TestsuiteObject instead of Object. * objc.dg/func-ptr-2.m: Likewise. * objc.dg/fsf-package-0.m: Use TestsuiteObject instead of Object. Do not include objc/objc-api.h. * obj-c++.dg/fsf-package-0.mm: Likewise. * objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c (switchfiles): Include objc/runtime.h instead of objc/encoding.h. * objc.dg/gnu-runtime-1.m: Updated to use TestsuiteObject instead of Object. * obj-c++.dg/gnu-runtime-1.mm: Likewise. * objc.dg/gnu-runtime-3.m: Likewise. * obj-c++.dg/gnu-runtime-3.mm: Likewise. * objc.dg/headers.m: Include objc/runtime.h instead of objc/encoding.h for the GNU runtime. Include objc/objc-api.h only for the NeXT runtime. * objc.dg/isa-field-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/isa-field-1.mm: Likewise. * obj-c++.dg/ivar-list-semi.mm: Likewise. * objc.dg/layout-1.m: Likewise. * objc.dg/layout-2.m: Likewise. * objc.dg/local-decl-2.m: Likewise. * objc.dg/lookup-1.m: Use TestsuiteObject instead of Object. ([Container +elementForView:]): Use class_conformsToProtocol(). * obj-c++.dg/lookup-2.mm: Likewise. * obj-c++.dg/layout-1.mm: Use TestsuiteObject instead of Object. * obj-c++.dg/local-decl-1.mm: Likewise. * objc.dg/method-3.m: Likewise. * objc.dg/method-4.m: Likewise. * objc.dg/method-6.m: Include objc/Protocol.h instead of ../objc-obj-c++-shared/Protocol1.h. * objc.dg/method-7.m: Use TestsuiteObject instead of Object. * objc.dg/method-9.m: Likewise. * objc.dg/method-10.m: Likewise. * objc.dg/method-13.m ([Root +initialize]): Include this method also for the GNU runtime. (main): Use objc_getClass() also for the GNU runtime. * objc.dg/method-15.m: Use TestsuiteObject instead of Object. * objc.dg/method-17.m: Likewise. * objc.dg/method-19.m: Likewise. * objc.dg/method-20b.m: Likewise. * obj-c++.dg/method-2.mm: Likewise. * obj-c++.dg/method-6.mm: Likewise. * obj-c++.dg/method-10.mm: Likewise. * obj-c++.dg/method-11.mm: Likewise. * obj-c++.dg/method-12.mm: Include objc/Protocol.h instead of ../objc-obj-c++-shared/Protocol1.h. * obj-c++.dg/method-13.mm: Use TestsuiteObject instead of Object. * obj-c++.dg/method-15.mm: Likewise. * obj-c++.dg/method-17.mm: Likewise. * obj-c++.dg/method-19.mm: Updated includes. ([Root +initialize]): Include this method also for the GNU runtime. (main): Use objc_getClass() also for the GNU runtime. * obj-c++.dg/method-21.mm: Use TestsuiteObject instead of Object. * obj-c++.dg/method-22.mm: Likewise. * obj-c++.dg/method-23.mm: Likewise. * obj-c++.dg/no-extra-load.mm: Likewise. * objc.dg/objc-fast-4.m: Likewise. * objc.dg/objc-gc-4.m: Likewise. * obj-c++.dg/objc-gc-3.mm: Likewise. * objc.dg/pr18255.m: Include objc/runtime.h. (main): Use protocol_getMethodDescription() instead of [Protocol -descriptionForInstanceMethod]. * objc.dg/pr23214.m ([Object(TS_CAT) -class]): Renamed to test. Made it available with all runtimes. (main): Call -test instead of -class. * objc.dg/pr45878.m ([Object -isEqual:]): Renamed to testIsEqual, and put into a category. * objc.dg/proto-lossage-2.m: Use TestsuiteObject instead of Object. Include objc/objc.h. * obj-c++.dg/proto-lossage-2.mm: Likewise. * objc.dg/proto-lossage-3.m: Updated includes. (MyClass): New. (main): Use protocol_getMethodDescription() instead of [Protocol -descriptionForInstanceMethod] and [Protocol -descriptionForClassMethod]. * obj-c++.dg/proto-lossage-3.mm: Likewise. * objc.dg/proto-qual-1.m: Updated includes. Use the Modern Objective-C runtime API. * obj-c++.dg/proto-qual-1.mm: Likewise. * objc.dg/property/property-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/property/property-1.mm: Likewise. * obj-c++.dg/qual-types-1.mm: Likewise. * objc.dg/selector-2.m: Include objc/objc.h instead of ../objc-obj-c++-shared/Object1.h. * obj-c++.dg/selector-2.mm: Likewise. * obj-c++.dg/selector-5.mm: Likewise. * obj-c++.dg/selector-6.mm: Likewise. * objc.dg/set-not-used-1.m: Use TestsuiteObject instead of Object. Do not include objc/objc-api.h. * obj-c++.dg/set-not-used-1.mm: Likewise. * objc.dg/sizeof-1.m: Use TestsuiteObject instead of Object. * objc.dg/stret-1.m: Likewise. * objc.dg/stret-2.m: Likewise. * obj-c++.dg/super-class-2.mm: Likewise. * objc.dg/super-class-3.m: Likewise. * objc.dg/super-class-4.m: Likewise. * objc.dg/sync-2.m: Likewise. * obj-c++.dg/sync-2.mm: Likewise. * objc.dg/sync-1.m: Include objc/objc.h instead of ../objc-obj-c++-shared/Object1.h. * objc.dg/special/unclaimed-category-1.h (TestClass): Always use 'Class' as the type of 'isa'. * objc.dg/special/unclaimed-category-1.m: Use the Modern Objective-C runtime API. ([TestClass +initialize]): Include this method with the GNU runtime as well. * objc.dg/strings/strings-1.m: Updated includes. * obj-c++.dg/strings/strings-1.mm: Likewise. * obj-c++.dg/strings/const-str-12.mm: Updated to be identical to objc.dg/strings/const-str-12b.m. * obj-c++.dg/template-1.mm: Use TestsuiteObject intead of Object. * obj-c++.dg/template-3.mm: Likewise. * obj-c++.dg/template-4.mm: Likewise. * objc.dg/threedotthree-abi-1.m: Updated includes. Use Modern Objective-C runtime API. * obj-c++.dg/threedotthree-abi-1.mm: Likewise. * objc.dg/try-catch-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/try-catch-1.mm: Likewise. * obj-c++.dg/try-catch-2.mm: Likewise. * objc.dg/try-catch-3.m: Likewise. * obj-c++.dg/try-catch-3.mm: Likewise. * objc.dg/try-catch-6.m: Likewise. * objc.dg/try-catch-7.m: Likewise. * obj-c++.dg/try-catch-7.mm: Likewise. * obj-c++.dg/try-catch-8.mm: Likewise. * obj-c++.dg/try-catch-9.mm: Likewise. * objc.dg/try-catch-10.m: Likewise. * obj-c++.dg/try-catch-11.mm: Likewise. * objc.dg/typedef-alias-1.m: Use TestsuiteObject instead of Object. Include objc/objc.h. * obj-c++.dg/typedef-alias-1.mm: Likewise. * objc.dg/type-size-2.m: Use the Modern Objective-C runtime API. * objc.dg/torture/forward-1.m: Use TestsuiteObject intead of Object. Use Modern Objective-C runtime API. Do not use performv::. * objc.dg/torture/trivial.m: Use TestsuiteObject intead of Object. * obj-c++.dg/torture/trivial.mm: Likewise. * objc.dg/torture/strings/const-str-10.m: Include objc/Object.h instead of ../objc-obj-c++-shared/Object1.h. Include ../objc-obj-c++-shared/runtime.h. * obj-c++.dg/torture/strings/const-str-10.mm: Likewise. * objc.dg/torture/strings/const-str-11.m: Likewise. * obj-c++.dg/torture/strings/const-str-11.mm: Likewise. * objc.dg/torture/strings/const-str-9.m: Likewise. * obj-c++.dg/torture/strings/const-str-9.mm: Likewise. * objc.dg/torture/strings/const-str-7.m: Use TestsuiteObject instead of Object. Only add _FooClassReference if __NEXT_RUNTIME__. * obj-c++.dg/torture/strings/const-str-7.mm: Likewise. * objc.dg/torture/strings/const-str-8.m: Likewise. * obj-c++.dg/torture/strings/const-str-8.mm: Likewise. * obj-c++.dg/torture/strings/string1.mm: Updated includes and additional sources. * objc.dg/torture/tls/thr-init-3.m: Use TestsuiteObject instead of Object. * obj-c++.dg/torture/tls/thr-init-3.mm: Likewise. * objc.dg/va-meth-1.m: Use TestsuiteObject instead of Object. * obj-c++.dg/va-meth-1.mm: Likewise. * objc.dg/zero-link-1.m: Include objc/Object.h instead of ../objc-obj-c++-shared/Object1.h. * objc.dg/zero-link-3.m: Likewise. 2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com> * obj-c++.dg/try-catch-2.mm: Fixed unterminated comment. From-SVN: r174727
Diffstat (limited to 'gcc/testsuite/objc-obj-c++-shared')
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h169
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/Object1.h175
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/Object1.m4
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/Object1.mm4
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/Protocol1.h52
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h47
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m64
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/next-mapping.h109
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/objc-test-suite-types.h15
-rw-r--r--gcc/testsuite/objc-obj-c++-shared/runtime.h114
10 files changed, 226 insertions, 527 deletions
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h b/gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h
deleted file mode 100644
index 0dc36b1..0000000
--- a/gcc/testsuite/objc-obj-c++-shared/Object1-implementation.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Compatibility code between APIs and ABIs for the objc test suite.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
- Contributed by Iain Sandoe
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-/*
- * Implementation of a compatibility layer for the ObjC* test-suite.
- *
- * Four cases:
- * GNU
- * Uses the 'old' Object with API and ABI = 0.
- * Compatibility methods are added.
- * NeXT pre-Darwin9
- * Uses the 'old' Object with API and ABI = 0.
- * NeXT Darwin >= 9 with no implementation of ABI 2
- * Uses API 2 and ABI 0 for m32, uses the 'old' Object'
- * Uses API 2 for m64 but only compile tests can be expected to work.
- * NeXT Darwin >= 9 with __OBJC2__
- * Uses API 2 and ABI 0 for m32, uses the 'old' Object'
- * Uses API 2 and ABI 2 - the libobjc implementation of Object is very
- * basic, and we add a category to expand this for test-suite use.
- */
-
-#ifndef _OBJC_OBJECT1_IMPLEMENTATION_H_
-#define _OBJC_OBJECT1_IMPLEMENTATION_H_
-
-#include "Object1.h"
-
-#ifndef __NEXT_RUNTIME__
-
-/* Save us from repeating this. */
-@implementation Object (TEST_SUITE_ADDITIONS)
-+ initialize
-{
- return self;
-}
-@end
-
-#else
-
-/* For NeXT pre-Darwin 9 or m32 we need do nothing. */
-
-# if NEXT_OBJC_ABI_VERSION >= 2
-
-/* Pick up the API=2 header. */
-# include <objc/runtime.h>
-
-# ifndef __OBJC2__
-
-/* On a Darwin system >= 9 when there is no __OBJC2__ compiler, the testcases
- will not link. So we provide a dummy Object for this purpose. */
-
-@implementation Object
-
-+ (Class) class
-{
- return self;
-}
-
-- (BOOL)isEqual: (id)anObject
-{
- return self == anObject;
-}
-
-@end
-# endif /* __OBJC2__ */
-
-/* In any case, since the library does not provide a complete (enough)
- implementation we need to provide the additions. */
-
-@implementation Object (TEST_SUITE_ADDITIONS)
-
-+ initialize
-{
- return self;
-}
-
-- init
-{
- return self;
-}
-
-- (Class) class
-{
- return isa;
-}
-
-+ (Class) superclass
-{
- return class_getSuperclass(object_getClass(self));
-}
-
-+ new
-{
- return [[self alloc] init];
-}
-
-+ free
-{
- return nil;
-}
-
-- free
-{
- return object_dispose(self);
-}
-
-+ alloc
-{
- return class_createInstance (self, 0);
-}
-
-- (Class) superclass {
- return class_getSuperclass([self class]);
-}
-
-- (const char *) name {
- return class_getName([self class]);
-}
-
--(BOOL)conformsTo:(Protocol *)protocol {
- Class cls;
- for (cls = [self class]; cls; cls = [cls superclass])
- {
- if (class_conformsToProtocol(cls, protocol))
- return YES;
- }
- return NO;
-}
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int printf (const char *, ...);
-extern void abort (void);
-#ifdef __cplusplus
-}
-#endif
-
-/* This is a helper to catch cases where we need to add more functionality
- to our test-suite category - more informative than fail with 'does not
- respond to forward:' */
-- forward: (SEL)sel : (marg_list)args
-{
- const char * onam = object_getClassName (self);
- const char * snam = sel_getName (sel);
- printf ("%s: tried to forward: %s\n", onam, snam);
- abort ();
-}
-@end
-
-# endif /* NEXT_OBJC_ABI_VERSION >= 2 */
-# endif /* __NEXT_RUNTIME__ */
-#endif /* _OBJC_OBJECT1_IMPLEMENTATION_H_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1.h b/gcc/testsuite/objc-obj-c++-shared/Object1.h
deleted file mode 100644
index 293d046..0000000
--- a/gcc/testsuite/objc-obj-c++-shared/Object1.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Compatibility code between APIs and ABIs for the objc test suite.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
- Contributed by Iain Sandoe
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-/*
- * Compatibility header.
- *
- * Four cases:
- * GNU
- * Uses the 'old' Object with API and ABI = 0.
- * Compatibility methods are added.
- * NeXT pre-Darwin9
- * Uses the 'old' Object with API and ABI = 0.
- * NeXT Darwin >= 9 with no implementation of ABI 2
- * Uses API 2 and ABI 0 for m32, uses the 'old' Object'
- * Uses API 2 for m64 but only compile tests can be expected to work.
- * NeXT Darwin >= 9 with __OBJC2__
- * Uses API 2 and ABI 0 for m32, uses the 'old' Object'
- * Uses API 2 and ABI 2 - the libobjc implementation of Object is very
- * basic, and we add a category to expand this for test-suite use.
- */
-#ifndef _OBJC_OBJECT1_H_
-#define _OBJC_OBJECT1_H_
-
-#ifndef __NEXT_RUNTIME__
-/* Case 1 = GNU. */
-# include <objc/Object.h>
-/* NeXT requires a +initialize (or forward:) method, and it makes testcases more
- readable if the conditional code can be reduced, so we add one to the GNU tests
- too. This saves us from having to introduce it every time. */
-@interface Object (TEST_SUITE_ADDITIONS)
-+ initialize;
-@end
-
-#else /* NeXT */
-
-# include "next-abi.h"
-# if !defined(NEXT_OBJC_ABI_VERSION) || (NEXT_OBJC_ABI_VERSION < 2)
-/* Cases 2, Case 3/m32 and 4/m32 are handled as default. */
-# include <objc/Object.h>
-# else
-# include <objc/objc.h>
-
-/* This is a cut-down Object with only the methods currently required
- by the testsuite declared. The implementation is provided in
- Object1-implementation.h
-*/
-
-/* The m64 libobjc implementation of Object provides only the 'class' and
- isEqual: methods.
-
- We add the others required as a test-suite category.
-
- Please leave the unimplemented methods as comments - so that they can
- be inserted as required by future tests. */
-
-@interface Object
-{
- Class isa;
-}
-+ (Class) class;
-- (BOOL)isEqual: (id)anObject;
-@end
-
-/* Dummy definition. */
-typedef void * marg_list;
-
-@interface Object (TEST_SUITE_ADDITIONS)
-
-+ initialize;
-- init;
-
-+ new;
-+ free;
-- free;
-+ alloc;
-//- copy;
-//+ allocFromZone:(void *)zone;
-//- copyFromZone:(void *)zone;
-//- (void *)zone;
-
-- (Class) class;
-+ (Class) superclass;
-//+ (const char *) name;
-//- superclass;
-- (const char *) name;
-
-//- self;
-//- (unsigned int) hash;
-
-/* Testing inheritance relationships */
-
-//- (BOOL) isKindOf: aClassObject;
-//- (BOOL) isMemberOf: aClassObject;
-//- (BOOL) isKindOfClassNamed: (const char *)aClassName;
-//- (BOOL) isMemberOfClassNamed: (const char *)aClassName;
-
-/* Testing class functionality */
-
-//+ (BOOL) instancesRespondTo:(SEL)aSelector;
-//- (BOOL) respondsTo:(SEL)aSelector;
-
-/* Testing protocol conformance */
-
-- (BOOL) conformsTo: (Protocol *)aProtocolObject;
-//+ (BOOL) conformsTo: (Protocol *)aProtocolObject;
-
-/* Obtaining method descriptors from protocols */
-
-//- (struct objc_method_description *) descriptionForMethod:(SEL)aSel;
-//+ (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel;
-
-/* Obtaining method handles */
-
-//- (IMP) methodFor:(SEL)aSelector;
-//+ (IMP) instanceMethodFor:(SEL)aSelector;
-
-/* Sending messages determined at run time */
-
-//- perform:(SEL)aSelector;
-//- perform:(SEL)aSelector with:anObject;
-//- perform:(SEL)aSelector with:object1 with:object2;
-
-/* Posing */
-
-//+ poseAs: aClassObject;
-
-/* Enforcing intentions */
-
-//- subclassResponsibility:(SEL)aSelector;
-//- notImplemented:(SEL)aSelector;
-
-/* Error handling */
-
-//- doesNotRecognize:(SEL)aSelector;
-//- error:(const char *)aString, ...;
-
-/* Debugging */
-
-//- (void) printForDebugger:(void *)stream;
-
-/* Archiving */
-
-//- awake;
-//- write:(void *)stream;
-//- read:(void *)stream;
-//+ (int) version;
-//+ setVersion: (int) aVersion;
-
-/* Forwarding */
-
-- forward: (SEL)sel : (marg_list)args;
-//- performv: (SEL)sel : (marg_list)args;
-
-@end
-
-# endif /* NeXT case 3 & 4 m64 */
-# endif /* NEXT */
-#endif /* _OBJC_OBJECT1_H_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1.m b/gcc/testsuite/objc-obj-c++-shared/Object1.m
deleted file mode 100644
index d5fe4c0..0000000
--- a/gcc/testsuite/objc-obj-c++-shared/Object1.m
+++ /dev/null
@@ -1,4 +0,0 @@
-/* This will generate compatibility code for the test-suite provided as a
- category on Object.
-*/
-#include "Object1-implementation.h"
diff --git a/gcc/testsuite/objc-obj-c++-shared/Object1.mm b/gcc/testsuite/objc-obj-c++-shared/Object1.mm
deleted file mode 100644
index 04fdd05..0000000
--- a/gcc/testsuite/objc-obj-c++-shared/Object1.mm
+++ /dev/null
@@ -1,4 +0,0 @@
-/* This will generate compatibility code for the test-suite provided as a
- category on Object.
-*/
-#import "Object1-implementation.h"
diff --git a/gcc/testsuite/objc-obj-c++-shared/Protocol1.h b/gcc/testsuite/objc-obj-c++-shared/Protocol1.h
deleted file mode 100644
index d375ac0..0000000
--- a/gcc/testsuite/objc-obj-c++-shared/Protocol1.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Temporary work-around to avoid the need for method attributes in
- * the NeXT Runtime Protocol header.
- */
-#ifndef _OBJC_PROTOCOL1_H_
-#define _OBJC_PROTOCOL1_H_
-
-# ifndef __NEXT_RUNTIME__
-# include <objc/Protocol.h>
-# else
-# include "next-abi.h"
-# ifndef NEXT_OBJC_USE_NEW_INTERFACE
-/* We are on a NeXT version without method __attributes__ */
-# import <objc/Protocol.h>
-# else
-/* We make our own interface without the deprecation messages
- * This is essentially <objc/Protocol.h> without the OBJC2
- * flags.
- *
- */
-# ifndef _OBJC_PROTOCOL_H_
-# define _OBJC_PROTOCOL_H_
-# import "Object1.h"
-
-@interface Protocol : Object
-{
-@private
- char *protocol_name ;
- struct objc_protocol_list *protocol_list ;
- struct objc_method_description_list *instance_methods ;
- struct objc_method_description_list *class_methods ;
-}
-
-/* Obtaining attributes intrinsic to the protocol */
-#if (NEXT_OBJC_ABI_VERSION==0)
-- (const char *)name ; /* Not avail in v2, deprecated in prior */
-/* Testing protocol conformance */
-- (BOOL) conformsTo: (Protocol *)aProtocolObject ; /* Not avail in v2 */
-#endif
-
-/* Looking up information specific to a protocol */
-/* Deprecated, but available */
-
-- (struct objc_method_description *) descriptionForInstanceMethod:(SEL)aSel ;
-- (struct objc_method_description *) descriptionForClassMethod:(SEL)aSel ;
-
-@end
-
-# endif /* __NEXT_RUNTIME__ */
-# endif /* _OBJC_PROTOCOL_H_ */
-# endif /* NEXT_OBJC_ABI_VERSION */
-#endif /* _OBJC_PROTOCOL1_H_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h b/gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h
new file mode 100644
index 0000000..b6acd91
--- /dev/null
+++ b/gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h
@@ -0,0 +1,47 @@
+/* Very simple root class for writing testcases.
+ Copyright (C) 2011 Free Software Foundation, Inc.
+ Contributed by Nicola Pero
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _TESTSUITE_OBJECT_H_
+#define _TESTSUITE_OBJECT_H_
+
+/* We use this root class instead of Object to keep the tests
+ independent of the runtime being used. Keep it simple. */
+
+@interface TestsuiteObject
+{
+ Class isa;
+}
+/* Required by the NeXT runtime. Does nothing. */
++ (id) initialize;
+
+/* Creating instances. */
++ (id) new;
++ (id) alloc;
+- (id) init;
+- (void) free;
+
+/* Auxiliary methods. */
++ (Class) class;
++ (Class) superclass;
++ (const char *)name;
+- (const char *)name;
+@end
+
+#endif /* _TESTSUITE_OBJECT_H_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m b/gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m
new file mode 100644
index 0000000..1b033af
--- /dev/null
+++ b/gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m
@@ -0,0 +1,64 @@
+/* Very simple root class for writing testcases.
+ Copyright (C) 2011 Free Software Foundation, Inc.
+ Contributed by Nicola Pero
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+/* This is the implementation, but in all simple testcases we
+ recommend simply including it in the testcase. */
+
+#include "TestsuiteObject.h"
+#include "runtime.h"
+
+@implementation TestsuiteObject
++ (id) initialize
+{
+ return self;
+}
++ (id) new
+{
+ return [[self alloc] init];
+}
++ (id) alloc
+{
+ return class_createInstance (self, 0);
+}
+- (id) init
+{
+ return self;
+}
+- (void) free
+{
+ object_dispose (self);
+}
++ (Class) class
+{
+ return self;
+}
++ (Class) superclass
+{
+ return class_getSuperclass (self);
+}
++ (const char *)name
+{
+ return class_getName (self);
+}
+- (const char *)name
+{
+ return class_getName (isa);
+}
+@end
diff --git a/gcc/testsuite/objc-obj-c++-shared/next-mapping.h b/gcc/testsuite/objc-obj-c++-shared/next-mapping.h
deleted file mode 100644
index d2ae8e9..0000000
--- a/gcc/testsuite/objc-obj-c++-shared/next-mapping.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Compatibility header between runtimes and APIs.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-
- Original Authors: Ziemowit Laski <zlaski@apple.com>
- David Ayers <d.ayers@inode.at>
-
- re-work for ObjC2 by Iain Sandoe <iains@gcc.gnu.org>
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>. */
-
-#ifndef _OBJC_NEXT_MAPPING_H_
-#define _OBJC_NEXT_MAPPING_H_
-
-/* This file provides a two-way mapping of API names for the original
- GNU & NeXT APIs.
-
- It is being expanded to provide mapping (where possible) between between the
- older API and API-2.
-*/
-
-#include "objc-test-suite-types.h"
-
-#ifndef __NEXT_RUNTIME__
-
-# define CLASSFIELD class_pointer
-# define CLASSPTRFIELD(x) (x)->class_pointer
-# define SUPERCLASS superClass
-# define OBJC_GETCLASS objc_get_class
-
-# ifdef __objc_api_INCLUDE_GNU
-# define class_createInstance(C, S) class_create_instance(C)
-# endif
-# define method_get_types(M) (M)->method_types
-
-#else /* NeXT */
-
-/* Include next-abi.h to set NEXT_OBJC_USE_NEW_INTERFACE etc.*/
-# include "next-abi.h"
-
-# ifdef NEXT_OBJC_USE_NEW_INTERFACE
- /* API=2. */
-# include <objc/runtime.h>
-# else
- /* API=0. */
-# include <objc/objc-class.h>
-# endif
-
-# define CLASSPTRFIELD(x) (x)->isa
-# define SUPERCLASS superclass
-# define OBJC_GETCLASS objc_getClass
-
-# define objc_get_class(C) objc_getClass(C)
-# define objc_get_meta_class(C) objc_getMetaClass(C)
-# define class_get_class_method(C, S) class_getClassMethod(C, S)
-# define class_get_instance_method(C, S) class_getInstanceMethod(C, S)
-# define sel_get_name(S) sel_getName(S)
-# define class_create_instance(C) class_createInstance(C, 0)
-# define class_get_class_name(C) object_getClassName(C)
-# define objc_lookup_class(N) objc_lookUpClass(N)
-
-# ifdef NEXT_OBJC_USE_NEW_INTERFACE
-
-# define object_class_name(O) (object_getClassName(O))
-# define object_get_class(O) (object_getClass((id)O))
-# define object_get_super_class(O) class_get_super_class(object_get_class(O))
-# define object_is_class(O) class_is_meta_class(object_get_class(O))
-# define object_is_meta_class(O) (object_is_class(O) && class_is_meta_class(O) \
- && class_is_meta_class(object_get_class(O)))
-
-# define method_get_imp(M) (method_getImplementation((Method)M))
-# define method_get_types(M) (method_getTypeEncoding((Method)M))
-
-# define class_get_super_class(C) (class_getSuperclass((Class)C))
-# define class_is_meta_class(C) (class_isMetaClass((Class)C) ? YES: NO)
-# define class_is_class(C) (class_is_meta_class(C) == NO)
-
-# else /* OLD API */
-
-# define object_class_name(O) (O->name)
-# define object_get_super_class(O) class_get_super_class(*(struct objc_class **)O)
-# define object_get_class(O) (*(struct objc_class **)O)
-# define object_is_class(O) class_is_meta_class(*(struct objc_class **)O)
-# define object_is_meta_class(O) (class_is_meta_class(O) && class_is_meta_class(*(struct objc_class **)O))
-
-# define method_get_imp(M) (((Method)M)->method_imp)
-# define method_get_types(M) (((Method)M)->method_types)
-
-# define class_get_super_class(C) (((struct objc_class *)C)->super_class)
-# define class_is_meta_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
-# define class_is_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_CLASS)? YES: NO)
-
-# endif /* NEXT_OBJC_USE_NEW_INTERFACE */
-
-# endif /*__NEXT_RUNTIME__ */
-#endif /* _OBJC_NEXT_MAPPING_H_ */ \ No newline at end of file
diff --git a/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-types.h b/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-types.h
index ab502d4..edff8cb 100644
--- a/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-types.h
+++ b/gcc/testsuite/objc-obj-c++-shared/objc-test-suite-types.h
@@ -21,17 +21,8 @@ along with GCC; see the file COPYING3. If not see
#ifndef _OBJC_TEST_SUITE_TYPES_H_
#define _OBJC_TEST_SUITE_TYPES_H_
-#ifdef __cplusplus
-#define ProtoBool bool
-#else
-#define ProtoBool _Bool
-#endif
-
#ifndef __NEXT_RUNTIME__
-#define METHOD Method_t
-#define IVAR_T struct objc_ivar
-
/* dummy const string class ref. */
typedef void * TNS_STRING_REF_T;
@@ -52,16 +43,12 @@ typedef void * TNS_STRING_REF_T;
#define NULL 0
#endif
-#define METHOD Method
-
/* Where there are equivalent interfaces between APIs we substitute
a macro or typedef. */
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
typedef void * PMETH;
-#define IVAR_T Ivar
#else
typedef struct objc_method * PMETH;
-#define IVAR_T struct objc_ivar
#endif
#ifdef __OBJC2__
@@ -77,4 +64,4 @@ typedef struct objc_class TNS_STRING_REF_T;
#endif
#endif /*__NEXT_RUNTIME__ */
-#endif /* _OBJC_TEST_SUITE_TYPES_H_ */ \ No newline at end of file
+#endif /* _OBJC_TEST_SUITE_TYPES_H_ */
diff --git a/gcc/testsuite/objc-obj-c++-shared/runtime.h b/gcc/testsuite/objc-obj-c++-shared/runtime.h
new file mode 100644
index 0000000..bdc2bff
--- /dev/null
+++ b/gcc/testsuite/objc-obj-c++-shared/runtime.h
@@ -0,0 +1,114 @@
+/* Wrapper around <objc/runtime.h>
+ Copyright (C) 2011 Free Software Foundation, Inc.
+ Contributed by Nicola Pero
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef _TESTSUITE_RUNTIME_H_
+#define _TESTSUITE_RUNTIME_H_
+
+/* Include this file where you'd normally include <objc/runtime.h>.
+
+ Older versions of the NeXT runtime do not have <objc/runtime.h> and
+ you need to include <objc/objc-runtime.h> instead. This file takes
+ care of figuring out if that's the case. */
+
+#ifndef __NEXT_RUNTIME__
+
+/*
+ GNU Objective-C runtime (libobjc).
+*/
+# include <objc/runtime.h>
+
+#else
+
+/*
+ NeXT Objective-C runtime.
+*/
+
+/* Include next-abi.h to determine which version of the runtime we are
+ dealing with. TODO: If this is the only place including it, maybe
+ it could be copied here ? */
+# include "next-abi.h"
+
+# ifdef NEXT_OBJC_USE_NEW_INTERFACE
+
+/* New NeXT runtime, with an API that should be basically identical to
+ the GNU Objective-C one. */
+# include <objc/runtime.h>
+
+# else
+
+/* Old NeXT runtime, with an API similar, but not identical to the new
+ one. To start with, different headers need to be included. */
+# include <objc/objc-class.h>
+# include <objc/objc-runtime.h>
+
+/* Not all functions are available in the old NeXT runtime. A few
+ that we need are not, and here we provide an implementation on top
+ of the old NeXT API. */
+
+# define class_isMetaClass(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
+# define class_getName(C) object_getClassName(C)
+# define class_getSuperclass(C) (((struct objc_class *)C)->super_class)
+# define method_getImplementation(M) (((Method)M)->method_imp)
+# define method_getTypeEncoding(M) (((Method)M)->method_types)
+# define object_getClass(O) (*(struct objc_class **)O)
+
+#include <objc/Protocol.h>
+BOOL class_conformsToProtocol (Class class_, Protocol *protocol)
+{
+ struct objc_protocol_list *p;
+ int i;
+ for (p = class_->protocols; p; p = p->next)
+ for (i = 0; i < p->count; i++)
+ if ([p->list[i] conformsTo: protocol])
+ return YES;
+ return NO;
+}
+
+#define protocol_getName(P) [P name]
+#define protocol_isEqual(P,Q) [P isEqual: Q]
+
+struct objc_method_description protocol_getMethodDescription (Protocol *protocol,
+ SEL selector,
+ BOOL requiredMethod,
+ BOOL instanceMethod)
+{
+ struct objc_method_description *tmp;
+ struct objc_method_description result;
+
+ if (instanceMethod)
+ {
+ tmp = [protocol descriptionForInstanceMethod: selector];
+ result = *tmp;
+ }
+ else
+ {
+ tmp = [protocol descriptionForClassMethod: selector];
+ result = *tmp;
+ }
+
+ return result;
+}
+
+# endif /* NEXT_OBJC_USE_NEW_INTERFACE */
+
+# endif /* __NEXT_RUNTIME__ */
+
+#endif /* _TESTSUITE_RUNTIME_H_ */
+