aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc/objects.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/objc/objects.c')
-rw-r--r--gcc/objc/objects.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/objc/objects.c b/gcc/objc/objects.c
index 3e68334..d079c5d 100644
--- a/gcc/objc/objects.c
+++ b/gcc/objc/objects.c
@@ -25,8 +25,13 @@ Boston, MA 02111-1307, USA. */
covered by the GNU General Public License. */
#include "../tconfig.h" /* include defs of bzero for target */
+#include "objc.h"
#include "runtime.h" /* the kitchen sink */
+#if OBJC_WITH_GC
+# include <gc.h>
+#endif
+
id __objc_object_alloc(Class);
id __objc_object_dispose(id);
id __objc_object_copy(id);
@@ -39,8 +44,16 @@ id
class_create_instance(Class class)
{
id new = nil;
+
+#if OBJC_WITH_GC
+ if (CLS_ISCLASS(class))
+ new = (id)GC_malloc_explicitly_typed (class->instance_size,
+ class->gc_object_type);
+#else
if (CLS_ISCLASS(class))
new = (*_objc_object_alloc)(class);
+#endif
+
if (new!=nil)
{
memset (new, 0, class->instance_size);