Cthulhu  0.2.10
Cthulhu compiler collection
common.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include "core/text.h"
6 #include "cthulhu/ssa/ssa.h"
7 
11 
12 ssa_type_t *ssa_type_new(ssa_kind_t kind, const char *name, tree_quals_t quals);
13 
14 ssa_type_t *ssa_type_empty(const char *name, tree_quals_t quals);
15 ssa_type_t *ssa_type_unit(const char *name, tree_quals_t quals);
16 ssa_type_t *ssa_type_closure(const char *name, tree_quals_t quals, ssa_type_t *result, typevec_t *params, bool variadic);
17 ssa_type_t *ssa_type_array(const char *name, tree_quals_t quals, ssa_type_t *element, size_t length);
18 ssa_type_t *ssa_type_struct(const char *name, tree_quals_t quals, typevec_t *fields);
19 ssa_type_t *ssa_type_union(const char *name, tree_quals_t quals, typevec_t *fields);
20 
21 ssa_type_t *ssa_type_create_cached(map_t *cache, const tree_t *type);
22 
24 
28 
31 ssa_value_t *ssa_value_bool(const ssa_type_t *type, bool value);
32 ssa_value_t *ssa_value_digit(const ssa_type_t *type, const mpz_t value);
33 ssa_value_t *ssa_value_char(const ssa_type_t *type, char value);
35 
36 ssa_value_t *ssa_value_from(map_t *types, const tree_t *expr);
38 
41 ssa_value_t *ssa_value_opaque_literal(const ssa_type_t *type, mpz_t value);
42 
46 
ssa_value_t * ssa_value_bool(const ssa_type_t *type, bool value)
Definition: value.c:39
ssa_operand_t operand_value(ssa_value_t *value)
Definition: operand.c:5
ssa_value_t * ssa_value_unit(const ssa_type_t *type)
Definition: value.c:32
ssa_value_t * ssa_value_string(const ssa_type_t *type, text_view_t text)
Definition: value.c:62
ssa_value_t * ssa_value_opaque_literal(const ssa_type_t *type, mpz_t value)
Definition: value.c:120
ssa_type_t * ssa_type_create_cached(map_t *cache, const tree_t *type)
Definition: type.c:226
ssa_value_t * ssa_value_from(map_t *types, const tree_t *expr)
Definition: value.c:87
ssa_type_t * ssa_type_union(const char *name, tree_quals_t quals, typevec_t *fields)
Definition: type.c:88
ssa_type_t * ssa_type_new(ssa_kind_t kind, const char *name, tree_quals_t quals)
Definition: type.c:17
ssa_value_t * ssa_value_relative(const ssa_type_t *type, ssa_relative_value_t value)
Definition: value.c:113
ssa_value_t * ssa_value_empty(const ssa_type_t *type)
Definition: value.c:25
ssa_type_t * ssa_type_empty(const char *name, tree_quals_t quals)
Definition: type.c:27
ssa_value_t * ssa_value_literal(const ssa_type_t *type, ssa_literal_value_t value)
Definition: value.c:106
ssa_value_t * ssa_value_char(const ssa_type_t *type, char value)
Definition: value.c:54
ssa_type_t * ssa_type_unit(const char *name, tree_quals_t quals)
Definition: type.c:32
ssa_type_t * ssa_type_common(const ssa_type_t *lhs, const ssa_type_t *rhs)
ssa_value_t * ssa_value_digit(const ssa_type_t *type, const mpz_t value)
Definition: value.c:46
ssa_type_t * ssa_type_struct(const char *name, tree_quals_t quals, typevec_t *fields)
Definition: type.c:80
ssa_type_t * ssa_type_closure(const char *name, tree_quals_t quals, ssa_type_t *result, typevec_t *params, bool variadic)
Definition: type.c:50
ssa_type_t * ssa_type_array(const char *name, tree_quals_t quals, ssa_type_t *element, size_t length)
ssa_value_t * ssa_value_noinit(const ssa_type_t *type)
Definition: value.c:101
ssa_kind_t
Definition: ssa.h:40
tree_quals_t
all type qualifiers
Definition: ops.h:25
an unordered hash map
Definition: map.h:38
a non-owning view of text
Definition: text.h:24
Definition: tree.h:67
A vector with a fixed type size.
Definition: vector.h:24