MCPcopy Create free account
hub / github.com/SerenityOS/jakt / codegen_struct

Method codegen_struct

bootstrap/stage0/codegen.cpp:2613–2871  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2611}
2612
2613ErrorOr<void> Jakt::codegen::CodeGenerator::codegen_struct(Jakt::types::CheckedStruct const struct_,ByteStringBuilder& output) {
2614{
2615if (struct_.definition_linkage.__jakt_init_index() == 1 /* External */){
2616return {};
2617}
2618bool struct_is_generic = false;
2619JaktInternal::DynamicArray<ByteString> generic_parameter_names = DynamicArray<ByteString>::create_with({});
2620ByteStringBuilder template_parameters_builder = ByteStringBuilder::create();
2621ByteString template_parameters = ByteString::from_utf8_without_validation(""sv);
2622if (!struct_.generic_parameters.is_empty()){
2623struct_is_generic = true;
2624TRY((this->codegen_template_parameter_names(struct_.generic_parameters,generic_parameter_names,template_parameters_builder)));
2625template_parameters = template_parameters_builder.to_string();
2626output.appendff(ByteString::from_utf8_without_validation("template <{}>"sv),template_parameters);
2627}
2628{auto&& __jakt_match_variant = struct_.record_type;
2629switch(__jakt_match_variant.__jakt_init_index()) {
2630case 1 /* Class */:{
2631ByteString class_name_with_generics = ByteString::from_utf8_without_validation(""sv);
2632[](ByteString& self, ByteString rhs) -> void {{
2633self = (self + rhs);
2634}
2635}
2636(class_name_with_generics,struct_.name_for_codegen().as_name_for_definition());
2637bool first = true;
2638{
2639JaktInternal::ArrayIterator<Jakt::types::CheckedGenericParameter> _magic = struct_.generic_parameters.iterator();
2640for (;;){
2641JaktInternal::Optional<Jakt::types::CheckedGenericParameter> const _magic_value = _magic.next();
2642if (!_magic_value.has_value()){
2643break;
2644}
2645Jakt::types::CheckedGenericParameter generic_parameter = _magic_value.value();
2646{
2647if (!first){
2648[](ByteString& self, ByteString rhs) -> void {{
2649self = (self + rhs);
2650}
2651}
2652(class_name_with_generics,ByteString::from_utf8_without_validation(", "sv));
2653}
2654else {
2655[](ByteString& self, ByteString rhs) -> void {{
2656self = (self + rhs);
2657}
2658}
2659(class_name_with_generics,ByteString::from_utf8_without_validation("<"sv));
2660first = false;
2661}
2662
2663[](ByteString& self, ByteString rhs) -> void {{
2664self = (self + rhs);
2665}
2666}
2667(class_name_with_generics,TRY((this->codegen_type(generic_parameter.type_id))));
2668}
2669
2670}

Callers 1

Calls 15

codegen_typeMethod · 0.95
codegen_struct_typeMethod · 0.95
codegen_destructorMethod · 0.95
codegen_constructorMethod · 0.95
codegen_functionMethod · 0.95
codegen_ak_formatterMethod · 0.95
todoFunction · 0.85

Tested by

no test coverage detected