aboutsummaryrefslogtreecommitdiffstats
path: root/src/backend/targets/C/ast_to_c.h
blob: 7e97f02887e2365147dc38688df07939cc1ec4f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef AST_TO_C_H
#define AST_TO_C_H AST_TO_C_H
#include <stdio.h>
#include <parser.h>
#include <backend.h>
#include <program.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

struct State_And_Transitions;

void ast_to_c(char *output_name,struct AST_Translation_Unit *tree,struct Options *options);

void ast_translation_unit_to_c_print_header_part(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit,struct Options *options);
void ast_translation_unit_to_c_print_body_part(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit,struct Options *options);
void ast_translation_unit_to_c_print_external_part(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit,struct Options *options);

void ast_translation_unit_to_c_print_base_name(FILE *out, char *base_name);
void ast_translation_unit_to_c_print_header_string(FILE *out,char *base_name,char *file_suffix);
void ast_translation_unit_to_c_print_footer_string(FILE *out,char *base_name,char *file_suffix);
void ast_translation_unit_to_c_print_external_commands(FILE *out,char *base_name,struct AST_Translation_Unit *translation_unit);

void ast_translation_unit_to_c(FILE *out,struct AST_Translation_Unit *translation_unit);
void ast_machine_to_c(FILE *out,struct AST_Machine *machine,struct Options *options);
void ast_machine_to_c_make_header_part(FILE *out,struct AST_Machine *machine,struct Options *options);
void ast_machine_to_c_make_body_part(FILE *out,struct AST_Machine *machine,struct Options *options);


void ast_events_to_c(FILE *out,struct AST_Machine *machine,struct Options *options);
void ast_states_to_c(FILE *out,struct AST_Machine *machine,struct Options *options);

void ast_command_to_c(FILE *out,struct AST_Command *command,char *hold_buffer);

/*note the ordering of parameters*/
void ast_command_to_c_extern_declaration(struct AST_Command *command,FILE *out);

void ast_pipeline_to_c(FILE *out,size_t indentation,struct AST_Pipeline *pipeline);

void ast_transitions_of_state_to_c(FILE *out,struct AST_Machine *machine,struct State_And_Transitions *vector,struct Options *options);
void ast_token_to_c(FILE *out,struct token *token);
void ast_machine_enum_tag(FILE *out,struct AST_Machine *machine);
void ast_state_to_c_signature(FILE *out,struct AST_Machine *machine,struct AST_State *state,struct Options *options);
void ast_state_to_c_function_name(FILE *out,struct AST_Machine *machine,struct AST_State *state);
void ast_machines_to_c_array(FILE *out,struct AST_Translation_Unit *translation_unit,struct Options *options,short indent);
void ast_machines_to_c_enum(FILE *out,struct AST_Translation_Unit *translation_unit);
void ast_event_to_c_enum(FILE *out,struct AST_Machine *machine,struct AST_Event *event);

void ast_statement_to_c(FILE *out,size_t indentation,struct AST *statement,struct Options *options);
void ast_if_to_c(FILE *out,size_t indentation,struct AST_If_Statement *statement,struct Options *options);
void ast_expression_to_c(FILE *out,struct AST *expression,struct Options *options);
void ast_expression_state_to_c(FILE *out,struct AST_State *state,struct Options *options);

void ast_to_c_print_internal_stuff_for_header(FILE *out,struct AST_Translation_Unit *translation_unit,struct Options *options);
void ast_to_c_print_internal_stuff_for_body(FILE *out,struct AST_Translation_Unit *translation_unit,struct Options *options);
void ast_to_c_print_comment(FILE *out,char *comment);


void ast_to_c_print_event_struct_queue_declaration(FILE *out,struct Options *options);
void ast_to_c_print_event_functions_queue_declaration(FILE *out,struct Options *options);
void ast_to_c_print_event_queue_definition(FILE *out,struct Options *options);

void ast_print_machine_buffer_declarations(FILE *out);
void ast_print_machine_buffer_definitions(FILE *out);

/* :X */
void ast_to_c_print_tabs(FILE *out,size_t number_of_tabs);

#endif