CACAO
Type.hpp
Go to the documentation of this file.
1 /* src/vm/jit/compiler2/Type.hpp - Types used in the 2nd stage compiler IR
2 
3  Copyright (C) 2013
4  CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 
6  This file is part of CACAO.
7 
8  This program is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License as
10  published by the Free Software Foundation; either version 2, or (at
11  your option) any later version.
12 
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 
23 */
24 
25 #ifndef _JIT_COMPILER2_TYPE
26 #define _JIT_COMPILER2_TYPE
27 
28 #include "vm/method.hpp"
29 
30 namespace cacao {
31 namespace jit {
32 namespace compiler2 {
33 
34 class PrimitiveType;
35 class ReferenceType;
36 class NumericType;
37 class BooleanType;
38 class ReturnAddressType;
39 class IntegralType;
40 class FloatingPointType;
41 class ByteType;
42 class ShortType;
43 class IntType;
44 class LongType;
45 class CharType;
46 class FloatType;
47 class DoubleType;
48 class VoidType;
49 
50 /**
51  * Type Class
52  *
53  * See JVM spec 2.2
54  */
55 class Type {
56 public:
57  enum TypeID {
74  };
75 
76  struct PrimitiveType {
77  operator Type::TypeID() { return PrimitiveTypeID; }
78  };
79  struct ReferenceType {
80  operator Type::TypeID() { return ReferenceTypeID; }
81  };
82  struct NumericType {
83  operator Type::TypeID() { return NumericTypeID; }
84  };
85  struct BooleanType {
86  operator Type::TypeID() { return BooleanTypeID; }
87  };
89  operator Type::TypeID() { return ReturnAddressTypeID; }
90  };
91  struct IntegralType {
92  operator Type::TypeID() { return IntegralTypeID; }
93  };
95  operator Type::TypeID() { return FloatingPointTypeID; }
96  };
97  struct ByteType {
98  operator Type::TypeID() { return ByteTypeID; }
99  };
100  struct ShortType {
101  operator Type::TypeID() { return ShortTypeID; }
102  };
103  struct IntType {
104  operator Type::TypeID() { return IntTypeID; }
105  };
106  struct LongType {
107  operator Type::TypeID() { return LongTypeID; }
108  };
109  struct CharType {
110  operator Type::TypeID() { return CharTypeID; }
111  };
112  struct FloatType {
113  operator Type::TypeID() { return FloatTypeID; }
114  };
115  struct DoubleType {
116  operator Type::TypeID() { return DoubleTypeID; }
117  };
119  operator Type::TypeID() { return GlobalStateTypeID; }
120  };
121  struct VoidType {
122  operator Type::TypeID() { return VoidTypeID; }
123  };
124 };
125 
126 /// Get the printable name of the @p type.
127 ///
128 /// @param type One of the ::Type enum values (as defined in vm/global.hpp).
129 ///
130 /// @return The printable name of @p type
131 const char *get_type_name(int type);
132 
133 /// Convert a ::Type to a Type::TypeID.
134 ///
135 /// @param type One of the ::Type enum values (as defined in vm/global.hpp).
136 ///
137 /// @return The Type::TypeID that corresponds to @p type.
139 
140 /// Convert a Type::TypeID to a ::Type.
141 ///
142 /// @param id The Type::TypeID to convert.
143 ///
144 /// @return The ::Type enum value (as defined in vm/global.hpp) that corresponds
145 /// to @p id.
147 
148 OStream& operator<<(OStream &OS, const Type::TypeID &type);
149 
150 } // end namespace cacao
151 } // end namespace jit
152 } // end namespace compiler2
153 
154 #endif /* _JIT_COMPILER2_TYPE */
155 
156 
157 /*
158  * These are local overrides for various environment variables in Emacs.
159  * Please do not remove this and leave it at the end of the file, where
160  * Emacs will automagically detect them.
161  * ---------------------------------------------------------------------
162  * Local variables:
163  * mode: c++
164  * indent-tabs-mode: t
165  * c-basic-offset: 4
166  * tab-width: 4
167  * End:
168  * vim:noexpandtab:sw=4:ts=4:
169  */
PrimitiveType
JVM types.
Definition: primitive.hpp:55
Simple stream class for formatted output.
Definition: OStream.hpp:141
OStream & operator<<(OStream &OS, const Conditional::CondID &cond)
Definition: Conditional.cpp:34
Type::TypeID convert_to_typeid(int type)
Convert a Type to a Type::TypeID.
Definition: Type.cpp:51
OStream & OS
int convert_to_type(Type::TypeID type)
Convert a Type::TypeID to a Type.
Definition: Type.cpp:69
const char * get_type_name(int type)
Get the printable name of the type.
Definition: Type.cpp:37