+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.
+
2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc-++/48275
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
// { dg-do run }
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-//#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <iostream>
-#include <objc/Object.h>
-
-#ifdef __OBJC2__
-@interface Object (ADDITIONS)
-+ initialize;
-- init;
-+ alloc;
-+ new;
-@end
-@implementation Object (ADDITIONS)
-+ initialize { return self; }
-- init { return self; }
-+ alloc { return class_createInstance (self, 0); }
-+ new { return [[self alloc] init]; }
-@end
-#endif
-
-@interface Greeter : Object
+@interface Greeter : TestsuiteObject
- (void) greet: (const char *)msg;
@end
Greeter *obj = [Greeter new];
[obj greet: "Hello from Objective-C++"];
}
-//#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Leave blank lines here to keep warnings on the same lines. */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
#include <stdlib.h>
enum Enum { zero, one, two, three, four };
-@interface Base: Object {
+@interface Base: TestsuiteObject {
@public
unsigned a: 2;
int b: 3;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort();
-@interface Base: Object
+@interface Base: TestsuiteObject
{
int full;
int full2: 32;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do run } */
/* { dg-options "-Wpadded" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#include <string.h>
enum Enum { one, two, three, four };
-@interface Base: Object {
+@interface Base: TestsuiteObject {
unsigned a: 2;
int b: 3;
enum Enum c: 4;
/* { dg-do compile } */
#include <objc/objc.h>
-#include <objc/objc-api.h>
+#include "../objc-obj-c++-shared/runtime.h"
@protocol MyProto1
+(void)doItClass1;
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Foo
- (id)meth1;
- (id)meth2:(int)arg;
@end
-@interface Derived1: Object
+@interface Derived1: TestsuiteObject
@end
-@interface Derived2: Object
+@interface Derived2: TestsuiteObject
+ (Derived1 *)new;
@end
id<Foo> func(void) {
- Object *o = [Object new];
- return o; /* { dg-warning "class .Object. does not implement the .Foo. protocol" } */
+ TestsuiteObject *o = [TestsuiteObject new];
+ return o; /* { dg-warning "class .TestsuiteObject. does not implement the .Foo. protocol" } */
}
@implementation Derived2
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Derived: Object
+@interface Derived: TestsuiteObject
@end
-extern Object* foo(void);
+extern TestsuiteObject* foo(void);
static Derived *test(void)
{
Derived *m = foo(); /* { dg-warning "initialization from distinct Objective\\-C type" } */
/* When assigning function pointers, allow for covariant return types
and contravariant argument types. */
/* { dg-do compile } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class Derived;
-Object *ExternFunc (Object *filePath, Object *key);
-typedef id FuncSignature (Object *arg1, Derived *arg2);
+TestsuiteObject *ExternFunc (TestsuiteObject *filePath, TestsuiteObject *key);
+typedef id FuncSignature (TestsuiteObject *arg1, Derived *arg2);
-@interface Derived: Object
+@interface Derived: TestsuiteObject
+ (void)registerFunc:(FuncSignature *)function;
@end
/* Another gimplifier ICE... */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface MyView: Object {
+@interface MyView: TestsuiteObject {
int _frame;
}
- (void)_finalize;
// { dg-options "-fno-objc-call-cxx-cdtors" }
// { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } }
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
}
};
-@interface Manip : Object {
+@interface Manip : TestsuiteObject {
int c;
cxx_struct s; // { dg-warning "user-defined destructor" }
// { dg-warning "constructors and destructors will not be invoked" "" { target *-*-* } 22 }
[obj manipulate_ivars];
[obj free];
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
// { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
// { dg-options "-fobjc-call-cxx-cdtors" }
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
}
};
-@interface Baz: Object {
+@interface Baz: TestsuiteObject {
@public
bar aa;
}
[foo free];
CHECK_IF(!ctor1_called && !ctor2_called && dtor1_called);
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@class Derived;
return inst[offs];
}
-@interface Derived: Object {
+@interface Derived: TestsuiteObject {
int value;
}
-(id)initWithValue:(int)val;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <iostream>
#include <string>
-@interface iostream: Object
+@interface iostream: TestsuiteObject
@end
int main(void) {
/* { dg-options "" } */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#include <objc/objc.h>
extern "C" void abort(void);
-@interface A : Object
+@interface A : TestsuiteObject
{
@public
int a;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-
-#ifdef __NEXT_RUNTIME__
-#define METHOD Method
-#else
-#include <objc/objc-api.h>
-#define METHOD Method_t
-#define method_get_types(M) (M)->method_types
-#endif
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdio.h>
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Foo: Object
+@interface Foo: TestsuiteObject
typedef struct { float x, y; } XXPoint;
typedef struct { float width, height; } XXSize;
typedef struct _XXRect { XXPoint origin; XXSize size; } XXRect;
int main(void) {
Foo *foo = [[Foo alloc] init];
- Class fooClass = objc_get_class("Foo");
- METHOD meth;
+ Class fooClass = objc_getClass("Foo");
+ Method meth;
const char *string;
- meth = class_get_instance_method(fooClass, @selector(setRect:withInt:));
+ meth = class_getInstanceMethod(fooClass, @selector(setRect:withInt:));
offs2 = 9999;
- sscanf(method_get_types(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
&offs4, &offs5);
CHECK_IF(!offs2);
[foo setRect:my_rect withInt:123];
- meth = class_get_instance_method(fooClass, @selector(char:float:double:long:));
+ meth = class_getInstanceMethod(fooClass, @selector(char:float:double:long:));
offs2 = 9999;
if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uq%u";
else
string = "v%u@%u:%uc%uf%ud%ul%u";
- sscanf(method_get_types(meth), string, &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), string, &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6, &offs7);
CHECK_IF(!offs2);
[foo char:'c' float:2.3 double:3.5 long:2345L];
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-#include "../objc-obj-c++-shared/Protocol1.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "../objc-obj-c++-shared/runtime.h"
+#include <objc/Protocol.h>
+
#ifdef __cplusplus
#define ProtoBool bool
#else
#define ProtoBool _Bool
#endif
-#ifdef __NEXT_RUNTIME__
-#define METHOD Method
-#else
-#include <objc/objc-api.h>
-#define METHOD Method_t
-#define method_get_types(M) (M)->method_types
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
#define CHECK_IF(expr) if(!(expr)) abort()
enum Enum {
Protocol *proto = @protocol(Proto);
struct objc_method_description *meth;
-
+struct objc_method_description meth_object;
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
int main(void) {
const char *string;
- meth = [proto descriptionForInstanceMethod: @selector(char:float:double:unsigned:short:long:)];
+ meth_object = protocol_getMethodDescription (proto,
+ @selector(char:float:double:unsigned:short:long:), YES, YES);
+ meth = &meth_object;
if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uI%us%uq%u";
else
CHECK_IF(offs3 == offs2 + sizeof(int) && offs4 == offs3 + sizeof(float));
CHECK_IF(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned));
CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long));
- meth = [proto descriptionForInstanceMethod: @selector(setRect:withBool:withInt:)];
+ meth_object = protocol_getMethodDescription (proto,
+ @selector(setRect:withBool:withInt:), YES, YES);
+ meth = &meth_object;
scan_initial("^v%u@%u:%u{_XXRect={?=ff(__XXAngle=II)}{?=dd}^{_XXRect}}%uB%ui%u");
CHECK_IF(offs3 == offs2 + sizeof(XXRect) && offs4 == offs3 + sizeof(int));
CHECK_IF(totsize == offs4 + sizeof(int));
- meth = [proto descriptionForClassMethod: @selector(getEnum:enum:bool:)];
+ meth_object = protocol_getMethodDescription (proto,
+ @selector(getEnum:enum:bool:), YES, NO);
+ meth = &meth_object;
+
/* Here we have the complication that 'enum Enum' could be encoded
as 'i' on __NEXT_RUNTIME_, and (most likely) as 'I' on the GNU
runtime. So we get the @encode(enum Enum), then put it into the
char pattern[1024];
sprintf (pattern, "^%s%%u@%%u:%%u^{?=ff(__XXAngle=II)}%%u%s%%uc%%u",
- @encode(enum Enum), @encode(enum Enum));
+ @encode(enum Enum), @encode(enum Enum));
scan_initial(pattern);
}
-
CHECK_IF(offs3 == offs2 + sizeof(XXPoint *) && offs4 == offs3 + sizeof(enum Enum));
CHECK_IF(totsize == offs4 + sizeof(int)); /* 'ObjCBool' is really 'char' */
- meth = [proto descriptionForClassMethod: @selector(getBool:)];
+ meth_object = protocol_getMethodDescription (proto,
+ @selector(getBool:), YES, NO);
+ meth = &meth_object;
scan_initial("^^B%u@%u:%u^*%u");
CHECK_IF(totsize == offs2 + sizeof(ObjCBool **));
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-options "" } */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <string.h>
struct Innermost innermost;
};
-@interface Int1: Object {
+@interface Int1: TestsuiteObject {
signed char a, b;
Int2 *int2;
struct Nested nested;
@implementation Int2
@end
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
-Ivar *ivar;
-#else
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
struct objc_ivar *ivar;
+#else
+Ivar *ivar;
#endif
static void check_ivar(const char *name, const char *type) {
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- CHECK_IF(!strcmp(ivar_getName(*ivar), name));
- CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
-#else
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
CHECK_IF(!strcmp(ivar->ivar_name, name));
CHECK_IF(!strcmp(ivar->ivar_type, type));
+#else
+ CHECK_IF(!strcmp(ivar_getName(*ivar), name));
+ CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
#endif
ivar++;
}
int main(void) {
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- ivar = class_copyIvarList ((Class)objc_get_class("Int1"), NULL);
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
+ ivar = ((Class)objc_getClass("Int1"))->ivars->ivar_list;
#else
- ivar = ((Class)objc_get_class("Int1"))->ivars->ivar_list;
+ ivar = class_copyIvarList ((Class)objc_getClass("Int1"), NULL);
#endif
check_ivar("a", "c");
check_ivar("b", "c");
check_ivar("nested",
"{Nested=\"a\"f\"b\"f\"next\"@\"Int1\"\"innermost\"{Innermost=\"a\"C\"b\"C\"encl\"^{Nested}}}");
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- ivar = class_copyIvarList ((Class)objc_get_class("Int2"), NULL);
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
+ ivar = ((Class)objc_getClass("Int2"))->ivars->ivar_list;
#else
- ivar = ((Class)objc_get_class("Int2"))->ivars->ivar_list;
+ ivar = class_copyIvarList ((Class)objc_getClass("Int2"), NULL);
#endif
check_ivar("innermost", "^{Innermost=CC^{Nested}}");
check_ivar("base", "@\"Int1\"");
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Alexander Malmberg <alexander@malmberg.org> */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <stdio.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-#ifdef __NEXT_RUNTIME__
-#define METHOD Method
-#else
-#include <objc/objc-api.h>
-#define METHOD Method_t
-#define method_get_types(M) (M)->method_types
-#endif
-
-@interface Test : Object
+@interface Test : TestsuiteObject
{ float j; }
-(void) test2: (int [5])a with: (int [])b;
-(id) test3: (Test **)b; /* { dg-message "previous declaration of .\\-\\(id\\)test3:\\(Test \\*\\*\\)b." } */
int main(int argc, char **argv)
{
- Class testClass = objc_get_class("Test");
- METHOD meth;
+ Class testClass = objc_getClass("Test");
+ Method meth;
cc[0] = [Test new];
CHECK_IF (bb[3] == 3);
[*c test2: bb with: bb + 5];
CHECK_IF (bb[3] == 5);
- meth = class_get_instance_method(testClass, @selector(test2:with:));
+ meth = class_getInstanceMethod(testClass, @selector(test2:with:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
- sscanf(method_get_types(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6);
CHECK_IF (!offs2 && offs4 == 5 && offs3 > 0);
CHECK_IF (offs5 == 2 * offs3 && offs6 == 3 * offs3 && offs1 == 4 * offs3);
- meth = class_get_instance_method(testClass, @selector(test3:));
+ meth = class_getInstanceMethod(testClass, @selector(test3:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
- sscanf(method_get_types(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6);
CHECK_IF (!offs2 && offs4 == 3 && offs5 == 4 && offs3 > 0);
CHECK_IF (offs6 == 2 * offs3 && offs1 == 3 * offs3);
#include <stdio.h>
#include <stdlib.h>
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
// ObjectiveC class header
-@interface ObjCclass : Object {
+@interface ObjCclass : TestsuiteObject {
}
-(void)method1;
-(void)method2;
abort ();
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* This test checks the syntax @catch (...) which catches any
exceptions. Check that code using it runs correctly. */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
-@interface MyObject : Object
+@interface MyObject : TestsuiteObject
@end
@implementation MyObject
if (test ([MyObject new]) != 5)
abort ();
- if (test ([Object new]) != 6)
+ if (test ([TestsuiteObject new]) != 6)
abort ();
return 0;
/* { dg-do assemble { target *-*-darwin* } } */
/* { dg-options "-mfix-and-continue" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Foo: Object
-+ (Object *)indexableFileTypes;
+@interface Foo: TestsuiteObject
++ (TestsuiteObject *)indexableFileTypes;
@end
@implementation Foo
-+ (Object *)indexableFileTypes
++ (TestsuiteObject *)indexableFileTypes
{
- static Object *fileTypes = 0;
+ static TestsuiteObject *fileTypes = 0;
if(!fileTypes) {
- fileTypes = [Object new];
+ fileTypes = [TestsuiteObject new];
}
return fileTypes;
}
/* { dg-do compile } */
-#import "../objc-obj-c++-shared/Object1.h"
-#include <objc/objc-api.h>
+#import "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object
+@interface obj : TestsuiteObject
{
@public
int v1;
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface FooBar: Object
+@interface FooBar: TestsuiteObject
- (void)boo;
@end
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
-@interface FooBar: Object
+@interface FooBar: TestsuiteObject
- (void)boo;
@end
-/* Ensure there are no bizarre difficulties with accessing the 'isa' field of
- objects. This field is named differently between GNU and NeXT runtimes so
- accessed via the CLASSPTRFIELD() macro defined in next-mapping.h */
+/* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include "../objc-obj-c++-shared/runtime.h"
-@interface Object (Test)
+@interface TestsuiteObject (Test)
- (Class) test1: (id)object;
@end
-@interface Derived: Object
+@interface Derived: TestsuiteObject
- (Class) test2: (id)object;
@end
-@implementation Object (Test)
+@implementation TestsuiteObject (Test)
Class test1(id object) {
- Class cls = CLASSPTRFIELD(object);
- return cls;
+#ifdef __NEXT_RUNTIME__
+ Class cls = object->isa;
+#else
+ Class cls = object->class_pointer;
+#endif
+ return cls;
}
- (Class) test1: (id)object {
- Class cls = CLASSPTRFIELD(object);
- return cls;
+#ifdef __NEXT_RUNTIME__
+ Class cls = object->isa;
+#else
+ Class cls = object->class_pointer;
+#endif
+ return cls;
}
@end
@implementation Derived
Class test2(id object) {
- Class cls = CLASSPTRFIELD(object);
- return cls;
+#ifdef __NEXT_RUNTIME__
+ Class cls = object->isa;
+#else
+ Class cls = object->class_pointer;
+#endif
+ return cls;
}
- (Class) test2: (id)object {
- Class cls = CLASSPTRFIELD(object);
- return cls;
+#ifdef __NEXT_RUNTIME__
+ Class cls = object->isa;
+#else
+ Class cls = object->class_pointer;
+#endif
+ return cls;
}
@end
Class test3(id object) {
- Class cls = CLASSPTRFIELD(object);
- return cls;
+#ifdef __NEXT_RUNTIME__
+ Class cls = object->isa;
+#else
+ Class cls = object->class_pointer;
+#endif
+ return cls;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* Allow for an optional semicolon following the ivar block. */
/* Contributed by: Ziemowit Laski <zlaski@apple.com>. */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Tink : Object {
+@interface Tink : TestsuiteObject {
@private
unsigned long mCode[4];
};
/* { dg-do compile } */
/* { dg-options "-Wpadded -Wpacked -Wabi" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Derived1: Object
+@interface Derived1: TestsuiteObject
{ }
@end
-@interface Derived2: Object
+@interface Derived2: TestsuiteObject
- (id) foo;
@end
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Sprite: Object {
+@interface Sprite: TestsuiteObject {
int sprite, spree;
}
+ (void)setFoo:(int)foo;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
class MyWidget {
- (MyWidget *)widget;
@end
-@interface Foo: Object
+@interface Foo: TestsuiteObject
@end
@interface Bar: Foo <MyProto>
@end
-@interface Container: Object
+@interface Container: TestsuiteObject
+ (MyWidget *)elementForView:(Foo *)view;
@end
+ (MyWidget *)elementForView:(Foo *)view
{
MyWidget *widget = 0;
- if ([view conformsTo:@protocol(MyProto)]) {
+ if (class_conformsToProtocol (object_getClass (view),
+ @protocol(MyProto))) {
widget = [(Foo <MyProto> *)view widget];
}
return widget;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-options "" } */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Int1: Object
+@interface Int1: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
-@interface Int2: Object
+@interface Int2: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
CHECK_IF([(Int1Alias *)int2typedef instanceMeth] == 1697);
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-typedef Object ObjectTypedef1;
+typedef TestsuiteObject ObjectTypedef1;
typedef ObjectTypedef1 ObjectTypedef2;
@compatibility_alias ObjectAlias1 ObjectTypedef2;
@compatibility_alias ObjectAlias2 ObjectAlias1;
typedef ObjectAlias2 ObjectTypedef3;
void foo(void) {
- id obj = [Object new];
+ id obj = [TestsuiteObject new];
obj = [ObjectTypedef1 new];
obj = [ObjectTypedef2 new];
obj = [ObjectTypedef3 new];
}
/* { dg-final { scan-assembler "_OBJC_ClassRefs_0" { target { *-*-darwin* && { ! lp64 } } } } } */
-/* { dg-final { scan-assembler "_OBJC_ClassRef_Object" { target { *-*-darwin* && { lp64 } } } } } */
+/* { dg-final { scan-assembler "_OBJC_ClassRef_TestsuiteObject" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRefs_1" { target { *-*-darwin* && { ! lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRef_ObjectTypedef" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-final { scan-assembler-not "_OBJC_ClassRef_ObjectAlias" { target { *-*-darwin* && { lp64 } } } } } */
/* { dg-options "-Wstrict-selector-match" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Protocol1.h"
+#include <objc/Protocol.h>
@interface Base
- (unsigned)port;
/* Check if finding multiple signatures for a method is handled gracefully. Author: Ziemowit Laski <zlaski@apple.com> */
/* { dg-options "-Wstrict-selector-match" } */
/* { dg-do compile } */
-
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Class1
-- (void)setWindow:(Object *)wdw;
+- (void)setWindow:(TestsuiteObject *)wdw;
@end
@interface Class2
@end
id foo(void) {
- Object *obj = [[Object alloc] init];
+ TestsuiteObject *obj = [[TestsuiteObject alloc] init];
id obj2 = obj;
- [obj setWindow:nil]; /* { dg-warning ".Object. may not respond to .\\-setWindow:." } */
+ [obj setWindow:nil]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-setWindow:." } */
/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 18 } */
/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 18 } */
/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 18 } */
[obj2 setWindow:nil]; /* { dg-warning "multiple methods named .\\-setWindow:. found" } */
- /* { dg-message "using .\\-\\(void\\)setWindow:\\(Object \\*\\)wdw." "" { target *-*-* } 8 } */
+ /* { dg-message "using .\\-\\(void\\)setWindow:\\(TestsuiteObject \\*\\)wdw." "" { target *-*-* } 8 } */
/* { dg-message "also found .\\-\\(void\\)setWindow:\\(Class1 \\*\\)window." "" { target *-*-* } 12 } */
return obj;
/* { dg-options "-Wstrict-selector-match" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol MyObject
-- (id)initWithData:(Object *)data;
+- (id)initWithData:(TestsuiteObject *)data;
@end
@protocol SomeOther
- (id)initWithData:(id<MyObject, MyCoding>)data;
@end
-@interface NTGridDataObject: Object <MyCoding>
+@interface NTGridDataObject: TestsuiteObject <MyCoding>
{
- Object<MyCoding> *_data;
+ TestsuiteObject<MyCoding> *_data;
}
+ (NTGridDataObject*)dataObject:(id<MyObject, MyCoding>)data;
@end
{
NTGridDataObject *result = [[NTGridDataObject alloc] initWithData:data];
/* { dg-warning "multiple methods named .\\-initWithData:. found" "" { target *-*-* } 33 } */
- /* { dg-message "using .\\-\\(id\\)initWithData:\\(Object \\*\\)data." "" { target *-*-* } 9 } */
+ /* { dg-message "using .\\-\\(id\\)initWithData:\\(TestsuiteObject \\*\\)data." "" { target *-*-* } 9 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(id <MyObject, MyCoding>\\)data." "" { target *-*-* } 17 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(int\\)data." "" { target *-*-* } 13 } */
take place). */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
static double d = 4.5920234e2;
-@interface Foo : Object
+@interface Foo : TestsuiteObject
-(void) brokenType: (int)x floatingPoint: (double)y;
@end
[foo brokenType: (int)d floatingPoint: d];
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Author: Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <string.h>
@end
@implementation Root
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
- (const char *) method1 { return "Root::-method1"; }
+ (const char *) method2 { return "Root::+method2"; }
@end
int main(void)
{
- Class obj = objc_get_class("Derived");
+ Class obj = objc_getClass("Derived");
/* None of the following should elicit compiler-time warnings. */
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include "../objc-obj-c++-shared/runtime.h"
@class NSString;
+ (BOOL)usesUserKeyEquivalents;
@end
-@interface NSMenuItem : Object <NSMenuItem> {
+@interface NSMenuItem : TestsuiteObject <NSMenuItem> {
@private
id _menu;
}
@end
-@interface NSResponder : Object <NSMenuItem>
+@interface NSResponder : TestsuiteObject <NSMenuItem>
{
id _nextResponder;
}
@end
-@interface Object(NSMenuValidation)
+@interface TestsuiteObject(NSMenuValidation)
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
@end
/* { dg-do compile } */
/* { dg-options "-Wreturn-type -Wextra" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Foo: Object
+@interface Foo: TestsuiteObject
- (id) meth1;
- (void) meth2;
@end
@implementation Foo
- (id) meth1 {
if (bar)
- return [Object new];
+ return [TestsuiteObject new];
return; /* { dg-error "return.statement with no value" } */
}
- (void) meth2 {
/* Ensure that overload resolution does not produce warnings as
side-effects. */
/* { dg-do run } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(E) if(!(E)) abort ()
-@interface MyCursor: Object
+@interface MyCursor: TestsuiteObject
+ (MyCursor *)crosshairCursor;
@end
they should. */
/* { dg-do run } */
/* { dg-options "-O2" } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <string.h>
#include <stdlib.h>
typedef char io_string_t[512];
typedef char *(func_type)(const char *);
-@interface DeviceObject: Object
+@interface DeviceObject: TestsuiteObject
- (void) func:(func_type)func stucPathInIORegistry:(io_string_t)ioRegPath;
@end
@implementation DeviceObject
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class NotKnown;
// { dg-do compile }
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <iostream>
-@interface Greeter : Object
+@interface Greeter : TestsuiteObject
- (void) greet: (const char *)msg;
@end
/* { dg-options "-fobjc-gc" } */
/* { dg-prune-output "cc1objplus: warning: '-fobjc-gc' is ignored for '-fgnu-runtime'" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include "../objc-obj-c++-shared/runtime.h"
@class MyWindow;
-@interface MyDocument : Object {
+@interface MyDocument : TestsuiteObject {
MyWindow *_window;
}
@end
@end
@interface MyTextFileDocument : MyFileDocument {
- Object *_textStorage;
+ TestsuiteObject *_textStorage;
struct __tfdFlags {
unsigned int immutable:1;
unsigned int lineEnding:2;
/* This program tests use of property provided setter/getter functions. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../../objc-obj-c++-shared/Object1.mm" } */
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
-@interface Bar : Object
+@interface Bar : TestsuiteObject
{
int iVar;
}
provide a suitable method. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include <objc/objc.h>
@protocol Zot
-(void) zot;
@end
-@interface Foo : Object <Zot>
+@interface Foo : TestsuiteObject <Zot>
@end
int foo()
Problem report and original fix by richard@brainstorm.co.uk. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm" } */
+#include <objc/Protocol.h>
+#include "../objc-obj-c++-shared/runtime.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-#include "../objc-obj-c++-shared/Protocol1.h"
+@interface MyClass
+- name;
+@end
@protocol NoInstanceMethods
+ testMethod;
int
main()
{
-#ifdef __OBJC2__
-protocol_getMethodDescription(@protocol(NoInstanceMethods), @selector(name), NO, YES);
-protocol_getMethodDescription(@protocol(NoInstanceMethods), @selector(name), NO, NO);
-protocol_getMethodDescription(@protocol(NoClassMethods), @selector(name), NO, YES);
-protocol_getMethodDescription(@protocol(NoClassMethods), @selector(name), NO, NO);
-#else
-[@protocol(NoInstanceMethods) descriptionForInstanceMethod: @selector(name)];
-[@protocol(NoInstanceMethods) descriptionForClassMethod: @selector(name)];
-[@protocol(NoClassMethods) descriptionForInstanceMethod: @selector(name)];
-[@protocol(NoClassMethods) descriptionForClassMethod: @selector(name)];
-#endif
+protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, YES);
+protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, NO);
+protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, YES);
+protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, NO);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
/* The encoded parameter sizes will be rounded up to match pointer alignment. */
Protocol *proto;
struct objc_method_description *meth;
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
struct objc_method_description meth_object;
-#endif
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
int main(void) {
proto = @protocol(Retain);
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- meth_object = protocol_getMethodDescription (proto, @selector(address:with:),
- YES, YES);
+
+ meth_object = protocol_getMethodDescription (proto,
+ @selector(address:with:), YES, YES);
meth = &meth_object;
-#else
- meth = [proto descriptionForInstanceMethod: @selector(address:with:)];
-#endif
+
scan_initial("O@%u@%u:%uNR@%uo^^S%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(unsigned));
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- meth_object = protocol_getMethodDescription (proto, @selector(retainArgument:with:),
- YES, NO);
+
+ meth_object = protocol_getMethodDescription (proto,
+ @selector(retainArgument:with:), YES, NO);
meth = &meth_object;
-#else
- meth = [proto descriptionForClassMethod: @selector(retainArgument:with:)];
-#endif
+
scan_initial("Vv%u@%u:%uOo@%un^*%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(char **));
return 0;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
- init;
@end
-@interface Foo: Object
+@interface Foo: TestsuiteObject
{ @public int val; }
- init;
@end
Holder(void) { obj = [[T alloc] init]; }
~Holder(void) { [obj free]; --counter; }
id <Init, Zone> getObjId(void) { return obj; }
- Object <Zone, Init> *getObj(void) { return obj; }
+ TestsuiteObject <Zone, Init> *getObj(void) { return obj; }
};
typedef Holder <Foo <Init, Zone> > FooHolder;
CHECK_IF(FooHolder::counter == 0);
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-options "-Wselector" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
@interface Foo
@end
/* { dg-options "" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
int main()
{
/* { dg-options "" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
int main()
{
/* { dg-do compile } */
/* { dg-options "-Wunused-but-set-variable" } */
-#import "../objc-obj-c++-shared/Object1.h"
-#include <objc/objc-api.h>
+#import "../objc-obj-c++-shared/TestsuiteObject.m"
-@interface obj : Object
+@interface obj : TestsuiteObject
{
int value;
}
- (void) setValue: (int)number;
@end
-@implementation obj : Object
+@implementation obj : TestsuiteObject
- (int) value { return value; }
- (void) setValue: (int)number { value = number; }
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
-#include "../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../objc-obj-c++-shared/objc-test-suite-types.h"
@interface Foo: Object {
char *cString;
+ (Foo *) getString: (int) which;
@end
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
-Class _FooClassReference;
-#else
-struct objc_class _FooClassReference;
-#endif
+TNS_STRING_REF_T _FooClassReference; /* Only used by NeXT. */
@implementation Bar
+ (Foo *) getString: (int) which {
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */
/* { dg-do compile } */
-#include "../../objc-obj-c++-shared/Object1.h"
-#include "../../objc-obj-c++-shared/next-mapping.h"
+#include "../../objc-obj-c++-shared/runtime.h"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#endif
id test_invalid8 = @"te" @@"s" @"t"; /* { dg-error "repeated .@. before Objective-C string" } */
id test_invalid9 = @"te" @"s" @"t" @; /* { dg-error "stray .@. in program" } */
id test_invalidA = @"te" @ st; /* { dg-error "stray .@. in program" } */
- /* { dg-error "expected" "" { target *-*-* } 32 } */
+ /* { dg-error "expected" "" { target *-*-* } 31 } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class MyWpModule;
-@compatibility_alias MyObject Object;
+@compatibility_alias MyObject TestsuiteObject;
@compatibility_alias FictitiousModule MyWpModule;
@protocol MySelTarget
/* Make sure that @synchronized parses and a very basic test runs. */
/* { dg-options "-fobjc-exceptions -fgnu-runtime" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (void)
{
- Object *a = [Object new];
- Object *b = [Object new];
- Object *c = [Object new];
+ TestsuiteObject *a = [TestsuiteObject new];
+ TestsuiteObject *b = [TestsuiteObject new];
+ TestsuiteObject *c = [TestsuiteObject new];
/* This single-threaded test just checks that @synchronized() uses a
recursive mutex, and that the runtime at least doesn't crash
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Base: Object
+@interface Base: TestsuiteObject
- (int) meth;
@end
CHECK_IF(count == 0);
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface ObjCClass : Object
+@interface ObjCClass : TestsuiteObject
{
@public
int info;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.mm ../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
+/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
#include <stdarg.h>
#include <stdlib.h>
#include "../objc-obj-c++-shared/nsconstantstring-class.h"
#endif
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
#define CHECK_IF(expr) if(!(expr)) abort()
return [xyz count] + [array count];
}
-@interface Array: Object {
+@interface Array: TestsuiteObject {
id *arr;
int count;
}
@end
int main(void) {
- CHECK_IF(!strcmp ([@"Object" cString], getDesc<Object>()));
+ CHECK_IF(!strcmp ([@"TestsuiteObject" cString], getDesc<TestsuiteObject>()));
CHECK_IF(!strcmp ([@"Array" cString], getDesc<Array>()));
Array* a1 = [Array arrayWithObjects:@"One", @"Two", @"Three", nil];
#include <stdio.h>
#include <string.h>
-#include "../objc-obj-c++-shared/Protocol1.h"
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
+#include "../objc-obj-c++-shared/runtime.h"
extern "C" void abort();
-
@protocol CommonProtocol
-(oneway void)methodCall_On:(in bycopy id)someValue_On;
Protocol *proto = @protocol(CommonProtocol);
struct objc_method_description *meth;
+struct objc_method_description meth_object;
int main()
{
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_On:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_On:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4On@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_nO:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_nO:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4nO@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_Oo:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_Oo:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4Oo@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_oO:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oO:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oO@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_rn:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_rn:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4rn@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_oOn:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oOn:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oOn@8"))
abort();
return 0;
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSString: Object
@end
/* { dg-options "-fconstant-string-class=XStr" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface XString: Object {
@protected
/* { dg-do run } */
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <objc/objc.h>
-@interface Foo: Object {
+@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
- (char *)customString;
@end
+#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
+#endif
-@implementation Foo : Object
+@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
/* { dg-do run { target *-*-darwin* } } */
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
-@interface Foo: Object {
+@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
@end
+#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
+#endif
-@implementation Foo : Object
+@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSConstantString: Object {
char *cString;
/* { dg-do run } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm ../../../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
-
-#include "../../../objc-obj-c++-shared/Object1.h"
-#include "../../../objc-obj-c++-shared/next-mapping.h"
+/* { dg-additional-sources "../../../objc-obj-c++-shared/nsconstantstring-class-impl.mm" } */
#include <string.h>
#include <stdlib.h>
/* { dg-require-effective-target tls } */
/* { dg-add-options tls } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.mm" } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
extern "C" {
extern void abort ();
}
-@interface tsObj: Object {
+@interface tsObj: TestsuiteObject {
int ai ;
}
// { dg-do run }
// { dg-xfail-run-if "OBJC2 runtime" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "-fgnu-runtime" } }
-// { dg-additional-sources "../../objc-obj-c++-shared/Object1.mm" }
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
int main(void)
{
- [Object class];
+ [TestsuiteObject class];
return 0;
}
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <stdio.h>
#include <setjmp.h>
-@interface Frob: Object
+@interface Frob: TestsuiteObject
@end
-@implementation Frob: Object
+@implementation Frob: TestsuiteObject
@end
static int exc_control = 0;
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Proto1
- (int)meth1;
- (int)meth2;
@end
-@interface MyClass: Object <Proto2> {
+@interface MyClass: TestsuiteObject <Proto2> {
int a;
}
- (int)meth2;
-- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2;
+- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2;
@end
MyClass *mc1, *mc2;
- (int)meth2 {
return a;
}
-- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
+- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
@try {
mc2 = p2; /* { dg-warning "type .id <Proto1>. does not conform to the .Proto2. protocol" } */
}
/* { dg-do run } */
/* { dg-xfail-run-if "PR23616" { *-*-* } { "-fgnu-runtime" } { "-fnext-runtime" } } */
-/* { dg-xfail-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" "-fgnu-runtime" } { "" } }
+/* { dg-xfail-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" "-fgnu-runtime" } { "" } } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Frob: Object
+@interface Frob: TestsuiteObject
@end
-@implementation Frob: Object
+@implementation Frob: TestsuiteObject
@end
static Frob* _connection = nil;
//--------------------------------------------------------------------
-void test (Object* sendPort)
+void test (TestsuiteObject* sendPort)
{
int cleanupPorts = 1;
Frob* receivePort = nil;
printf ("cleanupPorts = %d\n", cleanupPorts);
printf ("---\n");
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
@catch(Frob *obj) {
printf ("Exception caught by incorrect handler!\n");
}
int main (void) {
- test((Object *)-1);
+ test((TestsuiteObject *)-1);
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
const char *foo(void)
{
@try {
return "foo";
}
- @catch (Object* theException) {
+ @catch (TestsuiteObject* theException) {
return [theException name];
}
}
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (int argc, const char * argv[]) {
- Object * pool = [Object new];
+ TestsuiteObject * pool = [TestsuiteObject new];
int a;
if ( 1 ) {
@try {
a = 1;
}
- @catch (Object *e) {
+ @catch (TestsuiteObject *e) {
a = 2;
}
@finally {
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Derived: Object
+@interface Derived: TestsuiteObject
- (id) meth;
@end
/* { dg-prune-output ".*internal compiler error.*" } */
/* { dg-options "-fobjc-exceptions -O2" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#include <stdio.h>
local6 = 18.0;
pi = &gi2;
pf = &gf2;
- obj2 = obj1 = [Object new];
+ obj2 = obj1 = [TestsuiteObject new];
arg1 = 17;
arg2 = &gf2;
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
- @catch (Object *obj) {
+ @catch (TestsuiteObject *obj) {
if (local1 != 123 || local2 != 345 || local3 != 5.0
|| local4 != 6.0 || local5 != 17 || local6 != 18.0) {
printf("Abort 1\n");
foo(15, &gf1);
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Typedefs of ObjC types should work without any bogus warnings. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include <objc/objc.h>
-typedef Object MyObject;
+typedef TestsuiteObject MyObject;
int main (int argc, const char * argv[])
{
- Object* a = nil;
+ TestsuiteObject* a = nil;
MyObject* b = a;
- Object* c = b;
+ TestsuiteObject* c = b;
return 0;
}
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdarg.h>
#include <stdlib.h>
/* Test methods with "C-style" trailing arguments, with or without ellipsis. */
-@interface MathClass: Object
+@interface MathClass: TestsuiteObject
/* sum positive numbers; -1 ends the list */
+ (int) sum: (int) firstNumber, int secondNumber, ...;
+ (int) prod: (int) firstNumber, int secondNumber, int thirdNumber;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
+++ /dev/null
-/* 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_ */
+++ /dev/null
-/* 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_ */
+++ /dev/null
-/* This will generate compatibility code for the test-suite provided as a
- category on Object.
-*/
-#include "Object1-implementation.h"
+++ /dev/null
-/* This will generate compatibility code for the test-suite provided as a
- category on Object.
-*/
-#import "Object1-implementation.h"
+++ /dev/null
-/*
- * 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_ */
--- /dev/null
+/* 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_ */
--- /dev/null
+/* 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
+++ /dev/null
-/* 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
#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;
#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__
#endif
#endif /*__NEXT_RUNTIME__ */
-#endif /* _OBJC_TEST_SUITE_TYPES_H_ */
\ No newline at end of file
+#endif /* _OBJC_TEST_SUITE_TYPES_H_ */
--- /dev/null
+/* 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_ */
+
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
#include <objc/objc.h>
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do compile } */
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object {
+@interface obj : TestsuiteObject {
@public
int var;
}
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
-@interface Base: Object
+@interface Base: TestsuiteObject
{
int full;
int full2: 32;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-options "-Wpadded" } */
/* { dg-do run } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
extern int strcmp(const char *str1, const char *str2);
enum Enum { one, two, three, four };
-@interface Base: Object {
+@interface Base: TestsuiteObject {
unsigned a: 2;
int b: 3;
enum Enum c: 4;
/* { dg-options "-Wpadded" } */
/* { dg-do run } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
#include <stdlib.h>
enum Enum { zero, one, two, three, four };
-@interface Base: Object {
+@interface Base: TestsuiteObject {
@public
unsigned a: 2;
int b: 3;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
return p;
}
-@interface Base: Object
+@interface Base: TestsuiteObject
- ( void ) translateOriginToPoint : ( Point ) translation ;
@end
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stddef.h>
+/* FIXME: This is temporary. At the moment, the compiler, when
+ compiling for the GNU runtime and doing method checks, only
+ recognizes objc_get_class(), and not objc_getClass(). So
+ temporarily force objc_get_class() to be used. */
+#ifndef __NEXT_RUNTIME__
+# define objc_getClass(C) objc_get_class(C)
+#endif
+
@protocol Func
+ (int) class_func0;
- (int) instance_func0;
@end
-@interface Derived: Object
+@interface Derived: TestsuiteObject
+ (int) class_func1;
+ (int) class_func2;
+ (int) class_func3;
+ (int) class_func1
{
int i = (size_t)[self class_func0]; /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */
- return i + (size_t)[super class_func0]; /* { dg-warning ".Object. may not respond to .\\+class_func0." } */
+ return i + (size_t)[super class_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func0." } */
}
+ (int) class_func2
{
}
+ (int) class_func3
{
- return [(Object <Func> *)super class_func0];
+ return [(TestsuiteObject <Func> *)super class_func0];
}
+ (int) class_func4
{
+ (int) class_func5
{
int i = (size_t)[Derived class_func0]; /* { dg-warning ".Derived. may not respond to .\\+class_func0." } */
- return i + (size_t)[Object class_func0]; /* { dg-warning ".Object. may not respond to .\\+class_func0." } */
+ return i + (size_t)[TestsuiteObject class_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func0." } */
}
+ (int) class_func6
{
- return (size_t)[objc_get_class("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
+ return (size_t)[objc_getClass("TestsuiteObject") class_func1]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func1." } */
}
+ (int) class_func7
{
- return [objc_get_class("Derived") class_func1];
+ return [objc_getClass("Derived") class_func1];
}
- (int) instance_func1
{
int i = (size_t)[self instance_func0]; /* { dg-warning ".Derived. may not respond to .\\-instance_func0." } */
- return i + (size_t)[super instance_func0]; /* { dg-warning ".Object. may not respond to .\\-instance_func0." } */
+ return i + (size_t)[super instance_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-instance_func0." } */
}
- (int) instance_func2
{
}
- (int) instance_func3
{
- return [(Object <Func> *)super instance_func0];
+ return [(TestsuiteObject <Func> *)super instance_func0];
}
- (int) instance_func4
{
- (int) instance_func5
{
int i = (size_t)[Derived instance_func1]; /* { dg-warning ".Derived. may not respond to .\\+instance_func1." } */
- return i + (size_t)[Object instance_func1]; /* { dg-warning ".Object. may not respond to .\\+instance_func1." } */
+ return i + (size_t)[TestsuiteObject instance_func1]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+instance_func1." } */
}
- (int) instance_func6
{
- return (size_t)[objc_get_class("Object") class_func1]; /* { dg-warning ".Object. may not respond to .\\+class_func1." } */
+ return (size_t)[objc_getClass("TestsuiteObject") class_func1]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func1." } */
}
- (int) instance_func7
{
- return [objc_get_class("Derived") class_func1];
+ return [objc_getClass("Derived") class_func1];
}
@end
i += [self class_func1];
i += [self categ_class_func2];
i += (size_t)[self categ_instance_func1]; /* { dg-warning ".Derived. may not respond to .\\+categ_instance_func1." } */
- return i + (size_t)[super class_func0]; /* { dg-warning ".Object. may not respond to .\\+class_func0." } */
+ return i + (size_t)[super class_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\+class_func0." } */
}
+ (int) categ_class_func2
{
{
int i = (size_t)[self instance_func0]; /* { dg-warning ".Derived. may not respond to .\\-instance_func0." } */
i += [(Derived <Func> *)self categ_instance_func2];
- i += (size_t)[(Object <Func> *)self categ_instance_func2]; /* { dg-warning ".Object. may not respond to .\\-categ_instance_func2." } */
- /* { dg-warning ".\\-categ_instance_func2. not found in protocol" "" { target *-*-* } 124 } */
+ i += (size_t)[(TestsuiteObject <Func> *)self categ_instance_func2]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-categ_instance_func2." } */
+ /* { dg-warning ".\\-categ_instance_func2. not found in protocol" "" { target *-*-* } 132 } */
i += (size_t)[(id <Func>)self categ_instance_func2]; /* { dg-warning ".\\-categ_instance_func2. not found in protocol" } */
i += [(id)self categ_instance_func2];
- return i + (size_t)[super instance_func0]; /* { dg-warning ".Object. may not respond to .\\-instance_func0." } */
+ return i + (size_t)[super instance_func0]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-instance_func0." } */
}
- (int) categ_instance_func2
{
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Base: Object
+@interface Base: TestsuiteObject
+ (int) class_func1;
- (int) instance_func1;
@end
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-do run } */
/* { dg-xfail-run-if "need OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern int strcmp(const char *s1, const char *s2);
extern void abort(void);
-#ifdef __NEXT_RUNTIME__
-#define SUPERCLASS superclass
-#else
-#define SUPERCLASS superClass
-#endif
-
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface MyObject: Object
+@interface MyObject: TestsuiteObject
+ (Class)whatever1;
@end
@implementation MyObject
-+ (Class)whatever1 { return [super SUPERCLASS]; }
++ (Class)whatever1 { return [super superclass]; }
@end
@interface MyObject (ThisWontCompile)
@end
@implementation MyObject (ThisWontCompile)
-+(Class)whatever2 { return [super SUPERCLASS]; }
++(Class)whatever2 { return [super superclass]; }
@end
int main (int argc, const char * argv[])
Class w1 = [MyObject whatever1];
Class w2 = [MyObject whatever2];
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- CHECK_IF(!strcmp( object_getClassName( w1 ), "Object"));
- CHECK_IF(!strcmp( object_getClassName( w2 ), "Object"));
-#else
- CHECK_IF(!strcmp(w1->name, "Object"));
- CHECK_IF(!strcmp(w2->name, "Object"));
-#endif
+ CHECK_IF(!strcmp( object_getClassName( w1 ), "TestsuiteObject"));
+ CHECK_IF(!strcmp( object_getClassName( w2 ), "TestsuiteObject"));
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-do compile } */
#include <objc/objc.h>
-#include <objc/objc-api.h>
+#include "../objc-obj-c++-shared/runtime.h"
@protocol MyProto1
+(void)doItClass1;
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Foo
- (id)meth1;
- (id)meth2:(int)arg;
@end
-@interface Derived1: Object
+@interface Derived1: TestsuiteObject
@end
-@interface Derived2: Object
+@interface Derived2: TestsuiteObject
+ (Derived1 *)new;
@end
id<Foo> func(void) {
- Object *o = [Object new];
- return o; /* { dg-warning "class .Object. does not implement the .Foo. protocol" } */
+ TestsuiteObject *o = [TestsuiteObject new];
+ return o; /* { dg-warning "class .TestsuiteObject. does not implement the .Foo. protocol" } */
}
@implementation Derived2
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Derived: Object
+@interface Derived: TestsuiteObject
@end
-extern Object* foo(void);
+extern TestsuiteObject* foo(void);
static Derived *test(void)
{
Derived *m = foo(); /* { dg-warning "initialization from distinct Objective\\-C type" } */
/* When assigning function pointers, allow for covariant return types
and contravariant argument types. */
/* { dg-do compile } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class Derived;
-Object *ExternFunc (Object *filePath, Object *key);
-typedef id FuncSignature (Object *arg1, Derived *arg2);
+TestsuiteObject *ExternFunc (TestsuiteObject *filePath, TestsuiteObject *key);
+typedef id FuncSignature (TestsuiteObject *arg1, Derived *arg2);
-@interface Derived: Object
+@interface Derived: TestsuiteObject
+ (void)registerFunc:(FuncSignature *)function;
@end
/* { dg-do compile } */
/* Another gimplifier ICE... */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface MyView: Object {
+@interface MyView: TestsuiteObject {
int _frame;
}
- (void)_finalize;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
//#include <objc/objc.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
-@interface Base: Object {
+@interface Base: TestsuiteObject {
@public
int a;
float b;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
-@interface Cls : Object
+@interface Cls : TestsuiteObject
+ (int) meth1;
+ (int) meth2;
+ (void) doTests;
/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 0 } */
/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 0 } */
-#include "../objc-obj-c++-shared/Object1-implementation.h"
+
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-
-#ifdef __NEXT_RUNTIME__
-#define METHOD Method
-#else
-#include <objc/objc-api.h>
-#define METHOD Method_t
-#define method_get_types(M) (M)->method_types
-#endif
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
extern int sscanf(const char *str, const char *format, ...);
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Foo: Object
+@interface Foo: TestsuiteObject
typedef struct { float x, y; } XXPoint;
typedef struct { float width, height; } XXSize;
typedef struct _XXRect { XXPoint origin; XXSize size; } XXRect;
int main(void) {
Foo *foo = [[Foo alloc] init];
- Class fooClass = objc_get_class("Foo");
- METHOD meth;
+ Class fooClass = objc_getClass("Foo");
+ Method meth;
const char *string;
- meth = class_get_instance_method(fooClass, @selector(setRect:withInt:));
+ meth = class_getInstanceMethod(fooClass, @selector(setRect:withInt:));
offs2 = 9999;
- sscanf(method_get_types(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), "@%u@%u:%u{_XXRect={?=ff}{?=ff}}%ui%u", &offs1, &offs2, &offs3,
&offs4, &offs5);
CHECK_IF(!offs2);
[foo setRect:my_rect withInt:123];
- meth = class_get_instance_method(fooClass, @selector(char:float:double:long:));
+ meth = class_getInstanceMethod(fooClass, @selector(char:float:double:long:));
offs2 = 9999;
if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uq%u";
else
string = "v%u@%u:%uc%uf%ud%ul%u";
- sscanf(method_get_types(meth), string, &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), string, &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6, &offs7);
CHECK_IF(!offs2);
[foo char:'c' float:2.3 double:3.5 long:2345L];
return 0;
}
-
-#include "../objc-obj-c++-shared/Object1-implementation.h"
#include <stdio.h>
#include <stdlib.h>
-#ifndef __NEXT_RUNTIME__
-# include <objc/objc-api.h>
+#include "../objc-obj-c++-shared/runtime.h"
+
+#ifdef __cplusplus
+#define ProtoBool bool
+#else
+#define ProtoBool _Bool
#endif
-#include "../objc-obj-c++-shared/objc-test-suite-types.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-#include <objc/Protocol.h>
extern int sscanf(const char *str, const char *format, ...);
extern void abort(void);
Protocol *proto;
struct objc_method_description *meth;
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
struct objc_method_description meth_object;
-#endif
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
int main(void) {
const char *string;
proto = @protocol(Proto);
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(char:float:double:unsigned:short:long:), YES, YES);
meth = &meth_object;
-#else
- meth = [proto descriptionForInstanceMethod: @selector(char:float:double:unsigned:short:long:)];
-#endif
if (sizeof (long) == 8)
string = "v%u@%u:%uc%uf%ud%uI%us%uq%u";
else
CHECK_IF(offs3 == offs2 + sizeof(int) && offs4 == offs3 + sizeof(float));
CHECK_IF(offs5 == offs4 + sizeof(double) && offs6 == offs5 + sizeof(unsigned));
CHECK_IF(offs7 == offs6 + sizeof(int) && totsize == offs7 + sizeof(long));
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(setRect:withBool:withInt:), YES, YES);
meth = &meth_object;
-#else
- meth = [proto descriptionForInstanceMethod: @selector(setRect:withBool:withInt:)];
-#endif
scan_initial("^v%u@%u:%u{_XXRect={?=ff(__XXAngle=II)}{?=dd}^{_XXRect}}%uB%ui%u");
CHECK_IF(offs3 == offs2 + sizeof(XXRect) && offs4 == offs3 + sizeof(int));
CHECK_IF(totsize == offs4 + sizeof(int));
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(getEnum:enum:bool:), YES, NO);
meth = &meth_object;
-#else
- meth = [proto descriptionForClassMethod: @selector(getEnum:enum:bool:)];
-#endif
/* Here we have the complication that 'enum Enum' could be encoded
as 'i' on __NEXT_RUNTIME_, and (most likely) as 'I' on the GNU
CHECK_IF(offs3 == offs2 + sizeof(XXPoint *) && offs4 == offs3 + sizeof(enum Enum));
CHECK_IF(totsize == offs4 + sizeof(int)); /* 'ObjCBool' is really 'char' */
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
meth_object = protocol_getMethodDescription (proto,
@selector(getBool:), YES, NO);
meth = &meth_object;
-#else
- meth = [proto descriptionForClassMethod: @selector(getBool:)];
-#endif
scan_initial("^^B%u@%u:%u^*%u");
CHECK_IF(totsize == offs2 + sizeof(ObjCBool **));
return 0;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
-#ifdef __NEXT_RUNTIME__
-#include <objc/objc-class.h>
-#else
-#include <objc/objc-api.h>
-#endif
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
extern void abort(void);
extern int strcmp(const char *s1, const char *s2);
struct Innermost innermost;
};
-@interface Int1: Object {
+@interface Int1: TestsuiteObject {
signed char a, b;
Int2 *int2;
struct Nested nested;
@implementation Int2
@end
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
-Ivar *ivar;
-#else
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
struct objc_ivar *ivar;
+#else
+Ivar *ivar;
#endif
static void check_ivar(const char *name, const char *type) {
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- CHECK_IF(!strcmp(ivar_getName(*ivar), name));
- CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
-#else
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
CHECK_IF(!strcmp(ivar->ivar_name, name));
CHECK_IF(!strcmp(ivar->ivar_type, type));
+#else
+ CHECK_IF(!strcmp(ivar_getName(*ivar), name));
+ CHECK_IF(!strcmp(ivar_getTypeEncoding(*ivar), type));
#endif
ivar++;
}
int main(void) {
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- ivar = class_copyIvarList ((Class)objc_get_class("Int1"), NULL);
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
+ ivar = ((Class)objc_getClass("Int1"))->ivars->ivar_list;
#else
- ivar = ((Class)objc_get_class("Int1"))->ivars->ivar_list;
+ ivar = class_copyIvarList ((Class)objc_getClass("Int1"), NULL);
#endif
check_ivar("a", "c");
check_ivar("b", "c");
check_ivar("nested",
"{Nested=\"a\"f\"b\"f\"next\"@\"Int1\"\"innermost\"{Innermost=\"a\"C\"b\"C\"encl\"^{Nested}}}");
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- ivar = class_copyIvarList ((Class)objc_get_class("Int2"), NULL);
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
+ ivar = ((Class)objc_getClass("Int2"))->ivars->ivar_list;
#else
- ivar = ((Class)objc_get_class("Int2"))->ivars->ivar_list;
+ ivar = class_copyIvarList ((Class)objc_getClass("Int2"), NULL);
#endif
check_ivar("innermost", "^{Innermost=CC^{Nested}}");
check_ivar("base", "@\"Int1\"");
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Alexander Malmberg <alexander@malmberg.org> */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdlib.h>
#include <stdio.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-#ifdef __NEXT_RUNTIME__
-#define METHOD Method
-#else
-#include <objc/objc-api.h>
-#define METHOD Method_t
-#define method_get_types(M) (M)->method_types
-#endif
-
-@interface Test : Object
+@interface Test : TestsuiteObject
{ float j; }
-(void) test2: (int [5])a with: (int [])b;
-(id) test3: (Test **)b; /* { dg-message "previous declaration of .\\-\\(id\\)test3:\\(Test \\*\\*\\)b." } */
int main(int argc, char **argv)
{
- Class testClass = objc_get_class("Test");
- METHOD meth;
+ Class testClass = objc_getClass("Test");
+ Method meth;
cc[0] = [Test new];
CHECK_IF (bb[3] == 3);
[*c test2: bb with: bb + 5];
CHECK_IF (bb[3] == 5);
- meth = class_get_instance_method(testClass, @selector(test2:with:));
+ meth = class_getInstanceMethod(testClass, @selector(test2:with:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
- sscanf(method_get_types(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), "v%d@%d:%d[%di]%d^i%d", &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6);
CHECK_IF (!offs2 && offs4 == 5 && offs3 > 0);
CHECK_IF (offs5 == 2 * offs3 && offs6 == 3 * offs3 && offs1 == 4 * offs3);
- meth = class_get_instance_method(testClass, @selector(test3:));
+ meth = class_getInstanceMethod(testClass, @selector(test3:));
offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = -1;
- sscanf(method_get_types(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), "v%d@%d:%d[%d[%d{Test=#f}]]%d", &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6);
CHECK_IF (!offs2 && offs4 == 3 && offs5 == 4 && offs3 > 0);
CHECK_IF (offs6 == 2 * offs3 && offs1 == 3 * offs3);
#include <string.h>
#include <stdlib.h>
#include <objc/Object.h>
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/runtime.h"
#define CHECK_IF(E) if (!(E)) abort ()
/* { dg-options "-Wno-deprecated-declarations" } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
unsigned int parameterMask;
} NSErrorUserInfoFormatter;
-typedef Object MyObj;
-typedef Object *MyPtr;
+typedef TestsuiteObject MyObj;
+typedef TestsuiteObject *MyPtr;
-@interface Foo: Object {
+@interface Foo: TestsuiteObject {
NSATSGlyphStorageRun r;
}
- (NSError *)_errorWithOSStatus:(OSStatus)inOSStatus ref1:(const FSRef *)inRef1 ref2:(const struct FSRef *)inRef2
- (id)str1:(const char *)str1 str2:(char *)str2 str3:(char *const)str3 str4:(const char *const)str4;
- (oneway void)foo1:(Foo *)foo1 foo2:(const Foo *)foo2 foo3:(Foo *const)foo3 foo4:(const Foo *const)foo4;
- (in const char *)sel1:(const SEL)sel1 id1:(const id)id1;
-- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3;
+- (inout id)obj1:(const MyPtr)obj1 obj2:(TestsuiteObject *const)obj2 obj3:(MyObj *const)obj3;
+ (ComponentInstance)_defaultScriptingComponent;
- (NSString *)_formatCocoaErrorString:(NSString *)formatString parameters:(const char *)parameters
applicableFormatters:(NSErrorUserInfoFormatter **)formatters count:(int)numFormatters;
- (in const char *)sel1:(const SEL)sel1 id1:(const id)id1 {
return "Hello";
}
-- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3 {
+- (inout id)obj1:(const MyPtr)obj1 obj2:(TestsuiteObject *const)obj2 obj3:(MyObj *const)obj3 {
return self;
}
+ (ComponentInstance)_defaultScriptingComponent {
CHECK_IF (!strcmp (meth->method_types, "rn*16@0:4r:8r@12"));
meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:));
- CHECK_IF (!strcmp (meth->method_types, "N@20@0:4r@8@12^{Object=#}16"));
+ CHECK_IF (!strcmp (meth->method_types, "N@20@0:4r@8@12^{TestsuiteObject=#}16"));
meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent));
CHECK_IF (!strcmp (meth->method_types, "^{ComponentInstanceRecord=[1l]}8@0:4"));
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
-#include <objc/encoding.h>
+#include <objc/runtime.h>
#include <stdlib.h>
struct f
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
-#include <objc/encoding.h>
+#include <objc/runtime.h>
#include <stdlib.h>
union f
/* { dg-do run } */
/* { dg-options "-fobjc-exceptions" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
/* This test checks the syntax @catch (...) which catches any
exceptions. Check that code using it runs correctly. */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
-@interface MyObject : Object
+@interface MyObject : TestsuiteObject
@end
@implementation MyObject
if (test ([MyObject new]) != 5)
abort ();
- if (test ([Object new]) != 6)
+ if (test ([TestsuiteObject new]) != 6)
abort ();
return 0;
/* { dg-options "-mfix-and-continue" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
@class MyTarget, MySet;
int global_value = 0;
-@interface MyTargetBuildContext : Object
+@interface MyTargetBuildContext : TestsuiteObject
{
MyTarget * _target;
unsigned _cacheInvalDisableCount;
+ (MySet *)_headerFileExtensions;
@end
-@interface MyCountedSet: Object {
+@interface MyCountedSet: TestsuiteObject {
@public
int cardinality;
}
}
@end
-@implementation MyTargetBuildContext : Object
+@implementation MyTargetBuildContext : TestsuiteObject
- (id)initWithTarget:(MyTarget *)target
{
self = [super init];
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-do assemble { target *-*-darwin* } } */
/* { dg-options "-mfix-and-continue" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Foo: Object
-+ (Object *)indexableFileTypes;
+@interface Foo: TestsuiteObject
++ (TestsuiteObject *)indexableFileTypes;
@end
@implementation Foo
-+ (Object *)indexableFileTypes
++ (TestsuiteObject *)indexableFileTypes
{
- static Object *fileTypes = 0;
+ static TestsuiteObject *fileTypes = 0;
if(!fileTypes) {
- fileTypes = [Object new];
+ fileTypes = [TestsuiteObject new];
}
return fileTypes;
}
/* { dg-do run } */
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
/* { dg-options "-Wall" } */
-#import "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort (void);
/*
unsigned long extra[5];
};
*/
-@interface Object (NSFastEnumeration)
+@interface TestsuiteObject (NSFastEnumeration)
- (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
objects:(id *)stackbuf
count:(unsigned int)len;
abort ();
/* Test that if nothing is done, object is set to nil. */
- object = [Object new];
+ object = [TestsuiteObject new];
for (object in array)
;
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m ../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
+/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#else
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
-@interface MyArray : Object
+@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
count:(unsigned long)len;
@end
-@implementation MyArray : Object
+@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
int main (void)
{
MyArray *array;
- Object *object;
+ TestsuiteObject *object;
int test_variable, counter, i;
id *objects;
works, but how do we tell the testsuite to test for it ?
*/
-#import "../objc-obj-c++-shared/Object1.h"
-#import "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#endif
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
-@interface MyArray : Object
+@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
count:(unsigned long)len;
@end
-@implementation MyArray : Object
+@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
int main (void)
{
MyArray *array;
- Object *object;
+ TestsuiteObject *object;
int counter, i;
id *objects;
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m ../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
+/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
-#import "../objc-obj-c++-shared/Object1.h"
-#import "../objc-obj-c++-shared/next-mapping.h"
+#import "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#else
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
-@interface MyArray : Object
+@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
count:(unsigned long)len;
@end
-@implementation MyArray : Object
+@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
/* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m ../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
+/* { dg-additional-sources "../objc-obj-c++-shared/nsconstantstring-class-impl.m" } */
-#import "../objc-obj-c++-shared/Object1.h"
-#import "../objc-obj-c++-shared/next-mapping.h"
+#import "../objc-obj-c++-shared/TestsuiteObject.m"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#else
enumeration. You create the array with some objects; you can
mutate the array, and you can fast-enumerate it.
*/
-@interface MyArray : Object
+@interface MyArray : TestsuiteObject
{
unsigned int length;
id *objects;
count:(unsigned long)len;
@end
-@implementation MyArray : Object
+@implementation MyArray : TestsuiteObject
- (id) initWithLength: (unsigned int)l
objects: (id *)o
{
/* Test basic Objective-C foreach syntax. This tests warnings and errors. */
/* { dg-do compile } */
-#import "../objc-obj-c++-shared/Object1.h"
-#import "../objc-obj-c++-shared/next-mapping.h"
+#import "../objc-obj-c++-shared/TestsuiteObject.h"
+#import <objc/objc.h>
+#undef nil
+#define nil ((id)0)
/*
struct __objcFastEnumerationState
unsigned long extra[5];
};
*/
-@interface Object (NSFastEnumeration)
+@interface TestsuiteObject (NSFastEnumeration)
- (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
objects:(id *)stackbuf
count:(unsigned int)len;
;
for (12 in array) /* { dg-error "invalid iterating variable in fast enumeration" } */
- ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 48 } */
+ ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 50 } */
for (object in 12) /* { dg-error "collection in fast enumeration is not an object" } */
;
/* Test basic Objective-C foreach syntax. This tests warnings and errors. */
/* { dg-do compile } */
-#import "../objc-obj-c++-shared/Object1.h"
-#import "../objc-obj-c++-shared/next-mapping.h"
-
+#import "../objc-obj-c++-shared/TestsuiteObject.h"
+#import <objc/objc.h>
+#undef nil
+#define nil ((id)0)
/*
struct __objcFastEnumerationState
{
unsigned long extra[5];
};
*/
-@interface Object (NSFastEnumeration)
+@interface TestsuiteObject (NSFastEnumeration)
- (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
objects:(id *)stackbuf
count:(unsigned int)len;
id object = nil;
for (typedef int my_typedef in array) /* { dg-error "declaration of non-variable" } */
- ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 38 } */
+ ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 39 } */
for (function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */
- ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 41 } */
+ ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 42 } */
for (object_function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */
;
/* { dg-do compile } */
-#import "../objc-obj-c++-shared/Object1.h"
-#include <objc/objc-api.h>
+#import "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface obj : Object
+@interface obj : TestsuiteObject
{
@public
int v1;
- (void) setValue: (int)number;
@end
-@implementation obj : Object
+@implementation obj : TestsuiteObject
- (int) value { return v1; }
- (void) setValue: (int)number { v1 = number; }
a->v2 = 1;
a->v3 = [a value] - a->v2; /* { dg-warning ".v3. is @protected" } */
a->v4 = a->v3 - 1; /* { dg-warning ".v4. is @private" } */
- /* { dg-warning ".v3. is @protected" "" { target *-*-* } 35 } */
+ /* { dg-warning ".v3. is @protected" "" { target *-*-* } 34 } */
}
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern int strcmp(const char *, const char *);
extern void abort(void);
typedef float (*floatfunc)(float, float);
-@interface MyObject : Object
+@interface MyObject : TestsuiteObject
{
@public
int (*ivar)(int, int, int);
return(0);
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
-
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include <stdlib.h>
-/* provide an Object class for NeXT runtimes 10.5 and above */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
-@interface Func: Object
+@interface Func: TestsuiteObject
+ (int) processNumber:(int)a and:(int)b usingFunction:(int(int,int))func;
@end
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-do run } */\n\
/* { dg-options \"-w -I%s -fgnu-runtime\" } */\n", srcdir);
}
- fprintf(outfile, "#include <objc/encoding.h> \n\
+ fprintf(outfile, "#include <objc/runtime.h> \n\
#include \"struct-layout-1.h\"\n\
\n\
int fails; \n\
/* { dg-do compile } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface FooBar: Object
+@interface FooBar: TestsuiteObject
- (void)boo;
@end
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
-#include <objc/Object.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <string.h>
#include <stdlib.h>
int main(int argc, void **args)
{
- [Object new];
+ [TestsuiteObject new];
return 0;
}
#include <objc/Protocol.h>
#ifdef __NEXT_RUNTIME__
#include <objc/objc-runtime.h>
+#include <objc/objc-api.h>
#else
-#include <objc/encoding.h>
+#include <objc/runtime.h>
#endif
-#include <objc/objc-api.h>
#include <objc/objc.h>
#ifndef __NEXT_RUNTIME__
/* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include "../objc-obj-c++-shared/runtime.h"
-@interface Object (Test)
+@interface TestsuiteObject (Test)
- (Class) test1: (id)object;
@end
-@interface Derived: Object
+@interface Derived: TestsuiteObject
- (Class) test2: (id)object;
@end
-@implementation Object (Test)
+@implementation TestsuiteObject (Test)
Class test1(id object) {
#ifdef __NEXT_RUNTIME__
/* { dg-do compile } */
/* { dg-options "-Wpadded -Wpacked" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Derived1: Object
+@interface Derived1: TestsuiteObject
{ }
@end
-@interface Derived2: Object
+@interface Derived2: TestsuiteObject
- (id) foo;
@end
/* { dg-do compile } */
/* { dg-options "-Wpadded" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
/* Implement a class, so that the metadata generation happens. */
-@interface MyClass : Object
+@interface MyClass : TestsuiteObject
@end
@implementation MyClass
/* Author: Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Sprite: Object {
+@interface Sprite: TestsuiteObject {
int sprite, spree;
}
+ (void)setFoo:(int)foo;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
#include <stdlib.h>
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
typedef struct MyWidget {
int a;
- (MyWidget *)widget;
@end
-@interface Foo: Object
+@interface Foo: TestsuiteObject
@end
@interface Bar: Foo <MyProto>
@end
-@interface Container: Object
+@interface Container: TestsuiteObject
+ (MyWidget *)elementForView:(Foo *)view;
@end
+ (MyWidget *)elementForView:(Foo *)view
{
MyWidget *widget = (MyWidget *) nil;
- if ([view conformsTo:@protocol(MyProto)]) {
+ if (class_conformsToProtocol (object_getClass (view),
+ @protocol(MyProto))) {
widget = [(Foo <MyProto> *)view widget];
}
return widget;
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
static double d = 4.5920234e2;
-@interface Foo : Object
+@interface Foo : TestsuiteObject
-(void) brokenType: (int)x floatingPoint: (double)y;
@end
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include <objc/objc.h>
-
-#ifdef __NEXT_RUNTIME__
-#define OBJC_GETCLASS objc_getClass
-#else
-#define OBJC_GETCLASS objc_get_class
-#endif
+#include "../objc-obj-c++-shared/runtime.h"
extern void abort(void);
extern int strcmp(const char *, const char *);
@end
@implementation Root
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
- (const char *) method1 { return "Root::-method1"; }
+ (const char *) method2 { return "Root::+method2"; }
@end
int main(void)
{
- Class obj = OBJC_GETCLASS("Derived");
+ Class obj = objc_getClass("Derived");
/* None of the following should elicit compiler-time warnings. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include <objc/objc.h>
+#include "../objc-obj-c++-shared/runtime.h"
@class NSString;
+ (BOOL)usesUserKeyEquivalents;
@end
-@interface NSMenuItem : Object <NSMenuItem> {
+@interface NSMenuItem : TestsuiteObject <NSMenuItem> {
@private
id _menu;
}
@end
-@interface NSResponder : Object <NSMenuItem>
+@interface NSResponder : TestsuiteObject <NSMenuItem>
{
id _nextResponder;
}
@end
-@interface Object(NSMenuValidation)
+@interface TestsuiteObject(NSMenuValidation)
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
@end
/* { dg-do compile } */
/* { dg-options "-Wreturn-type -Wextra" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Foo: Object
+@interface Foo: TestsuiteObject
- (id) meth1;
- (void) meth2;
@end
@implementation Foo
- (id) meth1 {
if (bar)
- return [Object new];
+ return [TestsuiteObject new];
return; /* { dg-warning "'return' with no value, in function returning non-void" } */
}
- (void) meth2 {
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class NotKnown;
they should. */
/* { dg-do run } */
/* { dg-options "-O2" } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <string.h>
#include <stdlib.h>
typedef char io_string_t[512];
typedef char *(func_type)(const char *);
-@interface DeviceObject: Object
+@interface DeviceObject: TestsuiteObject
- (void) func:(func_type)func stucPathInIORegistry:(io_string_t)ioRegPath;
@end
@implementation DeviceObject
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Int1: Object
+@interface Int1: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
-@interface Int2: Object
+@interface Int2: TestsuiteObject
+ (int) classMeth;
- (int) instanceMeth;
@end
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-do compile { target { *-*-darwin* && { ! lp64 } } } } */
/* { dg-skip-if "" { *-*-darwin* } { "-fgnu-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-typedef Object ObjectTypedef1;
+typedef TestsuiteObject ObjectTypedef1;
typedef ObjectTypedef1 ObjectTypedef2;
@compatibility_alias ObjectAlias1 ObjectTypedef2;
@compatibility_alias ObjectAlias2 ObjectAlias1;
typedef ObjectAlias2 ObjectTypedef3;
void foo(void) {
- id obj = [Object new];
+ id obj = [TestsuiteObject new];
obj = [ObjectTypedef1 new];
obj = [ObjectTypedef2 new];
obj = [ObjectTypedef3 new];
/* { dg-do compile } */
/* { dg-options "-Wstrict-selector-match" } */
-#include "../objc-obj-c++-shared/Protocol1.h"
+#include <objc/Protocol.h>
@interface Base
- (unsigned)port;
/* { dg-do compile } */
/* { dg-options "-Wstrict-selector-match" } */
-
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@interface Class1
-- (void)setWindow:(Object *)wdw;
+- (void)setWindow:(TestsuiteObject *)wdw;
@end
@interface Class2
@end
id foo(void) {
- Object *obj = [[Object alloc] init];
+ TestsuiteObject *obj = [[TestsuiteObject alloc] init];
id obj2 = obj;
- [obj setWindow:nil]; /* { dg-warning ".Object. may not respond to .\\-setWindow:." } */
+ [obj setWindow:nil]; /* { dg-warning ".TestsuiteObject. may not respond to .\\-setWindow:." } */
/* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 20 } */
/* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 20 } */
/* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 20 } */
[obj2 setWindow:nil]; /* { dg-warning "multiple methods named .\\-setWindow:. found" } */
- /* { dg-message "using .\\-\\(void\\)setWindow:\\(Object \\*\\)wdw." "" { target *-*-* } 10 } */
+ /* { dg-message "using .\\-\\(void\\)setWindow:\\(TestsuiteObject \\*\\)wdw." "" { target *-*-* } 10 } */
/* { dg-message "also found .\\-\\(void\\)setWindow:\\(Class1 \\*\\)window." "" { target *-*-* } 14 } */
return obj;
/* { dg-options "-Wstrict-selector-match" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol MyObject
-- (id)initWithData:(Object *)data;
+- (id)initWithData:(TestsuiteObject *)data;
@end
@protocol SomeOther
- (id)initWithData:(id<MyObject, MyCoding>)data;
@end
-@interface NTGridDataObject: Object <MyCoding>
+@interface NTGridDataObject: TestsuiteObject <MyCoding>
{
- Object<MyCoding> *_data;
+ TestsuiteObject<MyCoding> *_data;
}
+ (NTGridDataObject*)dataObject:(id<MyObject, MyCoding>)data;
@end
{
NTGridDataObject *result = [[NTGridDataObject alloc] initWithData:data];
/* { dg-warning "multiple methods named .\\-initWithData:. found" "" { target *-*-* } 35 } */
- /* { dg-message "using .\\-\\(id\\)initWithData:\\(Object \\*\\)data." "" { target *-*-* } 11 } */
+ /* { dg-message "using .\\-\\(id\\)initWithData:\\(TestsuiteObject \\*\\)data." "" { target *-*-* } 11 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(id <MyObject, MyCoding>\\)data." "" { target *-*-* } 19 } */
/* { dg-message "also found .\\-\\(id\\)initWithData:\\(int\\)data." "" { target *-*-* } 15 } */
/* { dg-options "-O0" } */
/* Radar 4015820 */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
void foo(void) {
- Object *o;
+ TestsuiteObject *o;
[o++ free];
}
/* { dg-final { scan-assembler-not "L_objc_msgSend\\\$non_lazy_ptr" } } */
/* { dg-options "-fobjc-gc" } */
/* { dg-prune-output "cc1obj: warning: '-fobjc-gc' is ignored for '-fgnu-runtime'" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include <objc/objc.h>
@class MyWindow;
-@interface MyDocument : Object {
+@interface MyDocument : TestsuiteObject {
MyWindow *_window;
}
@end
@end
@interface MyTextFileDocument : MyFileDocument {
- Object *_textStorage;
+ TestsuiteObject *_textStorage;
struct __tfdFlags {
unsigned int immutable:1;
unsigned int lineEnding:2;
/* { dg-do run } */
/* { dg-skip-if "" { *-*-* } { "-fnext-runtime" } { "" } } */
+#include <objc/runtime.h>
#include <objc/Protocol.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
- if ([@protocol(b) descriptionForInstanceMethod: @selector(aMethod)] == NULL)
+ struct objc_method_description m;
+ m = protocol_getMethodDescription (@protocol(b), @selector(aMethod), YES, YES);
+
+ if (m.name != NULL)
+ abort ();
+
+ m = protocol_getMethodDescription (@protocol(a), @selector(aMethod), YES, YES);
+
+ if (m.name == NULL)
abort ();
return 0;
#include <objc/Protocol.h>
-#ifdef __OBJC2__
-/* The ObjC V2 "Object" does not provide -class. */
@interface Object (TS_CAT)
-- class;
+- test;
@end
@implementation Object (TS_CAT)
-- class { return isa; }
+- test { return self; }
@end
-#endif
@protocol A
@end
int main ()
{
- [@protocol(A) class];
- [@protocol(B) class];
+ [@protocol(A) test];
+ [@protocol(B) test];
return 0;
}
{
Class isa;
}
-- (BOOL)isEqual:anObject;
+@end
+
+@interface Object (Test)
+- (BOOL)testIsEqual:anObject;
+@end
+
+@implementation Object (Test)
+- (BOOL)testIsEqual:anObject
+{
+ return self == anObject;
+}
@end
#ifdef __NEXT_RUNTIME__
void function (void)
{
- if ([@"strings" isEqual: (id)0])
+ if ([@"strings" testIsEqual: (id)0])
{
;
}
/* This program tests use of property provided setter/getter functions. */
/* { dg-options "-std=c99" } */
/* { dg-do run } */
-/* { dg-additional-sources "../../objc-obj-c++-shared/Object1.m" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
-@interface Bar : Object
+@interface Bar : TestsuiteObject
{
int iVar;
}
provide a suitable method. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include <objc/objc.h>
@protocol Zot
-(void) zot;
@end
-@interface Foo : Object <Zot>
+@interface Foo : TestsuiteObject <Zot>
@end
int foo()
Problem report and original fix by richard@brainstorm.co.uk. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Protocol1.h"
-#include "../objc-obj-c++-shared/Object1.h"
#include <objc/objc.h>
+#include "../objc-obj-c++-shared/runtime.h"
+
+@interface MyClass
+- name;
+@end
@protocol NoInstanceMethods
+ testMethod;
int
main()
{
-[@protocol(NoInstanceMethods) descriptionForInstanceMethod: @selector(name)];
-[@protocol(NoInstanceMethods) descriptionForClassMethod: @selector(name)];
-[@protocol(NoClassMethods) descriptionForInstanceMethod: @selector(name)];
-[@protocol(NoClassMethods) descriptionForClassMethod: @selector(name)];
+protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, YES);
+protocol_getMethodDescription (@protocol(NoInstanceMethods), @selector(name), YES, NO);
+protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, YES);
+protocol_getMethodDescription (@protocol(NoClassMethods), @selector(name), YES, NO);
return 0;
}
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+#include "../objc-obj-c++-shared/runtime.h"
#include <objc/Protocol.h>
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
-#include "../objc-obj-c++-shared/next-mapping.h"
/* The encoded parameter sizes will be rounded up to match pointer alignment. */
#define ROUND(s,a) (a * ((s + a - 1) / a))
Protocol *proto;
struct objc_method_description *meth;
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
struct objc_method_description meth_object;
-#endif
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
int main(void) {
proto = @protocol(Retain);
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
+
meth_object = protocol_getMethodDescription (proto,
@selector(address:with:), YES, YES);
meth = &meth_object;
-#else
- meth = [proto descriptionForInstanceMethod: @selector(address:with:)];
-#endif
+
scan_initial("O@%u@%u:%uNR@%uo^^S%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(unsigned));
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
+
meth_object = protocol_getMethodDescription (proto,
@selector(retainArgument:with:), YES, NO);
meth = &meth_object;
-#else
- meth = [proto descriptionForClassMethod: @selector(retainArgument:with:)];
-#endif
+
scan_initial("Vv%u@%u:%uOo@%un^*%u");
CHECK_IF(offs3 == offs2 + aligned_sizeof(id) && totsize == offs3 + aligned_sizeof(char **));
return 0;
/* { dg-options "-Wselector" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
@interface Foo
@end
/* { dg-do compile } */
/* { dg-options "-Wunused-but-set-variable" } */
-#import "../objc-obj-c++-shared/Object1.h"
-#include <objc/objc-api.h>
+#import "../objc-obj-c++-shared/TestsuiteObject.m"
-@interface obj : Object
+@interface obj : TestsuiteObject
{
int value;
}
- (void) setValue: (int)number;
@end
-@implementation obj : Object
+@implementation obj : TestsuiteObject
- (int) value { return value; }
- (void) setValue: (int)number { value = number; }
/* { dg-options "" } */
/* { dg-do run } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
-@interface Foo: Object {
+@interface Foo: TestsuiteObject {
int a, b;
float c, d;
}
@implementation Foo
@end
-typedef Object MyObject;
+typedef TestsuiteObject MyObject;
typedef struct Foo Foo_type;
-@compatibility_alias AliasObject Object;
+@compatibility_alias AliasObject TestsuiteObject;
int main(void) {
- CHECK_IF(sizeof(Foo) > sizeof(Object) && sizeof(Object) > 0);
+ CHECK_IF(sizeof(Foo) > sizeof(TestsuiteObject) && sizeof(TestsuiteObject) > 0);
CHECK_IF(sizeof(Foo) == sizeof(Foo_type));
- CHECK_IF(sizeof(Object) == sizeof(MyObject));
- CHECK_IF(sizeof(Object) == sizeof(AliasObject));
+ CHECK_IF(sizeof(TestsuiteObject) == sizeof(MyObject));
+ CHECK_IF(sizeof(TestsuiteObject) == sizeof(AliasObject));
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
@interface TestClass
{
-#ifdef __OBJC2__
Class isa;
-#else
- id isa;
-#endif
}
- (int)D;
@end
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
#include <objc/objc.h>
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
-#include "../../objc-obj-c++-shared/next-mapping.h"
+#include "../../objc-obj-c++-shared/runtime.h"
extern void abort (void);
{
return 4;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
TestClass *test;
Class testClass;
- testClass = objc_get_class ("TestClass");
+ testClass = objc_getClass ("TestClass");
if (testClass == Nil)
{
abort ();
}
- test = (TestClass *)(class_create_instance (testClass));
+ test = (TestClass *)(class_createInstance (testClass, 0));
if (test == nil)
{
abort ();
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort()
float a, b, c, d, e, f;
} globb = { 1, 2, 3, 4, 5, 6 };
-@interface foo : Object
+@interface foo : TestsuiteObject
- (struct astruct) stret;
- (struct bstruct) stretb;
@end
-@implementation foo : Object
+@implementation foo : TestsuiteObject
- (struct astruct) stret { return globa; }
- (struct bstruct) stretb { return globb; }
@end
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-require-effective-target ilp32 } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
struct astruct {
float a, b;
float a, b, c, d, e, f;
} globb = { 1, 2, 3, 4, 5, 6 };
-@interface foo : Object
+@interface foo : TestsuiteObject
- (struct astruct) stret;
- (struct bstruct) stretb;
@end
-@implementation foo : Object
+@implementation foo : TestsuiteObject
- (struct astruct) stret { return glob; }
- (struct bstruct) stretb { return globb; }
@end
/* { dg-final { scan-assembler-not "objc_msgSend\[^_S\]" } } */
/* { dg-final { scan-assembler-not "objc_msgSendSuper\[^_\]" } } */
-
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010. */
/* { dg-do compile } */
-#include "../../objc-obj-c++-shared/Object1.h"
-#include "../../objc-obj-c++-shared/next-mapping.h"
+#include "../../objc-obj-c++-shared/runtime.h"
#ifndef __NEXT_RUNTIME__
#include <objc/NXConstStr.h>
#endif
id test_invalid8 = @"te" @@"s" @"t"; /* { dg-error "repeated .@. before Objective-C string" } */
id test_invalid9 = @"te" @"s" @"t" @; /* { dg-error "stray .@. in program" } */
id test_invalidA = @"te" @ st; /* { dg-error "stray .@. in program" } */
- /* { dg-error "expected" "" { target *-*-* } 32 } */
+ /* { dg-error "expected" "" { target *-*-* } 31 } */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface _Child: Object
+@interface _Child: TestsuiteObject
+ (int) flashCache;
@end
+ (int) flushCache2;
@end
-int _Object = 23; /* Should not conflict with @interface Object. */
+int _TestsuiteObject = 23; /* Should not conflict with @interface TestsuiteObject. */
@implementation _Child
-+ (int) flashCache { return 12 + _Object; }
++ (int) flashCache { return 12 + _TestsuiteObject; }
@end
@implementation Child
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
should be traversed to find the @interface. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@class MyWpModule;
-@compatibility_alias MyObject Object;
+@compatibility_alias MyObject TestsuiteObject;
@compatibility_alias FictitiousModule MyWpModule;
@protocol MySelTarget
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/objc.h>
void foo(id sem)
{
/* Make sure that @synchronized parses and a very basic test runs. */
/* { dg-options "-fobjc-exceptions -fgnu-runtime" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (void)
{
- Object *a = [Object new];
- Object *b = [Object new];
- Object *c = [Object new];
+ TestsuiteObject *a = [TestsuiteObject new];
+ TestsuiteObject *b = [TestsuiteObject new];
+ TestsuiteObject *c = [TestsuiteObject new];
/* This single-threaded test just checks that @synchronized() uses a
recursive mutex, and that the runtime at least doesn't crash
/* { dg-require-effective-target ilp32 } */
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Protocol1.h"
#include <stdio.h>
#include <string.h>
+#include "../objc-obj-c++-shared/runtime.h"
extern void abort();
Protocol *proto = @protocol(CommonProtocol);
struct objc_method_description *meth;
+struct objc_method_description meth_object;
int main()
{
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_On:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_On:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4On@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_nO:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_nO:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4nO@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_Oo:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_Oo:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4Oo@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_oO:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oO:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oO@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_rn:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_rn:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4rn@8"))
abort();
- meth = [proto descriptionForInstanceMethod: @selector(methodCall_oOn:)];
+ meth_object = protocol_getMethodDescription (proto, @selector(methodCall_oOn:), YES, YES);
+ meth = &meth_object;
if (strcmp (meth->types, "Vv12@0:4oOn@8"))
abort();
return 0;
/* { dg-do run } */
-/* See if -forward::/-performv:: is able to work. */
+/* See if -forward:: is able to work. */
/* { dg-xfail-run-if "PR36610" { ! { { i?86-*-* x86_64-*-* } && ilp32 } } { "-fgnu-runtime" } { "" } } */
/* { dg-skip-if "Needs OBJC2 Implementation" { *-*-darwin* && { lp64 } } { "-fnext-runtime" } { "" } } */
-/* There is no implementation of forward: in the NeXT m64 libobjc/Object
- neither have we implemented this in our extensions - so we have to skip it
- for now. */
#include <stdio.h>
#include <stdlib.h>
-#ifndef __NEXT_RUNTIME__
-# include <objc/objc-api.h>
-#endif
-#include <objc/Object.h>
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
#define VALUETOUSE 1234567890
id forwarder, receiver;
-@interface Forwarder: Object
+@interface Forwarder: TestsuiteObject
{
id receiver;
}
@end
-@interface Receiver:Object
+@interface Receiver:TestsuiteObject
{
int foo;
}
-display
{
+ printf ("Executing display\n");
/* Check to see if we are really the reciever. */
if (self != receiver)
abort ();
receiver = theReceiver;
return self;
}
-#ifdef __NEXT_RUNTIME__
-- forward: (SEL)theSel: (marg_list)theArgFrame
-#else
--(retval_t) forward: (SEL)theSel: (arglist_t)theArgFrame
-#endif
+-(void *) forward: (SEL)theSel: (void *)theArgFrame
{
/* If we have a reciever try to perform on that object */
if (receiver)
- return [receiver performv: theSel: theArgFrame];
+ {
+ /* Simple forward that works for methods with no
+ arguments. */
+ typedef id (*method_with_no_args) (id receiver, SEL _cmd);
+ Method method = class_getInstanceMethod (object_getClass (receiver),
+ theSel);
+ method_with_no_args imp = (method_with_no_args)(method_getImplementation
+ (method));
+ return (*imp)(receiver, theSel);
+ }
/* Normally you'd emit an error here. */
printf ("Unrecognized selector\n");
+ return NULL;
}
@end
int main()
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSString: Object
@end
/* { dg-options "-fconstant-string-class=XStr" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface XString: Object {
@protected
/* { dg-do run } */
/* { dg-options "-fconstant-string-class=Foo " } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-@interface Foo: Object {
+@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
- (char *)customString;
@end
+#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
+#endif
-@implementation Foo : Object
+@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
/* { dg-do run } */
/* { dg-options "-fconstant-string-class=Foo" } */
/* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
-@interface Foo: Object {
+@interface Foo: TestsuiteObject {
char *cString;
unsigned int len;
}
@end
+#ifdef __NEXT_RUNTIME__
#ifdef NEXT_OBJC_USE_NEW_INTERFACE
Class _FooClassReference;
#else
struct objc_class _FooClassReference;
#endif
+#endif
-@implementation Foo : Object
+@implementation Foo : TestsuiteObject
- (char *)customString {
return cString;
}
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
@interface NSConstantString: Object {
char *cString;
/* { dg-require-effective-target tls_runtime } */
/* { dg-add-options tls } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../../../objc-obj-c++-shared/Object1.m" } */
-#include "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
extern void _exit(int);
-@interface tsObj: Object {
+@interface tsObj: TestsuiteObject {
int ai ;
}
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../../objc-obj-c++-shared/Object1.m" } */
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
int main(void)
{
- [Object class];
+ [TestsuiteObject class];
return 0;
}
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
#include <stdio.h>
#include <setjmp.h>
-@interface Frob: Object
+@interface Frob: TestsuiteObject
@end
-@implementation Frob: Object
+@implementation Frob: TestsuiteObject
@end
static int exc_control = 0;
/* { dg-options "-fobjc-exceptions" } */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
@protocol Proto1
- (int)meth1;
- (int)meth2;
@end
-@interface MyClass: Object <Proto2> {
+@interface MyClass: TestsuiteObject <Proto2> {
int a;
}
- (int)meth2;
-- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2;
+- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2;
@end
MyClass *mc1, *mc2;
- (int)meth2 {
return a;
}
-- (Object *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
+- (TestsuiteObject *)parm1: (id)p1 parm2: (id<Proto1>)p2 {
@try {
mc2 = p2; /* { dg-warning "type .id <Proto1>. does not conform to the .Proto2. protocol" } */
}
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
const char *foo(void)
{
@try {
return "foo";
}
- @catch (Object* theException) {
+ @catch (TestsuiteObject* theException) {
return [theException name];
}
}
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
int main (int argc, const char * argv[]) {
- Object * pool = [Object new];
+ TestsuiteObject * pool = [TestsuiteObject new];
int a;
if ( 1 ) {
@try {
a = 1;
}
- @catch (Object *e) {
+ @catch (TestsuiteObject *e) {
a = 2;
}
@finally {
/* { dg-do compile } */
/* { dg-options "-fobjc-exceptions" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
-@interface Derived: Object
+@interface Derived: TestsuiteObject
- (id) meth;
@end
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-sources "../objc-obj-c++-shared/Object1.m" } */
-#include "../objc-obj-c++-shared/Object1.h"
-#include "../objc-obj-c++-shared/next-mapping.h"
+#include "../objc-obj-c++-shared/runtime.h"
#include <stdio.h>
#include <stdlib.h>
-#ifdef __NEXT_RUNTIME__
-#include <objc/objc-runtime.h>
-#define METHOD Method
-#else
-#include <objc/objc-api.h>
-#define METHOD Method_t
-#define method_get_types(M) (M)->method_types
-#endif
extern int sscanf(const char *str, const char *format, ...);
extern void abort(void);
@end
Class cls;
-METHOD meth ;
+Method meth ;
unsigned totsize, offs0, offs1, offs2, offs3, offs4, offs5, offs6, offs7;
static void scan_initial(const char *pattern) {
totsize = offs0 = offs1 = offs2 = offs3 = offs4 = offs5 = offs6 = offs7 = (unsigned)-1;
- sscanf(method_get_types(meth), pattern, &totsize, &offs0, &offs1, &offs2, &offs3,
+ sscanf(method_getTypeEncoding(meth), pattern, &totsize, &offs0, &offs1, &offs2, &offs3,
&offs4, &offs5, &offs6, &offs7);
CHECK_IF(!offs0 && offs1 == sizeof(id) && offs2 == offs1 + sizeof(SEL) && totsize >= offs2);
}
int main(void) {
- cls = objc_get_class("ArrayTest");
+ cls = objc_getClass("ArrayTest");
- meth = class_get_instance_method(cls, @selector(str:with:and:));
+ meth = class_getInstanceMethod(cls, @selector(str:with:and:));
/* Here we have the complication that 'enum Enum' could be encoded
as 'i' on __NEXT_RUNTIME_, and (most likely) as 'I' on the GNU
CHECK_IF(offs3 == offs2 + sizeof(signed char *) && offs4 == offs3 + sizeof(unsigned char *));
CHECK_IF(totsize == offs4 + sizeof(enum Enum *));
- meth = class_get_instance_method(cls, @selector(meth1:with:with:));
+ meth = class_getInstanceMethod(cls, @selector(meth1:with:with:));
scan_initial("i%u@%u:%u^i%u[0i]%u[2i]%u");
CHECK_IF(offs3 == offs2 + sizeof(int *) && offs4 == offs3 + sizeof(int *));
CHECK_IF(totsize == offs4 + sizeof(int *));
/* Typedefs of ObjC types should work without any bogus warnings. */
/* { dg-do compile } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.h"
+#include <objc/objc.h>
-typedef Object MyObject;
+typedef TestsuiteObject MyObject;
int main (int argc, const char * argv[])
{
- Object* a = nil;
+ TestsuiteObject* a = nil;
MyObject* b = a;
- Object* c = b;
+ TestsuiteObject* c = b;
return 0;
}
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include "../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdarg.h>
#include <stdlib.h>
/* Test methods with "C-style" trailing arguments, with or without ellipsis. */
-@interface MathClass: Object
+@interface MathClass: TestsuiteObject
/* sum positive numbers; -1 ends the list */
+ (int) sum: (int)firstNumber, int secondNumber, ...;
+ (int) prod: (int) firstNumber, int secondNumber, int thirdNumber;
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
/* { dg-options "-fzero-link" } */
-#include "../objc-obj-c++-shared/Object1.h"
+#include <objc/Object.h>
#include <objc/objc.h>
extern void abort(void);
/* { dg-options "-fzero-link" } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
-#include "../objc-obj-c++-shared/Object1.h"
-//#import <objc/objc.h>
+#include <objc/Object.h>
extern void abort(void);
#define CHECK_IF(expr) if(!(expr)) abort();
return 0;
}
-#include "../objc-obj-c++-shared/Object1-implementation.h"
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.h"
int main(void)
{
- [Object class];
+ [TestsuiteObject class];
}
/* Contributed by Nicola Pero - Fri Mar 9 19:39:15 CET 2001 */
#include <stdlib.h>
-#include "../../objc-obj-c++-shared/next-mapping.h"
-#include <objc/objc.h>
-#include <objc/objc-api.h>
+#include "../../objc-obj-c++-shared/runtime.h"
/* Test getting and calling the IMP of a method */
{
Class isa;
}
-- (int) next: (int)a;
++ (int) next: (int)a;
@end
@implementation TestClass
-- (int) next: (int)a
++ (int) next: (int)a
{
return a + 1;
}
SEL selector;
int (* imp) (id, SEL, int);
- class = objc_get_class ("TestClass");
+ class = objc_getClass ("TestClass");
selector = @selector (next:);
- imp = (int (*)(id, SEL, int))method_get_imp
- (class_get_class_method (class, selector));
+ imp = (int (*)(id, SEL, int))method_getImplementation
+ (class_getClassMethod (class, selector));
if (imp (class, selector, 5) != 6)
{
/* Contributed by Nicola Pero - Fri Mar 9 19:39:15 CET 2001 */
#include <stdlib.h>
-#include "../../objc-obj-c++-shared/next-mapping.h"
-#include <objc/objc-api.h>
+#include "../../objc-obj-c++-shared/runtime.h"
/* Test the hidden argument _cmd to method calls */
@implementation TestClass
+ (const char*) method
{
- return sel_get_name (_cmd);
+ return sel_getName (_cmd);
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <stdlib.h>
-#ifndef __NEXT_RUNTIME__
-#include <objc/objc-api.h>
-#endif
-#include "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test that by using -> we can access ivars of other objects of the same
class */
-@interface TestClass : Object
+@interface TestClass : TestsuiteObject
{
int value;
}
- (int) value;
-- (int) setValue: (int)number;
+- (void) setValue: (int)number;
- (void) takeValueFrom: (TestClass *)object;
@end
-@implementation TestClass : Object
+@implementation TestClass : TestsuiteObject
{
int value;
}
{
return value;
}
-- (int) setValue: (int)number
+- (void) setValue: (int)number
{
- value = number;
+ value = number;
}
- (void) takeValueFrom: (TestClass *)object
{
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
#include <stdio.h>
#include <stdlib.h>
-#ifndef __NEXT_RUNTIME__
-#include <objc/encoding.h>
-#else
+#include "../../objc-obj-c++-shared/runtime.h"
+
/* The following header, together with the implementation included below,
emulate functionality provided by the GNU runtime but not available from
the NeXT runtime. */
#include "../../objc-obj-c++-shared/objc-test-suite-next-encode-assist.h"
-#define objc_get_class(C) objc_getClass(C)
-#endif
-#ifndef __OBJC2__
+#if defined(__NEXT_RUNTIME__) && !defined(NEXT_OBJC_USE_NEW_INTERFACE)
void print_ivars (Class class)
{
struct objc_ivar_list* ivars = class->ivars;
printf ("%d ivars checked\n", i);
}
+#else
+void print_ivars (Class class)
+{
+ unsigned int count, i;
+ Ivar *list = class_copyIvarList (class, &count);
+
+ for (i = 0; i < count; i++) {
+ printf ("ivar '%s', type '%s', offset %ud\n",
+ ivar_getName (list[i]),
+ ivar_getTypeEncoding (list[i]),
+ (unsigned int)ivar_getOffset (list[i]));
+ }
+}
+
+void compare_structures (Class class, const char* type)
+{
+ struct objc_struct_layout layout;
+ unsigned int count;
+ Ivar *list = class_copyIvarList (class, &count);
+ int i = 0;
+ int position;
+
+ objc_layout_structure (type, &layout);
+
+ while (objc_layout_structure_next_member (&layout))
+ {
+ const char *ivar_type;
+
+ if (i > count)
+ {
+ printf ("too many ivars in type %s, layout = %s\n",
+ type, layout.type);
+ exit (1);
+ }
+
+ objc_layout_structure_get_info (&layout, &position, NULL, &ivar_type);
+ printf ("real ivar '%s' offset %ud\n",
+ ivar_getName (list[i]), (unsigned int)ivar_getOffset (list[i]));
+ printf ("computed type '%s' offset %d\n", ivar_type, position);
+ if ((unsigned int)position != (unsigned int)ivar_getOffset (list[i]))
+ {
+ printf ("offset %ud and computed position %d don't match on ivar '%s'"
+ " (i = %d)\n",
+ (unsigned int)ivar_getOffset (list[i]), position, ivar_getName (list[i]), i);
+ exit (1);
+ }
+ i++;
+ }
+
+ printf ("%d ivars checked\n", i);
+}
#endif
int main ()
{
-#ifndef __OBJC2__
struct class_vars
{
@defs (MyObject);
};
int size1, size2;
- Class class = objc_get_class ("MyObject");
+ Class class = objc_getClass ("MyObject");
printf ("type = %s\n", @encode (struct class_vars));
print_ivars (class);
printf ("sizes don't match (computed %d, exact %d)\n", size1, size2);
abort ();
}
-#endif
- exit (0);
+ return 0;
}
-#ifndef __OBJC2__
#include "../../objc-obj-c++-shared/objc-test-suite-next-encode-assist-impl.h"
-#endif
* Contributed by Nicola Pero <nicola@brainstorm.co.uk>
* Fri Feb 2 11:48:01 GMT 2001
*/
-
-#include "../../objc-obj-c++-shared/Protocol1.h"
+#include <objc/objc.h>
@protocol MyProtocol
- (bycopy id) bycopyMethod;
{
[nil bycopyMethod];
- exit (0);
+ return 0;
}
* Contributed by Nicola Pero <nicola@brainstorm.co.uk>
* Fri Feb 2 11:48:01 GMT 2001
*/
-
-#include "../../objc-obj-c++-shared/Protocol1.h"
+#include <objc/objc.h>
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
@protocol MyProtocol
+ (bycopy id<MyProtocol>) bycopyMethod;
@end
-@interface MyObject : Object <MyProtocol>
+@interface MyObject : TestsuiteObject <MyProtocol>
@end
@implementation MyObject
object = [MyObject bycopyMethod];
- exit (0);
+ return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
* interfere with what we are testing, which is that the `bycopy'
* keyword generates the _F_BYCOPY qualifier for the return type. */
-extern void exit (int) __attribute__ ((noreturn));
extern int printf (const char *, ...);
-#include <objc/Protocol.h>
-
-#ifndef __NEXT_RUNTIME__
-#include <objc/encoding.h>
-#endif
+#include <objc/objc.h>
+#include "../../objc-obj-c++-shared/runtime.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
@protocol MyProtocol
+ (bycopy id<MyProtocol>) bycopyMethod;
@end
/* This no-op class to keep it compile under broken gcc 3.x */
-@interface MyObject : Object <MyProtocol>
-#ifdef __OBJC2__
-+ (id) initialize;
-+ (id) alloc;
-+ new;
-- init;
-#endif
+@interface MyObject : TestsuiteObject <MyProtocol>
@end
@implementation MyObject
{
return [MyObject alloc];
}
-#ifdef __OBJC2__
-+ initialize {return self;}
-+ alloc { return class_createInstance (self, 0);}
-+ new { return [[self alloc] init]; }
-- init {return self;}
-#endif
@end
/* The following header, together with the implementation included below,
int main (void)
{
- struct objc_method_description *method;
+ struct objc_method_description method;
const char *method_types;
unsigned qualifiers;
Protocol *protocol;
protocol = @protocol (MyProtocol);
/* Ask to the protocol for the description of the method bycopyMethod */
- method = [protocol descriptionForClassMethod: @selector (bycopyMethod)];
- if (method == NULL)
- {
- printf ("Could not find method bycopyMethod in protocol!\n");
- exit (1);
- }
+ method = protocol_getMethodDescription (protocol, @selector (bycopyMethod),
+ YES, NO);
/* Get the method types for the method - which encode return type,
arguments etc. */
- method_types = method->types;
+ method_types = method.types;
+
+ if (method_types == NULL)
+ {
+ printf ("Could not find method bycopyMethod in protocol!\n");
+ return 1;
+ }
/* Get the qualifiers for the return type */
qualifiers = objc_get_type_qualifiers (method_types);
if (! (qualifiers & _F_BYCOPY))
{
printf ("Failed - selector does not contain _F_BYCOPY qualifier!\n");
- exit (1);
+ return 1;
}
/* Else, happy end */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
-@interface Foo : Object
+@interface Foo : TestsuiteObject
+ foo;
+ bar;
@end
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a RootClass */
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubSubClass", @selector (state));
test_that_class_has_instance_method ("SubSubClass", @selector (shift));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
- sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
+ sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubSubClass", @selector (state));
test_that_class_has_instance_method ("SubSubClass", @selector (shift));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
- sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
+ sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with a class methods */
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
static int class_variable = 0;
test_that_class_has_class_method ("SubClass", @selector (setState:));
test_that_class_has_class_method ("SubClass", @selector (state));
- class = objc_lookup_class ("SubClass");
+ class = objc_getClass ("SubClass");
test_accessor_method (class, 0, -1, -1, 1, 1);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with a class accessor
methods and a subclass overriding the superclass' implementation
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
static int class_variable = 0;
test_that_class_has_class_method ("SubSubClass", @selector (setState:));
test_that_class_has_class_method ("SubSubClass", @selector (state));
- class = objc_lookup_class ("SubClass");
+ class = objc_getClass ("SubClass");
test_accessor_method (class, 0, -1, -1, 1, 1);
- sub_class = objc_lookup_class ("SubSubClass");
+ sub_class = objc_getClass ("SubSubClass");
class_variable = 0;
test_accessor_method (sub_class, 1, -1, 0, 1, 2);
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with a class accessor
methods and a subclass overriding the superclass' implementation,
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
static int class_variable = 0;
test_that_class_has_class_method ("SubSubClass", @selector (state));
test_that_class_has_class_method ("SubSubClass", @selector (shift));
- class = objc_lookup_class ("SubClass");
+ class = objc_getClass ("SubClass");
test_accessor_method (class, 0, -1, -1, 1, 1);
- sub_class = objc_lookup_class ("SubSubClass");
+ sub_class = objc_getClass ("SubSubClass");
class_variable = 0;
test_accessor_method (sub_class, 1, -1, 0, 1, 2);
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass */
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a minimal subclass tree */
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods */
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubClass", @selector (setState:));
test_that_class_has_instance_method ("SubClass", @selector (state));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, 1, 1, -3, -3);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
- sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
+ sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
- sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
+ sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods; accessor methods implemented in a separate
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubClass", @selector (setState:));
test_that_class_has_instance_method ("SubClass", @selector (state));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, 1, 1, -3, -3);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
- sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
+ sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
/* Contributed by Nicola Pero - Tue Mar 6 23:05:53 CET 2001 */
-#include "../../objc-obj-c++-shared/next-mapping.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Tests creating a root class and a subclass with an ivar and
accessor methods and a subclass overriding the superclass'
@end
@implementation RootClass
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface SubClass : RootClass
test_that_class_has_instance_method ("SubSubClass", @selector (setState:));
test_that_class_has_instance_method ("SubSubClass", @selector (state));
- object = class_create_instance (objc_lookup_class ("SubClass"));
+ object = class_createInstance (objc_getClass ("SubClass"), 0);
test_accessor_method (object, 0, -1, -1, 1, 1);
- sub_object = class_create_instance (objc_lookup_class ("SubSubClass"));
+ sub_object = class_createInstance (objc_getClass ("SubSubClass"), 0);
test_accessor_method (sub_object, 1, -1, 0, 1, 2);
return 0;
#include <stdio.h>
#include <stdlib.h>
-#include "../../objc-obj-c++-shared/Object1.h"
-#include <objc/objc.h>
-#include <objc/objc-api.h>
+#include "../../objc-obj-c++-shared/runtime.h"
/*
* Standard Tests For Classes and Objects - abort upon failing; return
/* Test that `class' is a Class */
static void test_is_class (Class class)
{
- if (object_is_class (class) == NO)
- {
- printf ("test_is_class failed\n");
- abort ();
- }
-
- if (class_is_class (class) == NO)
+ if (class_isMetaClass (object_getClass (class)) == NO)
{
printf ("test_is_class failed\n");
abort ();
/* Test that the superclass of `class' is `superclass' */
static void test_superclass (Class class, Class superclass)
{
- if (class_get_super_class (class) != superclass)
+ if (class_getSuperclass (class) != superclass)
{
printf ("test_superclass failed\n");
abort ();
/* Test that the classname of `class' is `classname' */
static void test_class_name (Class class, const char *classname)
{
- if (strcmp (class_get_class_name (class), classname))
+ if (strcmp (class_getName (class), classname))
{
printf ("test_class_name failed\n");
abort ();
static void test_allocate (Class class)
{
/* The object we create is leaked but who cares, this is only a test */
- id object = class_create_instance (class);
+ id object = class_createInstance (class, 0);
if (object == nil)
{
/* Test that instances of `class' are instances and not classes */
static void test_instances (Class class)
{
- id object = class_create_instance (class);
+ id object = class_createInstance (class, 0);
- if (object_is_class (object) == YES)
+ if (class_isMetaClass (object_getClass (object)) == YES)
{
printf ("test_instances failed\n");
abort ();
/* Test that we can deallocate instances of `class' */
static void test_deallocate (Class class)
{
- id object = class_create_instance (class);
+ id object = class_createInstance (class, 0);
object_dispose (object);
}
/* Test that the object and the class agree on what the class is */
static void test_object_class (Class class)
{
- id object = class_create_instance (class);
+ id object = class_createInstance (class, 0);
- if (object_get_class (object) != class)
+ if (object_getClass (object) != class)
{
printf ("test_object_class failed\n");
abort ();
}
}
-/* Test that the object and the class agree on what the superclass is */
-static void test_object_super_class (Class class)
-{
- id object = class_create_instance (class);
-
- if (object_get_super_class (object) != class_get_super_class (class))
- {
- printf ("test_object_super_class failed\n");
- abort ();
- }
-}
-
/*
* Runs all the tests in this file for the specified class
*/
Class class;
Class superclass;
- /* We need at least a method call before playing with the internals,
- so that the runtime will call __objc_resolve_class_links () */
- [Object class];
-
/* class_name must be an existing class */
- class = objc_lookup_class (class_name);
+ class = objc_getClass (class_name);
test_is_class (class);
/* But superclass_name can be "", which means `Nil' */
- superclass = objc_lookup_class (superclass_name);
+ superclass = objc_getClass (superclass_name);
if (superclass != Nil)
{
test_is_class (superclass);
test_instances (class);
test_deallocate (class);
test_object_class (class);
- test_object_super_class (class);
}
/* Contributed by Nicola Pero on Tue Mar 6 23:05:53 CET 2001 */
-#include <objc/objc.h>
-#include <objc/objc-api.h>
#include <stdio.h>
#include <stdlib.h>
+#include "../../objc-obj-c++-shared/runtime.h"
/*
* Standard Tests For Methods of Classes and Objects - abort upon
void test_that_class_has_instance_method (const char *class_name,
SEL selector)
{
- Class class = objc_lookup_class (class_name);
+ Class class = objc_getClass (class_name);
- if (class_get_instance_method (class, selector) == NULL)
+ if (class_getInstanceMethod (class, selector) == NULL)
{
printf ("test_class_has_instance_method failed\n");
abort ();
void test_that_class_has_class_method (const char *class_name,
SEL selector)
{
- Class meta_class = objc_get_meta_class (class_name);
+ Class class = objc_getClass (class_name);
- if (class_get_class_method (meta_class, selector) == NULL)
+ if (class_getClassMethod (class, selector) == NULL)
{
printf ("test_class_has_class_method failed\n");
abort ();
{
return 4;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
return u;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
/* The second class */
}
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
/* Contributed by Nicola Pero - Thu Mar 8 17:23:59 CET 2001 */
-#import "../../objc-obj-c++-shared/Object1.h"
-#include <objc/objc.h>
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
-@compatibility_alias MyObject Object;
+@compatibility_alias MyObject TestsuiteObject;
int main (void)
{
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
-#include <objc/objc-api.h>
/* Test very simple @encode */
abort ();
}
- if (strcmp ("@", @encode (Object *)))
+ if (strcmp ("@", @encode (TestsuiteObject *)))
{
abort ();
}
/* Contributed by Nicola Pero - Wed Dec 5 17:12:40 GMT 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
-#include <objc/objc.h>
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test using a bitfield enumeration ivar. */
white
} color;
-@interface TestClass: Object
+@interface TestClass: TestsuiteObject
{
color c:2;
}
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Nicola Pero - Wed Dec 5 17:12:40 GMT 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
-#include <objc/objc.h>
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
typedef enum { black, white } color;
color b:2;
} color_couple;
-@interface TestClass: Object
+@interface TestClass: TestsuiteObject
{
color_couple *c;
}
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
#include <stdio.h>
#include <stdlib.h>
-#import "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
/* The following is not required in actual user code; we include it
here to check that the compiler generates an internal definition of
#define CHECK_IF(expr) if(!(expr)) abort()
-@interface Frob: Object
+@interface Frob: TestsuiteObject
@end
-@implementation Frob: Object
+@implementation Frob: TestsuiteObject
@end
static Frob* _connection = nil;
//--------------------------------------------------------------------
-void test (Object* sendPort)
+void test (TestsuiteObject* sendPort)
{
int cleanupPorts = 1;
Frob* receivePort = nil;
printf ("cleanupPorts = %d\n", cleanupPorts);
printf ("---\n");
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
@catch(Frob *obj) {
printf ("Exception caught by incorrect handler!\n");
int main (void) {
- test((Object *)-1);
+ test((TestsuiteObject *)-1);
return 0;
}
-#import "../../../objc-obj-c++-shared/Object1-implementation.h"
+
#include <stdio.h>
#include <stdlib.h>
-//#import "../../../objc-obj-c++-shared/Object1.h"
-#ifdef __OBJC2__
-#include <objc/runtime.h>
-@interface Object
-+ initialize;
-+ new;
-- free;
-@end
-@implementation Object
-+ initialize { return self; }
-+ new { return class_createInstance (self, 0); }
-- free { return object_dispose(self);}
-@end
-
-#else
-#import "../../../objc-obj-c++-shared/Object1.h"
-#endif
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
static int made_try = 0;
@try
{
thrower_try_body();
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
@finally
{
abort ();
return 0;
}
-//#import "../../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Check that throwing an exception from a -forward:: works. */
/* Developed by Marcin Koziej <creep@desk.pl>. */
+#include <stdio.h>
#include <stdlib.h>
-#include <objc/Object.h>
-#ifndef __NEXT_RUNTIME__
-#import <objc/objc-api.h>
-#endif
-
-#ifdef __OBJC2__
-@interface Object (TEST_SUITE_ADDITIONS)
-+ initialize;
-+ alloc;
-+ new;
-- init;
-- free;
-@end
-
-@implementation Object (TEST_SUITE_ADDITIONS)
-+ initialize { return self; }
-+ alloc { return class_createInstance (self, 0); }
-+ new { return [[self alloc] init]; }
-- init { return self; }
-- free { return object_dispose(self); }
-@end
-#endif
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
static int i;
__attribute__((objc_exception))
-@interface Thrower : Object
+@interface Thrower : TestsuiteObject
- forward: (SEL) s : (void*) a;
@end
- forward: (SEL) s : (void*) a
{
i++;
- @throw [Object new];
+ @throw [TestsuiteObject new];
return nil;
}
@end
#else
-#include <objc/objc-api.h>
+#include <objc/runtime.h>
#include <objc/objc-exception.h>
-#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
static unsigned int handlerExpected = 0;
@try
{
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
@catch (id exc)
{
handlerExpected = 1;
}
- @throw [Object new];
+ @throw [TestsuiteObject new];
abort();
return 0;
}
#include <stdlib.h>
#include <stdio.h>
-#import "../../../objc-obj-c++-shared/Object1.h"
+#import "../../../objc-obj-c++-shared/TestsuiteObject.m"
int gi1 = 9, gi2 = 19;
float gf1 = 9.0, gf2 = 19.0;
local6 = 18.0;
pi = &gi2;
pf = &gf2;
- obj2 = obj1 = [Object new];
+ obj2 = obj1 = [TestsuiteObject new];
arg1 = 17;
arg2 = &gf2;
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
- @catch (Object *obj) {
+ @catch (TestsuiteObject *obj) {
if (local1 != 123 || local2 != 345 || local3 != 5.0 || local4 != 6.0
|| local5 != 17 || local6 != 18.0) {
printf("Abort 1\n");
foo(15, &gf1);
return 0;
}
-#import "../../../objc-obj-c++-shared/Object1-implementation.h"
+
#else
-#include <objc/objc-api.h>
+#include <objc/runtime.h>
#include <objc/objc-exception.h>
-#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#include <stdlib.h>
static unsigned int handlerExpected = 0;
return 1;
}
-@interface A : Object
+@interface A : TestsuiteObject
@end
@implementation A
@end
-@interface B : Object
+@interface B : TestsuiteObject
@end
@implementation B
#include <objc/objc.h>
-#include <objc/Object.h>
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
#ifdef __NEXT_RUNTIME__
/* This test only runs for the GNU runtime. */
{
@throw nil;
}
- @catch (Object *exc)
+ @catch (TestsuiteObject *exc)
{
abort ();
}
#include <stdlib.h>
-#import "../../../objc-obj-c++-shared/Object1.h"
+#include "../../../objc-obj-c++-shared/TestsuiteObject.m"
/* do nothing except prove we can compile and link code calling the
ecceptions mechanism */
{
@try {
int a = 1 ;
- @throw [Object new];
+ @throw [TestsuiteObject new];
}
- @catch (Object *obj) {
+ @catch (TestsuiteObject *obj) {
return 0;
}
abort();
}
-
-#import "../../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Tests defining a protocol and a class adopting it */
- (void) setEnabled: (BOOL)flag;
@end
-@interface Feature : Object <Enabling>
+@interface Feature : TestsuiteObject <Enabling>
{
const char *name;
BOOL isEnabled;
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining a protocol, a class adopting it, and using an object
of type `id <protocol>'. */
- (void) setEnabled: (BOOL)flag;
@end
-@interface Feature : Object <Enabling>
+@interface Feature : TestsuiteObject <Enabling>
{
const char *name;
BOOL isEnabled;
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining two protocol, a class adopting both of them,
and using an object of type `id <Protocol1, Protocol2>' */
- (int) importance;
@end
-@interface Feature : Object <Enabling, Evaluating>
+@interface Feature : TestsuiteObject <Enabling, Evaluating>
{
const char *name;
BOOL isEnabled;
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining a protocol, a class adopting it in a category */
- (int) importance;
@end
-@interface Feature : Object
+@interface Feature : TestsuiteObject
@end
@implementation Feature
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
#include <stdlib.h>
#include <objc/Protocol.h>
-#include "../../objc-obj-c++-shared/next-mapping.h"
+#include "../../objc-obj-c++-shared/runtime.h"
/* Test defining a protocol, and accessing it using @protocol */
{
Protocol *protocol = @protocol (Evaluating);
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (strcmp (protocol_getName(protocol), "Evaluating"))
-#else
- if (strcmp ([protocol name], "Evaluating"))
-#endif
{
abort ();
}
#include <stdlib.h>
#include <objc/Protocol.h>
-#include "../../objc-obj-c++-shared/next-mapping.h"
+#include "../../objc-obj-c++-shared/runtime.h"
/* Test defining a protocol, and accessing it using @protocol */
{
Protocol *protocol = @protocol (Evaluating);
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (strcmp (protocol_getName(protocol), "Evaluating"))
-#else
- if (strcmp ([protocol name], "Evaluating"))
-#endif
{
abort ();
}
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Protocol1.h"
+#include <objc/Protocol.h>
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test defining two protocols, one incorporating the other one. */
@end
/* A class adopting the protocol */
-@interface Test : Object <Processing>
+@interface Test : TestsuiteObject <Processing>
{
BOOL didConfigure;
BOOL didProcess;
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
-@interface Foo : Object
+@interface Foo : TestsuiteObject
+ bar;
@end
/* Contributed by Nicola Pero - Fri Mar 9 21:35:47 CET 2001 */
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.h"
#include <objc/objc.h>
-@interface Object (StopProtocol)
+@interface TestsuiteObject (StopProtocol)
- (void) stop;
@end
*/
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
-@interface A : Object
+@interface A : TestsuiteObject
@end
@interface B : A
{
return [self sumInteger: a withInteger: b withInteger: c];
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
return test ();
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
int main (void)
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
#include <stdio.h>
#include <stdlib.h>
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
int bappy (int (*blargh) (int a, int b, int c))
return blargh (4, 7, 2) + 3;
}
-@interface Foo: Object
+@interface Foo: TestsuiteObject
+ (int)foo;
@end
+++ /dev/null
-/* This file "renames" various ObjC GNU runtime entry points
- (and fakes the existence of several others)
- if the NeXT runtime is being used. */
-/* Authors: Ziemowit Laski <zlaski@apple.com> */
-/* David Ayers <d.ayers@inode.at> */
-
-#ifdef __NEXT_RUNTIME__
-#include <objc/objc-class.h>
-#include <objc/Object.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-#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 method_get_imp(M) (((Method)M)->method_imp)
-#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 class_get_super_class(C) (((struct objc_class *)C)->super_class)
-#define object_get_super_class(O) class_get_super_class(*(struct objc_class **)O)
-#define objc_lookup_class(N) objc_lookUpClass(N)
-#define object_get_class(O) (*(struct objc_class **)O)
-#define class_is_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_CLASS)? YES: NO)
-#define class_is_meta_class(C) (CLS_GETINFO((struct objc_class *)C, CLS_META)? YES: NO)
-#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))
-
-/* You need either an empty +initialize method or an empty -forward:: method.
- The NeXT runtime unconditionally sends +initialize to classes when they are
- first used, and unconditionally tries to forward methods that the class
- doesn't understand (including +initialize). If you have neither +initialize
- nor -forward::, the runtime complains.
-
- The simplest workaround is to add
-
- + initialize { return self; }
-
- to every root class @implementation. */
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* The following is necessary to "cover" the bf*.m test cases on NeXT. */
-
-#undef MAX
-#undef MIN
-#undef ROUND
-
-#ifdef __cplusplus
-#define MAX(X, Y) ((X > Y) ? X : Y)
-#define MIN(X, Y) ((X < Y) ? X : Y)
-#define ROUND(V, A) (A * ((V + A - 1) / A))
-#else
-#define MAX(X, Y) \
- ({ typeof (X) __x = (X), __y = (Y); \
- (__x > __y ? __x : __y); })
-#define MIN(X, Y) \
- ({ typeof (X) __x = (X), __y = (Y); \
- (__x < __y ? __x : __y); })
-#define ROUND(V, A) \
- ({ typeof (V) __v = (V); typeof (A) __a = (A); \
- __a * ((__v+__a - 1)/__a); })
-#endif
-
-#define BITS_PER_UNIT __CHAR_BIT__
-typedef struct{ char a; } __small_struct;
-#define STRUCTURE_SIZE_BOUNDARY (BITS_PER_UNIT * sizeof (__small_struct))
-
-/* Not sure why the following are missing from NeXT objc headers... */
-
-#ifndef _C_LNG_LNG
-#define _C_LNG_LNG 'q'
-#endif
-#ifndef _C_ULNG_LNG
-#define _C_ULNG_LNG 'Q'
-#endif
-#ifndef _C_ATOM
-#define _C_ATOM '%'
-#endif
-#ifndef _C_BOOL
-#define _C_BOOL 'B'
-#endif
-
-#define _C_CONST 'r'
-#define _C_IN 'n'
-#define _C_INOUT 'N'
-#define _C_OUT 'o'
-#define _C_BYCOPY 'O'
-#define _C_BYREF 'R'
-#define _C_ONEWAY 'V'
-#define _C_GCINVISIBLE '!'
-
-#define _F_CONST 0x01
-#define _F_IN 0x01
-#define _F_OUT 0x02
-#define _F_INOUT 0x03
-#define _F_BYCOPY 0x04
-#define _F_BYREF 0x08
-#define _F_ONEWAY 0x10
-#define _F_GCINVISIBLE 0x20
-
-struct objc_struct_layout
-{
- const char *original_type;
- const char *type;
- const char *prev_type;
- unsigned int record_size;
- unsigned int record_align;
-};
-
-typedef union arglist {
- char *arg_ptr;
- char arg_regs[sizeof (char*)];
-} *arglist_t; /* argument frame */
-
-const char *objc_skip_typespec (const char *type);
-void objc_layout_structure_get_info (struct objc_struct_layout *layout,
- unsigned int *offset, unsigned int *align, const char **type);
-void objc_layout_structure (const char *type,
- struct objc_struct_layout *layout);
-BOOL objc_layout_structure_next_member (struct objc_struct_layout *layout);
-void objc_layout_finish_structure (struct objc_struct_layout *layout,
- unsigned int *size, unsigned int *align);
-int objc_aligned_size (const char *type);
-
-/*
- return the size of an object specified by type
-*/
-
-int
-objc_sizeof_type (const char *type)
-{
- /* Skip the variable name if any */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
-
- switch (*type) {
- case _C_ID:
- return sizeof (id);
- break;
-
- case _C_CLASS:
- return sizeof (Class);
- break;
-
- case _C_SEL:
- return sizeof (SEL);
- break;
-
- case _C_CHR:
- return sizeof (char);
- break;
-
- case _C_UCHR:
- return sizeof (unsigned char);
- break;
-
- case _C_SHT:
- return sizeof (short);
- break;
-
- case _C_USHT:
- return sizeof (unsigned short);
- break;
-
- case _C_INT:
- return sizeof (int);
- break;
-
- case _C_UINT:
- return sizeof (unsigned int);
- break;
-
- case _C_LNG:
- return sizeof (long);
- break;
-
- case _C_ULNG:
- return sizeof (unsigned long);
- break;
-
- case _C_LNG_LNG:
- return sizeof (long long);
- break;
-
- case _C_ULNG_LNG:
- return sizeof (unsigned long long);
- break;
-
- case _C_FLT:
- return sizeof (float);
- break;
-
- case _C_DBL:
- return sizeof (double);
- break;
-
- case _C_PTR:
- case _C_ATOM:
- case _C_CHARPTR:
- return sizeof (char *);
- break;
-
- case _C_ARY_B:
- {
- int len = atoi (type + 1);
- while (isdigit ((unsigned char)*++type))
- ;
- return len * objc_aligned_size (type);
- }
- break;
-
- case _C_BFLD:
- {
- /* The NeXT encoding of bitfields is _still_: b 'size' */
- int size = atoi (type + 1);
- /* Return an upper bound on byte size */
- return (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
- }
-
- case _C_STRUCT_B:
- {
- struct objc_struct_layout layout;
- unsigned int size;
-
- objc_layout_structure (type, &layout);
- while (objc_layout_structure_next_member (&layout))
- /* do nothing */ ;
- objc_layout_finish_structure (&layout, &size, NULL);
-
- return size;
- }
-
- case _C_UNION_B:
- {
- int max_size = 0;
- while (*type != _C_UNION_E && *type++ != '=')
- /* do nothing */;
- while (*type != _C_UNION_E)
- {
- /* Skip the variable name if any */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
- max_size = MAX (max_size, objc_sizeof_type (type));
- type = objc_skip_typespec (type);
- }
- return max_size;
- }
- }
- return 0; /* error */
-}
-
-
-/*
- Return the alignment of an object specified by type
-*/
-
-int
-objc_alignof_type (const char *type)
-{
- /* Skip the variable name if any */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
- switch (*type) {
- case _C_ID:
- return __alignof__ (id);
- break;
-
- case _C_CLASS:
- return __alignof__ (Class);
- break;
-
- case _C_SEL:
- return __alignof__ (SEL);
- break;
-
- case _C_CHR:
- return __alignof__ (char);
- break;
-
- case _C_UCHR:
- return __alignof__ (unsigned char);
- break;
-
- case _C_SHT:
- return __alignof__ (short);
- break;
-
- case _C_USHT:
- return __alignof__ (unsigned short);
- break;
-
- case _C_INT:
- case _C_BFLD: /* This is for the NeXT only */
- return __alignof__ (int);
- break;
-
- case _C_UINT:
- return __alignof__ (unsigned int);
- break;
-
- case _C_LNG:
- return __alignof__ (long);
- break;
-
- case _C_ULNG:
- return __alignof__ (unsigned long);
- break;
-
- case _C_LNG_LNG:
- return __alignof__ (long long);
- break;
-
- case _C_ULNG_LNG:
- return __alignof__ (unsigned long long);
- break;
-
- case _C_FLT:
- return __alignof__ (float);
- break;
-
- case _C_DBL:
- return __alignof__ (double);
- break;
-
- case _C_PTR:
- case _C_ATOM:
- case _C_CHARPTR:
- return __alignof__ (char *);
- break;
-
- case _C_ARY_B:
- while (isdigit ((unsigned char)*++type))
- /* do nothing */;
- return objc_alignof_type (type);
-
- case _C_STRUCT_B:
- {
- struct objc_struct_layout layout;
- unsigned int align;
-
- objc_layout_structure (type, &layout);
- while (objc_layout_structure_next_member (&layout))
- /* do nothing */;
- objc_layout_finish_structure (&layout, NULL, &align);
-
- return align;
- }
-
- case _C_UNION_B:
- {
- int maxalign = 0;
- while (*type != _C_UNION_E && *type++ != '=')
- /* do nothing */;
- while (*type != _C_UNION_E)
- {
- /* Skip the variable name if any */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
- maxalign = MAX (maxalign, objc_alignof_type (type));
- type = objc_skip_typespec (type);
- }
- return maxalign;
- }
- }
- return 0; /* error */
-}
-
-/*
- The aligned size if the size rounded up to the nearest alignment.
-*/
-
-int
-objc_aligned_size (const char *type)
-{
- int size, align;
-
- /* Skip the variable name */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
-
- size = objc_sizeof_type (type);
- align = objc_alignof_type (type);
-
- return ROUND (size, align);
-}
-
-/*
- The size rounded up to the nearest integral of the wordsize, taken
- to be the size of a void *.
-*/
-
-int
-objc_promoted_size (const char *type)
-{
- int size, wordsize;
-
- /* Skip the variable name */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
-
- size = objc_sizeof_type (type);
- wordsize = sizeof (void *);
-
- return ROUND (size, wordsize);
-}
-
-/*
- Skip type qualifiers. These may eventually precede typespecs
- occurring in method prototype encodings.
-*/
-
-inline const char *
-objc_skip_type_qualifiers (const char *type)
-{
- while (*type == _C_CONST
- || *type == _C_IN
- || *type == _C_INOUT
- || *type == _C_OUT
- || *type == _C_BYCOPY
- || *type == _C_BYREF
- || *type == _C_ONEWAY
- || *type == _C_GCINVISIBLE)
- {
- type += 1;
- }
- return type;
-}
-
-
-/*
- Skip one typespec element. If the typespec is prepended by type
- qualifiers, these are skipped as well.
-*/
-
-const char *
-objc_skip_typespec (const char *type)
-{
- /* Skip the variable name if any */
- if (*type == '"')
- {
- for (type++; *type++ != '"';)
- /* do nothing */;
- }
-
- type = objc_skip_type_qualifiers (type);
-
- switch (*type) {
-
- case _C_ID:
- /* An id may be annotated by the actual type if it is known
- with the @"ClassName" syntax */
-
- if (*++type != '"')
- return type;
- else
- {
- while (*++type != '"')
- /* do nothing */;
- return type + 1;
- }
-
- /* The following are one character type codes */
- case _C_CLASS:
- case _C_SEL:
- case _C_CHR:
- case _C_UCHR:
- case _C_CHARPTR:
- case _C_ATOM:
- case _C_SHT:
- case _C_USHT:
- case _C_INT:
- case _C_UINT:
- case _C_LNG:
- case _C_ULNG:
- case _C_LNG_LNG:
- case _C_ULNG_LNG:
- case _C_FLT:
- case _C_DBL:
- case _C_VOID:
- case _C_UNDEF:
- return ++type;
- break;
-
- case _C_ARY_B:
- /* skip digits, typespec and closing ']' */
-
- while (isdigit ((unsigned char)*++type))
- ;
- type = objc_skip_typespec (type);
- if (*type == _C_ARY_E)
- return ++type;
- else
- break; /* error */
-
- case _C_BFLD:
- /* The NeXT encoding for bitfields is _still_: b 'size' */
- while (isdigit ((unsigned char)*++type))
- ; /* skip type and size */
- return type;
-
- case _C_STRUCT_B:
- /* skip name, and elements until closing '}' */
-
- while (*type != _C_STRUCT_E && *type++ != '=')
- ;
- while (*type != _C_STRUCT_E)
- {
- type = objc_skip_typespec (type);
- }
- return ++type;
-
- case _C_UNION_B:
- /* skip name, and elements until closing ')' */
-
- while (*type != _C_UNION_E && *type++ != '=')
- ;
- while (*type != _C_UNION_E)
- {
- type = objc_skip_typespec (type);
- }
- return ++type;
-
- case _C_PTR:
- /* Just skip the following typespec */
-
- return objc_skip_typespec (++type);
- }
- return 0; /* error */
-}
-
-/*
- Skip an offset as part of a method encoding. This is prepended by a
- '+' if the argument is passed in registers.
-*/
-inline const char *
-objc_skip_offset (const char *type)
-{
- if (*type == '+')
- type++;
- while (isdigit ((unsigned char) *++type))
- ;
- return type;
-}
-
-/*
- Skip an argument specification of a method encoding.
-*/
-const char *
-objc_skip_argspec (const char *type)
-{
- type = objc_skip_typespec (type);
- type = objc_skip_offset (type);
- return type;
-}
-
-/*
- Return the number of arguments that the method MTH expects.
- Note that all methods need two implicit arguments `self' and
- `_cmd'.
-*/
-int
-method_get_number_of_arguments (struct objc_method *mth)
-{
- int i = 0;
- const char *type = mth->method_types;
- while (*type)
- {
- type = objc_skip_argspec (type);
- i += 1;
- }
- return i - 1;
-}
-
-/*
- Return the size of the argument block needed on the stack to invoke
- the method MTH. This may be zero, if all arguments are passed in
- registers.
-*/
-
-int
-method_get_sizeof_arguments (struct objc_method *mth)
-{
- const char *type = objc_skip_typespec (mth->method_types);
- return atoi (type);
-}
-
-/*
- Return a pointer to the next argument of ARGFRAME. type points to
- the last argument. Typical use of this look like:
-
- {
- char *datum, *type;
- for (datum = method_get_first_argument (method, argframe, &type);
- datum; datum = method_get_next_argument (argframe, &type))
- {
- unsigned flags = objc_get_type_qualifiers (type);
- type = objc_skip_type_qualifiers (type);
- if (*type != _C_PTR)
- [portal encodeData: datum ofType: type];
- else
- {
- if ((flags & _F_IN) == _F_IN)
- [portal encodeData: *(char **) datum ofType: ++type];
- }
- }
- }
-*/
-
-char *
-method_get_next_argument (arglist_t argframe, const char **type)
-{
- const char *t = objc_skip_argspec (*type);
-
- if (*t == '\0')
- return 0;
-
- *type = t;
- t = objc_skip_typespec (t);
-
- if (*t == '+')
- return argframe->arg_regs + atoi (++t);
- else
- return argframe->arg_ptr + atoi (t);
-}
-
-/*
- Return a pointer to the value of the first argument of the method
- described in M with the given argumentframe ARGFRAME. The type
- is returned in TYPE. type must be passed to successive calls of
- method_get_next_argument.
-*/
-char *
-method_get_first_argument (struct objc_method *m,
- arglist_t argframe,
- const char **type)
-{
- *type = m->method_types;
- return method_get_next_argument (argframe, type);
-}
-
-/*
- Return a pointer to the ARGth argument of the method
- M from the frame ARGFRAME. The type of the argument
- is returned in the value-result argument TYPE
-*/
-
-char *
-method_get_nth_argument (struct objc_method *m,
- arglist_t argframe, int arg,
- const char **type)
-{
- const char *t = objc_skip_argspec (m->method_types);
-
- if (arg > method_get_number_of_arguments (m))
- return 0;
-
- while (arg--)
- t = objc_skip_argspec (t);
-
- *type = t;
- t = objc_skip_typespec (t);
-
- if (*t == '+')
- return argframe->arg_regs + atoi (++t);
- else
- return argframe->arg_ptr + atoi (t);
-}
-
-unsigned
-objc_get_type_qualifiers (const char *type)
-{
- unsigned res = 0;
- BOOL flag = YES;
-
- while (flag)
- switch (*type++)
- {
- case _C_CONST: res |= _F_CONST; break;
- case _C_IN: res |= _F_IN; break;
- case _C_INOUT: res |= _F_INOUT; break;
- case _C_OUT: res |= _F_OUT; break;
- case _C_BYCOPY: res |= _F_BYCOPY; break;
- case _C_BYREF: res |= _F_BYREF; break;
- case _C_ONEWAY: res |= _F_ONEWAY; break;
- case _C_GCINVISIBLE: res |= _F_GCINVISIBLE; break;
- default: flag = NO;
- }
-
- return res;
-}
-
-
-/* The following three functions can be used to determine how a
- structure is laid out by the compiler. For example:
-
- struct objc_struct_layout layout;
- int i;
-
- objc_layout_structure (type, &layout);
- while (objc_layout_structure_next_member (&layout))
- {
- int position, align;
- const char *type;
-
- objc_layout_structure_get_info (&layout, &position, &align, &type);
- printf ("element %d has offset %d, alignment %d\n",
- i++, position, align);
- }
-
- These functions are used by objc_sizeof_type and objc_alignof_type
- functions to compute the size and alignment of structures. The
- previous method of computing the size and alignment of a structure
- was not working on some architectures, particulary on AIX, and in
- the presence of bitfields inside the structure. */
-void
-objc_layout_structure (const char *type,
- struct objc_struct_layout *layout)
-{
- const char *ntype;
-
- layout->original_type = ++type;
-
- /* Skip "<name>=" if any. Avoid embedded structures and unions. */
- ntype = type;
- while (*ntype != _C_STRUCT_E && *ntype != _C_STRUCT_B && *ntype != _C_UNION_B
- && *ntype++ != '=')
- /* do nothing */;
-
- /* If there's a "<name>=", ntype - 1 points to '='; skip the name */
- if (*(ntype - 1) == '=')
- type = ntype;
-
- layout->type = type;
- layout->prev_type = NULL;
- layout->record_size = 0;
- layout->record_align = MAX (BITS_PER_UNIT, STRUCTURE_SIZE_BOUNDARY);
-}
-
-
-BOOL
-objc_layout_structure_next_member (struct objc_struct_layout *layout)
-{
- register int desired_align = 0;
-
- /* The current type without the type qualifiers */
- const char *type;
-
- /* Add the size of the previous field to the size of the record. */
- if (layout->prev_type)
- {
- type = objc_skip_type_qualifiers (layout->prev_type);
-
- if (*type != _C_BFLD)
- layout->record_size += objc_sizeof_type (type) * BITS_PER_UNIT;
- else
- layout->record_size += atoi (++type);
- }
-
- if (*layout->type == _C_STRUCT_E)
- return NO;
-
- /* Skip the variable name if any */
- if (*layout->type == '"')
- {
- for (layout->type++; *layout->type++ != '"';)
- /* do nothing */;
- }
-
- type = objc_skip_type_qualifiers (layout->type);
-
- desired_align = objc_alignof_type (type) * BITS_PER_UNIT;
-
- /* Record must have at least as much alignment as any field.
- Otherwise, the alignment of the field within the record
- is meaningless. */
- layout->record_align = MAX (layout->record_align, desired_align);
-
- if (*type == _C_BFLD)
- {
- int bfld_size = atoi (++type);
- int int_align = __alignof__ (int) * BITS_PER_UNIT;
- /* If this bitfield would traverse a word alignment boundary, push it out
- to that boundary instead. */
- if (layout->record_size % int_align
- && (layout->record_size / int_align
- < (layout->record_size + bfld_size - 1) / int_align))
- layout->record_size = ROUND (layout->record_size, int_align);
- }
- else if (layout->record_size % desired_align != 0)
- {
- /* We need to skip space before this field.
- Bump the cumulative size to multiple of field alignment. */
- layout->record_size = ROUND (layout->record_size, desired_align);
- }
-
- /* Jump to the next field in record. */
-
- layout->prev_type = layout->type;
- layout->type = objc_skip_typespec (layout->type); /* skip component */
-
- return YES;
-}
-
-
-void objc_layout_finish_structure (struct objc_struct_layout *layout,
- unsigned int *size,
- unsigned int *align)
-{
- if (layout->type && *layout->type == _C_STRUCT_E)
- {
- /* Round the size up to be a multiple of the required alignment */
- layout->record_size = ROUND (layout->record_size, layout->record_align);
- layout->type = NULL;
- }
- if (size)
- *size = layout->record_size / BITS_PER_UNIT;
- if (align)
- *align = layout->record_align / BITS_PER_UNIT;
-}
-
-
-void objc_layout_structure_get_info (struct objc_struct_layout *layout,
- unsigned int *offset,
- unsigned int *align,
- const char **type)
-{
- if (offset)
- *offset = layout->record_size / BITS_PER_UNIT;
- if (align)
- *align = layout->record_align / BITS_PER_UNIT;
- if (type)
- *type = layout->prev_type;
-}
-
-/* A small, portable NSConstantString implementation for use with the NeXT
- runtime.
-
- On full-fledged Mac OS X systems, NSConstantString is provided
- as part of the Foundation framework. However, on bare Darwin systems,
- Foundation is not included, and hence there is no NSConstantString
- implementation to link against.
-
- This code is derived from the GNU runtime's NXConstantString implementation.
-*/
-
-struct objc_class _NSConstantStringClassReference;
-
-@interface NSConstantString : Object
-{
- char *c_string;
- unsigned int len;
-}
-
--(const char *) cString;
--(unsigned int) length;
-
-@end
-
-@implementation NSConstantString
-
--(const char *) cString
-{
- return (c_string);
-}
-
--(unsigned int) length
-{
- return (len);
-}
-
-@end
-
-/* The NSConstantString metaclass will need to be initialized before we can
- send messages to strings. */
-
-void objc_constant_string_init (void) __attribute__((constructor));
-void objc_constant_string_init (void) {
- memcpy (&_NSConstantStringClassReference,
- objc_getClass ("NSConstantString"),
- sizeof (_NSConstantStringClassReference));
-}
-
-#endif /* #ifdef __NEXT_RUNTIME__ */
/* Contributed by Nicola Pero - Fri Aug 30 12:55:37 2002 */
#include <objc/objc.h>
-#include <objc/Object.h>
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* Test that calling a method of a nil object results in
nothing to happen (but not a crash), and nil to be
returned. */
-@interface TestClass : Object
+@interface TestClass : TestsuiteObject
- (void) testVoid;
- (id) testId;
/* Contributed by Nicola Pero - Fri Mar 9 19:39:15 CET 2001 */
-#import "../../objc-obj-c++-shared/Object1.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
#import <objc/objc.h>
/* Test that using the same name for different things makes no
problem */
-@interface TestClass : Object
+@interface TestClass : TestsuiteObject
{
int test;
}
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
* Tue Sep 19 4:29AM
*/
-#include "../../objc-obj-c++-shared/Protocol1.h"
#include <objc/objc.h>
@protocol MyProtocol
[object methodA];
- exit (0);
+ return 0;
}
* Contributed by Nicola Pero <n.pero@mi.flashnet.it>
* Tue Sep 19 4:34AM
*/
-#include "../../objc-obj-c++-shared/Protocol1.h"
+
#include <objc/objc.h>
@protocol MyProtocol
{
printf ("methodA\n");
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
int main (void)
{
[MyObject methodA];
- exit (0);
+ return 0;
}
/* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */
-#ifdef __NEXT_RUNTIME__
-# include "../../objc-obj-c++-shared/next-mapping.h"
-#else
-# include <objc/objc-api.h>
-#endif
-#include "../../objc-obj-c++-shared/Object1.h"
+
+#include "../../objc-obj-c++-shared/runtime.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* This test demonstrate a failure in object_is_class which was fixed */
/* Create a class whose instance variables mirror the struct used for
Class structures in the runtime ... yes we're feeling evil today */
-@interface EvilClass : Object
+@interface EvilClass : TestsuiteObject
{
Class super_class;
const char* name;
EvilClass *evilObject = [EvilClass new];
/* Now check that the object is not a class object */
- if (object_is_class (evilObject))
+ if (class_isMetaClass (object_getClass (evilObject)))
{
printf ("object_is_class failed\n");
abort ();
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Tue Jul 3 10:55:21 BST 2001 */
-#ifdef __NEXT_RUNTIME__
-# include "../../objc-obj-c++-shared/next-mapping.h"
-#else
-# include <objc/objc-api.h>
-#endif
-#include "../../objc-obj-c++-shared/Object1.h"
+
+#include "../../objc-obj-c++-shared/runtime.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
/* This test demonstrate a failure in object_is_meta_class which was fixed */
-@interface EvilClass : Object
+@interface EvilClass : TestsuiteObject
{
Class super_class;
const char* name;
EvilClass *evilObject = [EvilClass new];
/* Now check that the object is not a meta class object */
- if (object_is_meta_class (evilObject))
+ if (class_isMetaClass (object_getClass (evilObject))
+ && class_isMetaClass (evilObject))
{
printf ("object_is_meta_class failed\n");
abort ();
return 0;
}
-#include "../../objc-obj-c++-shared/Object1-implementation.h"
+
/* Contributed by Nicola Pero - Fri Mar 9 19:39:15 CET 2001 */
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
#include <objc/objc.h>
/* Test the @private, @protected, @public keyworks for ivars. We only
check syntax. */
-@interface TestClass : Object
+@interface TestClass : TestsuiteObject
{
int a;
/* Contributed by Nicola Pero - Fri Jun 4 03:16:17 BST 2004 */
/* Test that a protocol is equal to itself. */
-#include "../../objc-obj-c++-shared/Protocol1.h"
+#include <objc/Protocol.h>
+#include "../../objc-obj-c++-shared/runtime.h"
@protocol Foo
- (void)foo;
{
Protocol *protocol = @protocol(Foo);
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- if ( !protocol_isEqual (protocol, protocol))
-#else
- if (! [protocol isEqual: protocol])
-#endif
+ if (!protocol_isEqual (protocol, protocol))
{
abort ();
}
/* Contributed by Nicola Pero - Fri Jun 4 03:16:17 BST 2004 */
/* Test that protocols with different names are different. */
-
-#include "../../objc-obj-c++-shared/Protocol1.h"
+#include "../../objc-obj-c++-shared/runtime.h"
+#include <objc/Protocol.h>
@protocol Foo1
- (void)foo1;
int main (void)
{
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (protocol_isEqual (@protocol(Foo1), @protocol(Foo2)))
-#else
- if ([@protocol(Foo1) isEqual: @protocol(Foo2)])
-#endif
{
abort ();
}
/* Contributed by Nicola Pero - Fri Jun 4 03:16:17 BST 2004 */
/* Test that a protocol is not equal to nil. */
-
-#include "../../objc-obj-c++-shared/Protocol1.h"
+#include "../../objc-obj-c++-shared/runtime.h"
+#include <objc/Protocol.h>
@protocol Foo
- (void)foo;
int main (void)
{
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
if (protocol_isEqual (@protocol(Foo), nil))
-#else
- if ([@protocol(Foo) isEqual: nil])
-#endif
{
abort ();
}
/* Contributed by David Ayers - Fri Jun 4 03:16:17 BST 2004 */
/* Test that a protocol is not equal to something which is not a protocol. */
-
-#include "../../objc-obj-c++-shared/Protocol1.h"
+#include "../../objc-obj-c++-shared/runtime.h"
+#include <objc/Protocol.h>
@protocol Foo
- (void)foo;
int main (void)
{
/* A Protocol object should not be equal to a Class object. */
-#ifdef NEXT_OBJC_USE_NEW_INTERFACE
- if (protocol_isEqual (@protocol(Foo), objc_getClass("Protocol")))
-#else
- if ([@protocol(Foo) isEqual: [Protocol class]])
-#endif
+ if (protocol_isEqual (@protocol(Foo), (id)objc_getClass("Protocol")))
{
abort ();
}
return self;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
-#import "../../objc-obj-c++-shared/next-mapping.h"
+#import "../../objc-obj-c++-shared/runtime.h"
#import <objc/objc.h>
/* Test that instance methods of root classes are available as class
{
return self;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
@interface NormalClass : RootClass
int main (void)
{
- Class normal = objc_get_class ("NormalClass");
+ Class normal = objc_getClass ("NormalClass");
if (normal == Nil)
{
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <objc/objc.h>
-#include <objc/objc-api.h>
-#include <objc/Object.h>
+#include "../../objc-obj-c++-shared/runtime.h"
+#include "../../objc-obj-c++-shared/TestsuiteObject.m"
int main (void)
{
char *selname;
selector = @selector (alloc);
-#ifdef __NEXT_RUNTIME__
selname = sel_getName (selector);
-#else
- selname = sel_get_name (selector);
-#endif
if (strcmp (selname, "alloc"))
abort ();
return test;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
int main (void)
return test ();
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
int main (void)
-#import "../../objc-obj-c++-shared/Object1.h"
+#import "../../objc-obj-c++-shared/TestsuiteObject.m"
int main(void)
{
- [Object class];
+ [TestsuiteObject class];
return 0;
}
-#import "../../objc-obj-c++-shared/Object1-implementation.h"
/* Contributed by Nicola Pero - Thu Mar 8 16:27:46 CET 2001 */
#include <objc/objc.h>
-#include <objc/objc-api.h>
#include <stdarg.h>
/* Test method with variable number of arguments */
return sum;
}
-#ifdef __NEXT_RUNTIME__
+ initialize { return self; }
-#endif
@end
int main (void)