diff options
author | Nicola Pero <nicola.pero@meta-innovation.com> | 2011-06-06 22:46:58 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2011-06-06 22:46:58 +0000 |
commit | 88b470b80c827f069c516ceeeaf65a174a843480 (patch) | |
tree | 059bb43db4c6e79cbfc2b53aad3fae44ac932bdd /gcc/testsuite/objc-obj-c++-shared | |
parent | 889ec77132ca388f1d4a3349db729564969feac2 (diff) | |
download | gcc-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.h | 169 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/Object1.h | 175 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/Object1.m | 4 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/Object1.mm | 4 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/Protocol1.h | 52 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.h | 47 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/TestsuiteObject.m | 64 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/next-mapping.h | 109 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/objc-test-suite-types.h | 15 | ||||
-rw-r--r-- | gcc/testsuite/objc-obj-c++-shared/runtime.h | 114 |
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_ */ + |