|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Public Member Functions | |
| Emitter (const Compiler_C_Backend_Options &options_in, const Compiler_IR_Module &module_in, const Compiler_Type_Context *types_in) | |
| Builds an emitter over one module and one option set. | |
| Compiler_C_Backend_Emission | run () |
| Emits the full C translation unit. | |
Private Attributes | |
| const Compiler_C_Backend_Options * | options_ = nullptr |
| const Compiler_IR_Module * | module_ = nullptr |
| const Compiler_Type_Context * | types_ = nullptr |
| Compiler_C_Backend_Emission | emission_ |
| Symbol_Names | names_ |
Definition at line 273 of file Compiler_Backend_C.H.
|
inline |
Builds an emitter over one module and one option set.
Definition at line 1237 of file Compiler_Backend_C.H.
References initialize_symbols().
|
inlineprivate |
Definition at line 383 of file Compiler_Backend_C.H.
References Aleph::and, Aleph::blossom_maximum_cardinality_matching(), Aleph::error(), Aleph::Compiler_C_Backend::Symbol_Names::make_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_char_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_int_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_string_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_unit_symbol, names_, and Aleph::Compiler_Backend_C_Detail::parse_integer_literal().
Referenced by emit_instruction().
|
inlineprivate |
Definition at line 1184 of file Compiler_Backend_C.H.
References emit_function_body(), function_symbol(), Aleph::Compiler_IR_Module::functions, module_, and out.
Referenced by run().
|
inlineprivate |
Definition at line 1146 of file Compiler_Backend_C.H.
References Aleph::Compiler_Backend_C_Detail::block_label(), Aleph::Compiler_IR_Function::blocks, Aleph::blossom_maximum_cardinality_matching(), Aleph::Compiler_C_Backend_Options::emit_comments, emit_function_signature(), emit_instruction(), emit_parameter_bindings(), emit_slot_declarations(), emit_terminator(), emit_value_declarations(), Aleph::Compiler_IR_Function::entry_block, Aleph::Compiler_SSA_Block::id, Aleph::Compiler_SSA_Block::instructions, Aleph::Compiler_SSA_Block::label, Aleph::Compiler_IR_Function::name, names_, options_, out, Aleph::Compiler_C_Backend::Symbol_Names::prefix, Aleph::Compiler_Backend_C_Detail::safe_comment_text(), type_comment(), and Aleph::Compiler_IR_Function::type_id.
Referenced by emit_function(), and emit_top_level().
|
inlineprivate |
Definition at line 1194 of file Compiler_Backend_C.H.
References Aleph::Compiler_Backend_C_Detail::c_string_literal(), Aleph::Compiler_Backend_C_Detail::count_parameters(), function_descriptor_symbol(), function_symbol(), Aleph::Compiler_C_Backend::Symbol_Names::function_type_name, Aleph::Compiler_IR_Module::functions, module_, names_, and out.
Referenced by run().
|
inlineprivate |
Definition at line 744 of file Compiler_Backend_C.H.
References Aleph::Compiler_Backend_C_Detail::indent(), Aleph::Compiler_C_Backend::Symbol_Names::module_struct_name, names_, out, and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by emit_function_body().
|
inlineprivate |
Definition at line 827 of file Compiler_Backend_C.H.
References Aleph::Amp, Aleph::AndAnd, Aleph::Bang, Aleph::Binary, Aleph::blossom_maximum_cardinality_matching(), Aleph::Compiler_Backend_C_Detail::c_string_literal(), Aleph::Call, Aleph::Compiler_C_Backend::Symbol_Names::call_symbol, Aleph::Caret, Aleph::compiler_ir_invalid_id(), Aleph::Constant, emit_constant_expression(), emit_instruction_comment(), Aleph::EqEq, Aleph::Compiler_C_Backend::Symbol_Names::equal_symbol, Aleph::error(), fail(), function_descriptor_symbol(), Aleph::Function_Ref, Aleph::Compiler_Backend_C_Detail::global_name(), Aleph::Greater, Aleph::GreaterEq, Aleph::Less, Aleph::LessEq, Aleph::Load, Aleph::Compiler_Backend_C_Detail::local_name(), Aleph::Compiler_C_Backend::Symbol_Names::make_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_function_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_int_symbol, Aleph::message(), Aleph::Minus, names_, Aleph::NotEq, Aleph::OrOr, out, Aleph::Compiler_C_Backend::Symbol_Names::panic_symbol, Aleph::Percent, Aleph::Pipe, Aleph::Plus, Aleph::Compiler_C_Backend::Symbol_Names::require_assigned_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_int_symbol, Aleph::Slash, Aleph::Star, Aleph::Store, Aleph::Tilde, Aleph::Compiler_Backend_C_Detail::token_name(), Aleph::Unary, value, Aleph::Compiler_Backend_C_Detail::value_name(), and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by emit_function_body().
|
inlineprivate |
Definition at line 808 of file Compiler_Backend_C.H.
References Aleph::Binary, Aleph::blossom_maximum_cardinality_matching(), Aleph::compiler_ir_instruction_kind_name(), Aleph::Constant, Aleph::Compiler_C_Backend_Options::emit_comments, Aleph::Function_Ref, options_, out, Aleph::Compiler_Backend_C_Detail::safe_comment_text(), Aleph::Compiler_Backend_C_Detail::token_name(), Aleph::Unary, and Aleph::Compiler_Backend_C_Detail::value_name().
Referenced by emit_instruction().
|
inlineprivate |
Definition at line 1209 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Compiler_C_Backend::Symbol_Names::dump_globals_symbol, Aleph::Compiler_C_Backend_Options::emit_main, module_, Aleph::Compiler_C_Backend::Symbol_Names::module_init_symbol, Aleph::Compiler_C_Backend::Symbol_Names::module_struct_name, names_, options_, out, Aleph::Compiler_C_Backend::Symbol_Names::print_value_symbol, Aleph::Compiler_IR_Module::top_level, Aleph::Compiler_C_Backend::Symbol_Names::top_level_symbol, Aleph::Compiler_C_Backend::Symbol_Names::value_type_name, and warn().
Referenced by run().
|
inlineprivate |
Definition at line 680 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Compiler_C_Backend::Symbol_Names::dump_globals_symbol, Aleph::Compiler_IR_Module::global_slots, Aleph::Compiler_Backend_C_Detail::indent(), Aleph::Compiler_C_Backend::Symbol_Names::make_invalid_symbol, module_, Aleph::Compiler_C_Backend::Symbol_Names::module_init_symbol, Aleph::Compiler_C_Backend::Symbol_Names::module_struct_name, names_, out, Aleph::Compiler_C_Backend::Symbol_Names::print_value_symbol, Aleph::Compiler_Backend_C_Detail::safe_comment_text(), Aleph::Compiler_C_Backend::Symbol_Names::upper_prefix, and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by run().
|
inlineprivate |
Definition at line 782 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Compiler_Backend_C_Detail::count_parameters(), Aleph::Compiler_Backend_C_Detail::local_name(), Aleph::Compiler_IR_Function::local_slots, Aleph::Compiler_IR_Function::name, names_, out, Aleph::Parameter, Aleph::Compiler_C_Backend::Symbol_Names::prefix, and Aleph::Compiler_Backend_C_Detail::safe_comment_text().
Referenced by emit_function_body().
|
inlineprivate |
Definition at line 724 of file Compiler_Backend_C.H.
References function_descriptor_symbol(), function_symbol(), Aleph::Compiler_C_Backend::Symbol_Names::function_type_name, Aleph::Compiler_IR_Module::functions, Aleph::Compiler_Backend_C_Detail::indent(), module_, Aleph::Compiler_C_Backend::Symbol_Names::module_struct_name, names_, out, Aleph::size(), Aleph::Compiler_IR_Module::top_level, Aleph::Compiler_C_Backend::Symbol_Names::top_level_symbol, and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by run().
|
inlineprivate |
Definition at line 423 of file Compiler_Backend_C.H.
References Aleph::Compiler_C_Backend::Symbol_Names::call_symbol, Aleph::Compiler_C_Backend::Symbol_Names::equal_symbol, Aleph::Compiler_C_Backend::Symbol_Names::function_pointer_type_name, Aleph::Compiler_C_Backend::Symbol_Names::function_type_name, Aleph::Compiler_Backend_C_Detail::indent(), Aleph::Compiler_C_Backend::Symbol_Names::make_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_char_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_function_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_int_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_invalid_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_string_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_unit_symbol, Aleph::Compiler_C_Backend::Symbol_Names::module_struct_name, names_, out, Aleph::Compiler_C_Backend::Symbol_Names::panic_symbol, Aleph::Compiler_C_Backend::Symbol_Names::prefix, Aleph::Compiler_C_Backend::Symbol_Names::print_value_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_assigned_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_function_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_int_symbol, Aleph::Compiler_C_Backend::Symbol_Names::tag_bool_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_char_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_enum_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_function_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_int_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_invalid_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_name_symbol, Aleph::Compiler_C_Backend::Symbol_Names::tag_string_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_unit_name, and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by run().
|
inlineprivate |
Definition at line 753 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::compiler_ir_slot_kind_name(), Aleph::Compiler_C_Backend_Options::emit_comments, Aleph::Compiler_Backend_C_Detail::local_name(), Aleph::Compiler_IR_Function::local_slots, Aleph::Compiler_C_Backend::Symbol_Names::make_invalid_symbol, names_, options_, out, Aleph::Compiler_Backend_C_Detail::safe_comment_text(), type_comment(), and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by emit_function_body().
|
inlineprivate |
Definition at line 1093 of file Compiler_Backend_C.H.
References Aleph::DynArray< T >::access(), Aleph::Compiler_Backend_C_Detail::block_label(), Aleph::Branch, Aleph::Compiler_Backend_C_Detail::c_string_literal(), Aleph::compiler_ir_terminator_kind_name(), Aleph::Compiler_SSA_Terminator::condition_value, Aleph::Compiler_C_Backend_Options::emit_comments, Aleph::Exit, fail(), Aleph::Compiler_SSA_Block::id, Aleph::Jump, Aleph::Compiler_SSA_Terminator::kind, Aleph::Compiler_C_Backend::Symbol_Names::make_invalid_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_unit_symbol, Aleph::Compiler_IR_Function::name, names_, Aleph::None, options_, out, Aleph::Compiler_C_Backend::Symbol_Names::panic_symbol, Aleph::Compiler_C_Backend::Symbol_Names::prefix, Aleph::Compiler_C_Backend::Symbol_Names::require_assigned_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_bool_symbol, Aleph::Return, Aleph::Compiler_SSA_Terminator::return_value, Aleph::Compiler_SSA_Terminator::successors, Aleph::Compiler_SSA_Block::terminator, Aleph::Unreachable, and Aleph::Compiler_Backend_C_Detail::value_name().
Referenced by emit_function_body().
|
inlineprivate |
Definition at line 1189 of file Compiler_Backend_C.H.
References emit_function_body(), module_, names_, out, Aleph::Compiler_IR_Module::top_level, and Aleph::Compiler_C_Backend::Symbol_Names::top_level_symbol.
Referenced by run().
|
inlineprivate |
Definition at line 774 of file Compiler_Backend_C.H.
References Aleph::Compiler_C_Backend::Symbol_Names::make_invalid_symbol, names_, Aleph::Compiler_IR_Function::next_value_id, out, Aleph::Compiler_Backend_C_Detail::value_name(), and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by emit_function_body().
Definition at line 281 of file Compiler_Backend_C.H.
References Aleph::DynArray< T >::append(), emission_, Aleph::Compiler_C_Backend_Emission::errors, Aleph::message(), and Aleph::Compiler_C_Backend_Emission::valid.
Referenced by emit_instruction(), emit_terminator(), and validate_input().
|
inlineprivate |
Definition at line 378 of file Compiler_Backend_C.H.
References Aleph::DynArray< T >::access(), emission_, and Aleph::Compiler_C_Backend_Emission::function_descriptor_symbols.
Referenced by emit_function_descriptors(), emit_instruction(), and emit_prototypes().
|
inlineprivate |
Definition at line 373 of file Compiler_Backend_C.H.
References Aleph::DynArray< T >::access(), emission_, and Aleph::Compiler_C_Backend_Emission::function_symbols.
Referenced by emit_function(), emit_function_descriptors(), and emit_prototypes().
|
inlineprivate |
Definition at line 299 of file Compiler_Backend_C.H.
References Aleph::DynArray< T >::append(), Aleph::Compiler_C_Backend_Emission::c_prefix, Aleph::Compiler_C_Backend::Symbol_Names::call_symbol, Aleph::Compiler_C_Backend_Emission::dump_globals_symbol, Aleph::Compiler_C_Backend::Symbol_Names::dump_globals_symbol, emission_, Aleph::Compiler_C_Backend::Symbol_Names::equal_symbol, Aleph::Compiler_C_Backend_Emission::function_descriptor_symbols, Aleph::Compiler_C_Backend::Symbol_Names::function_pointer_type_name, Aleph::Compiler_C_Backend_Emission::function_symbols, Aleph::Compiler_C_Backend::Symbol_Names::function_type_name, Aleph::Compiler_IR_Module::functions, Aleph::Compiler_C_Backend::Symbol_Names::make_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_char_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_function_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_int_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_invalid_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_string_symbol, Aleph::Compiler_C_Backend::Symbol_Names::make_unit_symbol, module_, Aleph::Compiler_C_Backend_Emission::module_init_symbol, Aleph::Compiler_C_Backend::Symbol_Names::module_init_symbol, Aleph::Compiler_C_Backend_Options::module_name, Aleph::Compiler_C_Backend_Emission::module_struct_name, Aleph::Compiler_C_Backend::Symbol_Names::module_struct_name, names_, options_, Aleph::Compiler_C_Backend::Symbol_Names::panic_symbol, Aleph::Compiler_C_Backend::Symbol_Names::prefix, Aleph::Compiler_C_Backend_Emission::print_value_symbol, Aleph::Compiler_C_Backend::Symbol_Names::print_value_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_assigned_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_bool_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_function_symbol, Aleph::Compiler_C_Backend::Symbol_Names::require_int_symbol, Aleph::Compiler_Backend_C_Detail::sanitize_identifier(), Aleph::Compiler_C_Backend::Symbol_Names::tag_bool_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_char_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_enum_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_function_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_int_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_invalid_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_name_symbol, Aleph::Compiler_C_Backend::Symbol_Names::tag_string_name, Aleph::Compiler_C_Backend::Symbol_Names::tag_unit_name, Aleph::Compiler_IR_Module::top_level, Aleph::Compiler_C_Backend_Emission::top_level_symbol, Aleph::Compiler_C_Backend::Symbol_Names::top_level_symbol, Aleph::Compiler_Backend_C_Detail::upper_identifier(), Aleph::Compiler_C_Backend::Symbol_Names::upper_prefix, Aleph::Compiler_C_Backend_Emission::value_type_name, and Aleph::Compiler_C_Backend::Symbol_Names::value_type_name.
Referenced by Emitter().
|
inline |
Emits the full C translation unit.
Definition at line 1246 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), emission_, Aleph::Compiler_C_Backend_Options::emit_comments, emit_function(), emit_function_descriptors(), emit_main(), emit_module_layout(), emit_prototypes(), emit_runtime_prelude(), emit_top_level(), Aleph::Compiler_IR_Module::functions, module_, options_, out, Aleph::Compiler_C_Backend_Emission::source, Aleph::Compiler_IR_Module::top_level, Aleph::Compiler_C_Backend_Emission::valid, and validate_input().
Referenced by Aleph::Compiler_C_Backend::emit_module().
|
inlineprivate |
Definition at line 292 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Compiler_Type_Context::to_string(), and types_.
Referenced by emit_function_body(), and emit_slot_declarations().
|
inlineprivate |
Definition at line 356 of file Compiler_Backend_C.H.
References Aleph::blossom_maximum_cardinality_matching(), fail(), Aleph::Compiler_IR_Module::functions, module_, Aleph::validate_ir_module(), and warn().
Referenced by run().
Definition at line 287 of file Compiler_Backend_C.H.
References Aleph::DynArray< T >::append(), emission_, Aleph::message(), and Aleph::Compiler_C_Backend_Emission::warnings.
Referenced by emit_main(), and validate_input().
|
private |
Definition at line 278 of file Compiler_Backend_C.H.
Referenced by fail(), function_descriptor_symbol(), function_symbol(), initialize_symbols(), run(), and warn().
|
private |
Definition at line 276 of file Compiler_Backend_C.H.
Referenced by emit_function(), emit_function_descriptors(), emit_main(), emit_module_layout(), emit_prototypes(), emit_top_level(), initialize_symbols(), run(), and validate_input().
|
private |
Definition at line 279 of file Compiler_Backend_C.H.
Referenced by emit_constant_expression(), emit_function_body(), emit_function_descriptors(), emit_function_signature(), emit_instruction(), emit_main(), emit_module_layout(), emit_parameter_bindings(), emit_prototypes(), emit_runtime_prelude(), emit_slot_declarations(), emit_terminator(), emit_top_level(), emit_value_declarations(), and initialize_symbols().
|
private |
Definition at line 275 of file Compiler_Backend_C.H.
Referenced by emit_function_body(), emit_instruction_comment(), emit_main(), emit_slot_declarations(), emit_terminator(), initialize_symbols(), and run().
|
private |
Definition at line 277 of file Compiler_Backend_C.H.
Referenced by type_comment().