78 lines
1.7 KiB
C
78 lines
1.7 KiB
C
#ifndef CODEGEN_H
|
|
#define CODEGEN_H
|
|
|
|
#include "../aliases.h"
|
|
#include "../mem_arena/arena.h"
|
|
#include <stdio.h>
|
|
|
|
typedef enum {
|
|
INCLUDE_TYPE_SYSTEM,
|
|
INCLUDE_TYPE_USER,
|
|
COUNT_INCLUDE_TYPES,
|
|
} include_type;
|
|
|
|
typedef struct {
|
|
include_type type;
|
|
const char *header;
|
|
} include_header_t;
|
|
|
|
typedef struct {
|
|
const char *name;
|
|
char short_name;
|
|
char printf_spec;
|
|
} type_info_t;
|
|
|
|
typedef struct identifier_s identifier_t;
|
|
|
|
typedef struct {
|
|
const char *name;
|
|
u64 mem_count;
|
|
identifier_t *members;
|
|
} struct_def_t;
|
|
|
|
typedef enum {
|
|
DATA_TYPE_NORMAL,
|
|
DATA_TYPE_STRUCT,
|
|
COUNT_DATA_TYPE,
|
|
} data_type;
|
|
|
|
typedef struct {
|
|
data_type type;
|
|
union {
|
|
type_info_t type_info;
|
|
struct_def_t struct_def;
|
|
};
|
|
} data_type_t;
|
|
|
|
struct identifier_s {
|
|
data_type_t type;
|
|
const char *name;
|
|
};
|
|
|
|
typedef struct {
|
|
data_type_t ret_type;
|
|
const char *name;
|
|
identifier_t *args;
|
|
const char *body;
|
|
} func_t;
|
|
|
|
typedef struct {
|
|
const char *base_name;
|
|
u64 arg_count;
|
|
const char **arg_names;
|
|
func_t func;
|
|
} func_data_t;
|
|
|
|
void write_header_guard_open(arena_t *arena, FILE *fp, const char *header_id);
|
|
void write_header_guard_close(arena_t *arena, FILE *fp, const char *header_id);
|
|
void write_include(arena_t *arena, FILE *fp, const include_header_t *header);
|
|
void write_data_type(char *dst, const data_type_t *data_type);
|
|
void write_identifier(char *dst, const identifier_t *identifier);
|
|
void write_struct(arena_t *arena, FILE *fp, const struct_def_t *struct_def);
|
|
void write_func_prototype(char *dst, const func_data_t *func);
|
|
void write_func_declaration(arena_t *arena, FILE *fp, const func_data_t *func);
|
|
void write_func_defintion(arena_t *arena, FILE *fp, const func_data_t *func);
|
|
void write_macro_func(arena_t *arena, FILE *fp, const func_data_t *func);
|
|
|
|
#endif // !CODEGEN_H
|