1 /* 2 * HeapObject.h - 3 * 4 * Copyright (c) 2008 Higepon(Taro Minowa) <higepon@users.sourceforge.jp> 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 23 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * 29 * $Id: HeapObject.h 261 2008-07-25 06:16:44Z higepon $ 30 */ 31 32 #ifndef SCHEME_HEAP_OBJECT_ 33 #define SCHEME_HEAP_OBJECT_ 34 35 #include "scheme.h" 36 37 namespace scheme { 38 39 class HeapObject EXTEND_GC 40 { 41 template <int N> 42 class Type 43 { 44 public: 45 static const int VALUE = ((N << 2) | 0x03); 46 }; 47 48 public: HeapObject(intptr_t type,intptr_t obj)49 HeapObject(intptr_t type, intptr_t obj) : type(type), obj(obj) {} ~HeapObject()50 ~HeapObject() {} // not virtual 51 intptr_t type; 52 intptr_t obj; 53 enum { 54 Vector = Type<0>::VALUE, 55 String = Type<1>::VALUE, 56 Symbol = Type<2>::VALUE, 57 Closure = Type<4>::VALUE, 58 Stack = Type<5>::VALUE, 59 EqHashTable = Type<6>::VALUE, 60 CProcedure = Type<7>::VALUE, 61 Box = Type<8>::VALUE, 62 ByteVector = Type<9>::VALUE, 63 TextualInputPort = Type<10>::VALUE, 64 Regexp = Type<11>::VALUE, 65 RegMatch = Type<12>::VALUE, 66 TextualOutputPort = Type<13>::VALUE, 67 BinaryInputPort = Type<14>::VALUE, 68 BinaryOutputPort = Type<15>::VALUE, 69 Codec = Type<16>::VALUE, 70 Transcoder = Type<17>::VALUE, 71 CodeBuilder = Type<20>::VALUE, 72 GenericHashTable = Type<21>::VALUE, 73 EqvHashTable = Type<22>::VALUE, 74 Callable = Type<23>::VALUE, 75 Record = Type<24>::VALUE, // not used 76 RecordTypeDescriptor = Type<25>::VALUE, // not used 77 RecordConstructorDescriptor = Type<26>::VALUE, // not used 78 CompoundCondition = Type<27>::VALUE, // not used 79 ObjectPointer = Type<28>::VALUE, // used only debug mode 80 Ratnum = Type<29>::VALUE, 81 Flonum = Type<30>::VALUE, 82 Bignum = Type<31>::VALUE, 83 Compnum = Type<32>::VALUE, 84 Gloc = Type<33>::VALUE, 85 BinaryInputOutputPort = Type<34>::VALUE, 86 TextualInputOutputPort = Type<35>::VALUE, 87 Socket = Type<36>::VALUE, 88 VM = Type<37>::VALUE, 89 ConditionVariable = Type<38>::VALUE, 90 Mutex = Type<39>::VALUE, 91 Pointer = Type<40>::VALUE, 92 SimpleStruct = Type<41>::VALUE, 93 Continuation = Type<42>::VALUE, 94 SharedReference = Type<43>::VALUE, 95 forbidden_comma 96 }; 97 }; 98 99 } // namespace scheme 100 101 #endif // SCHEME_HEAP_OBJECT_ 102