1/* GNU Objective C Runtime class related functions 2 Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. 3 Contributed by Kresten Krab Thorup 4 5This file is part of GNU CC. 6 7GNU CC is free software; you can redistribute it and/or modify it under the 8terms of the GNU General Public License as published by the Free Software 9Foundation; either version 2, or (at your option) any later version. 10 11GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY 12WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 13FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 14details. 15 16You should have received a copy of the GNU General Public License along with 17GNU CC; see the file COPYING. If not, write to the Free Software 18Foundation, 59 Temple Place - Suite 330, 19Boston, MA 02111-1307, USA. */ 20 21/* As a special exception, if you link this library with files compiled with 22 GCC to produce an executable, this does not cause the resulting executable 23 to be covered by the GNU General Public License. This exception does not 24 however invalidate any other reasons why the executable file might be 25 covered by the GNU General Public License. */ 26 27#include "tconfig.h" /* include defs of bzero for target */ 28#include "objc.h" 29#include "runtime.h" /* the kitchen sink */ 30 31#if OBJC_WITH_GC 32# include <gc.h> 33#endif 34 35id __objc_object_alloc(Class); 36id __objc_object_dispose(id); 37id __objc_object_copy(id); 38 39id (*_objc_object_alloc)(Class) = __objc_object_alloc; /* !T:SINGLE */ 40id (*_objc_object_dispose)(id) = __objc_object_dispose; /* !T:SINGLE */ 41id (*_objc_object_copy)(id) = __objc_object_copy; /* !T:SINGLE */ 42 43id 44class_create_instance(Class class) 45{ 46 id new = nil; 47 48#if OBJC_WITH_GC 49 if (CLS_ISCLASS(class)) 50 new = (id)GC_malloc_explicitly_typed (class->instance_size, 51 class->gc_object_type); 52#else 53 if (CLS_ISCLASS(class)) 54 new = (*_objc_object_alloc)(class); 55#endif 56 57 if (new!=nil) 58 { 59 memset (new, 0, class->instance_size); 60 new->class_pointer = class; 61 } 62 return new; 63} 64 65id 66object_copy(id object) 67{ 68 if ((object!=nil)&&CLS_ISCLASS(object->class_pointer)) 69 return (*_objc_object_copy)(object); 70 else 71 return nil; 72} 73 74id 75object_dispose(id object) 76{ 77 if ((object!=nil)&&CLS_ISCLASS(object->class_pointer)) 78 { 79 if (_objc_object_dispose) 80 (*_objc_object_dispose)(object); 81 else 82 objc_free(object); 83 } 84 return nil; 85} 86 87id __objc_object_alloc(Class class) 88{ 89 return (id)objc_malloc(class->instance_size); 90} 91 92id __objc_object_dispose(id object) 93{ 94 objc_free(object); 95 return 0; 96} 97 98id __objc_object_copy(id object) 99{ 100 id copy = class_create_instance(object->class_pointer); 101 memcpy(copy, object, object->class_pointer->instance_size); 102 return copy; 103} 104 105 106