Cthulhu  0.2.10
Cthulhu compiler collection
c89.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include "common.h"
7 
8 typedef struct io_t io_t;
9 
10 typedef struct c89_source_t
11 {
12  io_t *io;
13  const char *path;
14 } c89_source_t;
15 
16 typedef struct c89_emit_t
17 {
19 
21 
22  map_t *modmap; // map<ssa_symbol, ssa_module>
23 
24  map_t *srcmap; // map<ssa_module, c89_source>
25  map_t *hdrmap; // map<ssa_module, c89_source>
26 
27  // file pair when layout is eLayoutFilePair
30 
32 
33  map_t *stepmap; // map<ssa_step, c89_source>
34 
35  set_t *defined; // set<ssa_type>
36 
37  fs_t *fs;
41 } c89_emit_t;
42 
46 
47 typedef enum type_format_t {
49  eFormatEmitConst = 1 << 0,
50 
51  // TODO: this is a bit of a hack to always emit const types
52  // when an object has const storage, ideally c89_format_type should accept
53  // storage or c89_format_storage should be more generic.
54  eFormatIsConst = 1 << 1,
56 
57 const char *c89_format_type(c89_emit_t *emit, const ssa_type_t *type, const char *name, type_format_t flags);
58 const char *c89_format_params(c89_emit_t *emit, typevec_t *params, bool variadic);
59 const char *c89_printf_specifier(digit_t digit, sign_t sign);
60 
61 const char *c89_format_storage(c89_emit_t *emit, ssa_storage_t storage, const char *name, type_format_t flags);
62 
65 
66 io_t *c89_get_header_io(c89_emit_t *emit, const ssa_module_t *mod);
67 io_t *c89_get_source_io(c89_emit_t *emit, const ssa_module_t *mod);
68 
72 
73 void c89_proto_type(c89_emit_t *emit, io_t *io, const ssa_type_t *type);
74 void c89_proto_global(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *global);
75 void c89_proto_function(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *symbol);
76 
80 
81 void c89_define_type(c89_emit_t *emit, io_t *io, const ssa_type_t *type);
82 void c89_define_global(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *symbol);
83 void c89_define_function(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *symbol);
io_t * c89_get_source_io(c89_emit_t *emit, const ssa_module_t *mod)
Definition: emit.c:109
c89_source_t * c89_get_source(c89_emit_t *emit, const ssa_module_t *mod)
Definition: emit.c:81
c89_source_t * c89_get_header(c89_emit_t *emit, const ssa_module_t *mod)
Definition: emit.c:92
io_t * c89_get_header_io(c89_emit_t *emit, const ssa_module_t *mod)
Definition: emit.c:103
const char * c89_format_type(c89_emit_t *emit, const ssa_type_t *type, const char *name, type_format_t flags)
Definition: type.c:97
void c89_define_type(c89_emit_t *emit, io_t *io, const ssa_type_t *type)
Definition: emit.c:946
void c89_proto_global(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *global)
Definition: emit.c:390
type_format_t
Definition: c89.h:47
@ eFormatEmitConst
Definition: c89.h:49
@ eFormatIsConst
Definition: c89.h:54
@ eFormatEmitNone
Definition: c89.h:48
const char * c89_printf_specifier(digit_t digit, sign_t sign)
void c89_proto_type(c89_emit_t *emit, io_t *io, const ssa_type_t *type)
Definition: emit.c:361
void c89_proto_function(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *symbol)
Definition: emit.c:408
void c89_define_function(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *symbol)
Definition: emit.c:1020
void c89_define_global(c89_emit_t *emit, const ssa_module_t *mod, const ssa_symbol_t *symbol)
Definition: emit.c:977
const char * c89_format_storage(c89_emit_t *emit, ssa_storage_t storage, const char *name, type_format_t flags)
Definition: type.c:136
const char * c89_format_params(c89_emit_t *emit, typevec_t *params, bool variadic)
Definition: type.c:142
file_layout_t
output folder structure
Definition: broker.h:91
sign_t
integer sign
Definition: ops.h:104
digit_t
digit width
Definition: ops.h:96
an allocator object
Definition: arena.h:86
Definition: c89.h:17
map_t * modmap
Definition: c89.h:22
map_t * deps
Definition: c89.h:38
set_t * defined
Definition: c89.h:35
map_t * srcmap
Definition: c89.h:24
vector_t * sources
Definition: c89.h:39
const ssa_symbol_t * current
Definition: c89.h:31
emit_t emit
Definition: c89.h:20
arena_t * arena
Definition: c89.h:18
map_t * stepmap
Definition: c89.h:33
c89_source_t * header
Definition: c89.h:29
map_t * hdrmap
Definition: c89.h:25
fs_t * fs
Definition: c89.h:37
file_layout_t layout
Definition: c89.h:40
c89_source_t * source
Definition: c89.h:28
io_t * io
Definition: c89.h:12
const char * path
Definition: c89.h:13
target code emitter options
Definition: common.h:16
Definition: common.h:72
io object implementation
Definition: impl.h:122
an unordered hash map
Definition: map.h:38
an unordered hash set
Definition: set.c:19
ssa underlying storage type
Definition: ssa.h:78
A vector with a fixed type size.
Definition: vector.h:24
a generic vector of pointers
Definition: vector.c:16