Yume
src
yume
ty
compatibility.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include "
util.hpp
"
4
#include <cstdint>
5
#include <sstream>
6
7
namespace
yume::ty
{
8
class
Generic;
9
class
BaseType;
10
11
struct
Conv
{
12
enum struct
Kind
: uint8_t {
None
,
Int
, FnPtr, Virtual };
13
using
enum
Kind
;
14
15
bool
dereference
=
false
;
16
Kind
kind
{};
17
18
[[nodiscard]]
constexpr
auto
empty
() const ->
bool
{
return
!
dereference
&&
kind
==
None
; }
19
20
[[nodiscard]]
auto
to_string
() const ->
string
{
21
if
(
empty
())
22
return
"noconv"
;
23
24
stringstream ss;
25
if
(
dereference
)
26
ss <<
"deref "
;
27
if
(
kind
==
Int
)
28
ss <<
"int "
;
29
else
if
(
kind
== FnPtr)
30
ss <<
"fnptr "
;
31
else
if
(
kind
== Virtual)
32
ss <<
"virtual "
;
33
return
ss.str();
34
}
35
};
36
37
/// The compatibility between two types, for overload selection.
38
struct
Compat
{
39
bool
valid
=
false
;
40
Conv
conv
{};
41
};
42
}
// namespace yume::ty
yume::ty::Int
A built-in integral type, such as I32 or Bool.
Definition:
type.hpp:35
yume::ty
Definition:
compiler.hpp:38
yume::ty::Compat
The compatibility between two types, for overload selection.
Definition:
compatibility.hpp:38
yume::ty::Compat::valid
bool valid
Definition:
compatibility.hpp:39
yume::ty::Compat::conv
Conv conv
Definition:
compatibility.hpp:40
yume::ty::Conv
Definition:
compatibility.hpp:11
yume::ty::Conv::empty
constexpr auto empty() const -> bool
Definition:
compatibility.hpp:18
yume::ty::Conv::Kind
Kind
Definition:
compatibility.hpp:12
yume::ty::Conv::to_string
auto to_string() const -> string
Definition:
compatibility.hpp:20
yume::ty::Conv::dereference
bool dereference
Definition:
compatibility.hpp:15
yume::ty::Conv::kind
Kind kind
Definition:
compatibility.hpp:16
util.hpp
CompilerFlags::None
@ None
Generated by
1.9.4