initial import
[panda.git] / goo / st-heap-object.h
blobf8f50f30f9613fbcb199dae6a9c5c48371a411fd
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; indent-offset: 4 -*- */
2 /*
3 * st-heap-object.h
5 * Copyright (C) 2008 Vincent Geddes
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 * THE SOFTWARE.
26 #ifndef __ST_HEAP_OBJECT_H__
27 #define __ST_HEAP_OBJECT_H__
29 #include <st-types.h>
30 #include <st-mini.h>
31 #include <st-mark.h>
33 /* Each heap object starts with this layout */
35 typedef struct
37 st_oop_t mark;
38 st_oop_t klass;
40 } st_header_t;
42 typedef struct
44 st_oop_t mark;
45 st_oop_t klass;
47 st_oop_t instvars[];
48 } st_heap_object_t;
51 INLINE st_oop_t st_heap_object_class (st_oop_t object);
53 INLINE void st_heap_object_set_class (st_oop_t object, st_oop_t klass);
55 INLINE int st_heap_object_hash (st_oop_t object);
57 INLINE st_oop_t st_heap_object_mark (st_oop_t object);
59 INLINE void st_heap_object_set_mark (st_oop_t object, st_oop_t mark);
61 INLINE st_oop_t *st_heap_object_instvars (st_oop_t object);
63 st_vtable_t *st_heap_object_vtable (void);
66 INLINE st_oop_t
67 st_heap_object_class (st_oop_t object)
69 return ST_POINTER (object)->klass;
72 INLINE void
73 st_heap_object_set_class (st_oop_t object, st_oop_t klass)
75 ST_POINTER (object)->klass = klass;
78 INLINE int
79 st_heap_object_hash (st_oop_t object)
81 return st_mark_hash (ST_POINTER (object)->mark);
84 INLINE st_oop_t
85 st_heap_object_mark (st_oop_t object)
87 return ST_POINTER (object)->mark;
90 INLINE void
91 st_heap_object_set_mark (st_oop_t object, st_oop_t mark)
93 ST_POINTER (object)->mark = mark;
96 INLINE
97 st_oop_t *st_heap_object_instvars (st_oop_t object)
99 return ((st_heap_object_t *) ST_POINTER (object))->instvars;
102 #endif /* __ST_HEAP_OBJECT_H__ */