source: trunk/third/gcc/objc/objects.c @ 8834

Revision 8834, 2.5 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r8833, which included commits to RCS files with non-trunk default branches.
Line 
1/* GNU Objective C Runtime class related functions
2   Copyright (C) 1993, 1995 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 "runtime.h"            /* the kitchen sink */
29
30id __objc_object_alloc(Class);
31id __objc_object_dispose(id);
32id __objc_object_copy(id);
33
34id (*_objc_object_alloc)(Class)   = __objc_object_alloc;
35id (*_objc_object_dispose)(id)    = __objc_object_dispose;
36id (*_objc_object_copy)(id)       = __objc_object_copy;
37
38id
39class_create_instance(Class class)
40{
41  id new = nil;
42  if (CLS_ISCLASS(class))
43    new = (*_objc_object_alloc)(class);
44  if (new!=nil)
45    {
46      memset (new, 0, class->instance_size);
47      new->class_pointer = class;
48    }
49  return new;
50}
51
52id
53object_copy(id object)
54{
55  if ((object!=nil)&&CLS_ISCLASS(object->class_pointer))
56    return (*_objc_object_copy)(object);
57  else
58    return nil;
59}
60
61id
62object_dispose(id object)
63{
64  if ((object!=nil)&&CLS_ISCLASS(object->class_pointer))
65    {
66      if (_objc_object_dispose)
67        (*_objc_object_dispose)(object);
68      else
69        free(object);
70    }
71  return nil;
72}
73
74id __objc_object_alloc(Class class)
75{
76  return (id)__objc_xmalloc(class->instance_size);
77}
78
79id __objc_object_dispose(id object)
80{
81  free(object);
82  return 0;
83}
84
85id __objc_object_copy(id object)
86{
87  id copy = class_create_instance(object->class_pointer);
88  memcpy(copy, object, object->class_pointer->instance_size);
89  return copy;
90}
91
92
Note: See TracBrowser for help on using the repository browser.