1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; indent-offset: 4 -*- */
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
26 #ifndef __ST_HEAP_OBJECT_H__
27 #define __ST_HEAP_OBJECT_H__
33 /* Each heap object starts with this layout */
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);
67 st_heap_object_class (st_oop_t object
)
69 return ST_POINTER (object
)->klass
;
73 st_heap_object_set_class (st_oop_t object
, st_oop_t klass
)
75 ST_POINTER (object
)->klass
= klass
;
79 st_heap_object_hash (st_oop_t object
)
81 return st_mark_hash (ST_POINTER (object
)->mark
);
85 st_heap_object_mark (st_oop_t object
)
87 return ST_POINTER (object
)->mark
;
91 st_heap_object_set_mark (st_oop_t object
, st_oop_t mark
)
93 ST_POINTER (object
)->mark
= mark
;
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__ */