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 const char* get_type_name(const Type::TypeID &type);
127 
128 // conversion functions
129 const char * get_var_type(int type);
131 
132 OStream& operator<<(OStream &OS, const Type::TypeID &type);
133 
134 } // end namespace cacao
135 } // end namespace jit
136 } // end namespace compiler2
137 
138 #endif /* _JIT_COMPILER2_TYPE */
139 
140 
141 /*
142  * These are local overrides for various environment variables in Emacs.
143  * Please do not remove this and leave it at the end of the file, where
144  * Emacs will automagically detect them.
145  * ---------------------------------------------------------------------
146  * Local variables:
147  * mode: c++
148  * indent-tabs-mode: t
149  * c-basic-offset: 4
150  * tab-width: 4
151  * End:
152  * vim:noexpandtab:sw=4:ts=4:
153  */
const char * get_type_name(const Type::TypeID &type)
Definition: Type.cpp:91
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
OStream & OS
Type::TypeID convert_var_type(int type)
Definition: Type.cpp:51
const char * get_var_type(int type)
Definition: Type.cpp:37