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

Method codegen_constructor

bootstrap/stage0/codegen.cpp:8026–8322  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8024}
8025
8026ErrorOr<void> Jakt::codegen::CodeGenerator::codegen_constructor(NonnullRefPtr<Jakt::types::CheckedFunction> const function,bool const is_inline,ByteStringBuilder& output) {
8027{
8028Jakt::ids::TypeId const type_id = function->return_type_id;
8029NonnullRefPtr<typename Jakt::types::Type> const type_ = this->program->get_type(type_id);
8030NonnullRefPtr<typename Jakt::types::Type> __jakt_tmp293 = type_;
8031if (__jakt_tmp293->__jakt_init_index() == 23 /* Struct */){
8032Jakt::ids::StructId const struct_id = __jakt_tmp293->as.Struct.value;
8033Jakt::types::CheckedStruct const structure = this->program->get_struct(struct_id);
8034ByteString const qualified_name = TRY((this->codegen_type_possibly_as_namespace(type_id,true)));
8035if ((!is_inline) && (!structure.generic_parameters.is_empty())){
8036output.append(StringView::from_string_literal("template <"sv));
8037TRY((this->codegen_template_parameter_names(structure.generic_parameters,output)));
8038output.append(StringView::from_string_literal(">\n"sv));
8039}
8040if ((structure.record_type.__jakt_init_index() == 1 /* Class */) || (structure.record_type.__jakt_init_index() == 0 /* Struct */)){
8041if (is_inline){
8042output.append(function->name_for_codegen().as_name_for_definition());
8043output.append(StringView::from_string_literal("("sv));
8044}
8045else {
8046output.appendff(ByteString::from_utf8_without_validation("{}::{}("sv),qualified_name,function->name_for_codegen().as_name_for_definition());
8047}
8048
8049bool first = true;
8050{
8051JaktInternal::ArrayIterator<Jakt::types::CheckedParameter> _magic = function->params.iterator();
8052for (;;){
8053JaktInternal::Optional<Jakt::types::CheckedParameter> const _magic_value = _magic.next();
8054if (!_magic_value.has_value()){
8055break;
8056}
8057Jakt::types::CheckedParameter param = _magic_value.value();
8058{
8059if (!first){
8060output.append(StringView::from_string_literal(", "sv));
8061}
8062else {
8063first = false;
8064}
8065
8066Jakt::ids::TypeId const param_type_id = param.variable->type_id;
8067output.append(TRY((this->codegen_type(param_type_id))));
8068output.append(StringView::from_string_literal(" a_"sv));
8069output.append(param.variable->name_for_codegen().as_name_for_definition());
8070}
8071
8072}
8073}
8074
8075output.append(StringView::from_string_literal(")"sv));
8076if (!function->params.is_empty()){
8077output.append(StringView::from_string_literal(": "sv));
8078JaktInternal::DynamicArray<ByteString> initializers = DynamicArray<ByteString>::create_with({});
8079size_t const parent_constructor_parameter_count = JaktInternal::checked_sub(function->params.size(),structure.fields.size());
8080if (parent_constructor_parameter_count > static_cast<size_t>(0ULL)){
8081ByteString parent_initializer = ByteString::from_utf8_without_validation(""sv);
8082[](ByteString& self, ByteString rhs) -> void {{
8083self = (self + rhs);

Callers 2

codegen_namespaceMethod · 0.95
codegen_structMethod · 0.95

Calls 15

codegen_typeMethod · 0.95
name_for_codegenMethod · 0.80
as_name_for_useMethod · 0.80
joinFunction · 0.70
panicFunction · 0.70
checked_subFunction · 0.50
get_typeMethod · 0.45
__jakt_init_indexMethod · 0.45

Tested by

no test coverage detected