MCPcopy Create free account
hub / github.com/borgo-lang/borgo / constructor_make_function

Method constructor_make_function

compiler/src/codegen.rs:1944–2010  ·  view source on GitHub ↗
(
        &self,
        def: &EnumDefinition,
        name: &str,
        con: &Constructor,
    )

Source from the content-addressed store, hash-verified

1942 }
1943
1944 fn constructor_make_function(
1945 &self,
1946 def: &EnumDefinition,
1947 name: &str,
1948 con: &Constructor,
1949 ) -> String {
1950 let mut out = emitter();
1951
1952 let ty_name = &def.name;
1953 let tag = format!("{ty_name}_{cons}", cons = con.name);
1954
1955 let (fields, params): (Vec<_>, Vec<_>) = con
1956 .fields
1957 .iter()
1958 .enumerate()
1959 .map(|(index, f)| {
1960 let arg = format!("arg_{index}");
1961 let sig = self.to_type(&f.ty);
1962 let param = format!("{arg} {sig}");
1963
1964 let field_name = constructor_field_name(&con.name, con.fields.len(), index);
1965 let field = format!("{field_name}: {arg}");
1966
1967 (field, param)
1968 })
1969 .unzip();
1970
1971 let fields = fields.join(", ");
1972 let params = params.join(", ");
1973
1974 let (generic_params, generic_args) = if def.generics.is_empty() {
1975 ("".to_string(), "".to_string())
1976 } else {
1977 let args = def
1978 .generics
1979 .clone()
1980 .into_iter()
1981 .map(|g| g.name)
1982 .collect::<Vec<_>>()
1983 .join(", ");
1984 let generics = generics_to_string(&def.generics);
1985 (generics, format!("[{args}]"))
1986 };
1987
1988 let ret = Type::Con {
1989 id: Symbol::ethereal(&def.name),
1990 args: def
1991 .generics
1992 .iter()
1993 .map(|g| Type::Con {
1994 id: Symbol::ethereal(&g.name),
1995 args: vec![],
1996 })
1997 .collect(),
1998 };
1999
2000 let ret = self.to_type(&ret);
2001

Callers 1

create_make_functionMethod · 0.80

Calls 7

emitterFunction · 0.85
constructor_field_nameFunction · 0.85
generics_to_stringFunction · 0.85
is_emptyMethod · 0.80
emitMethod · 0.80
renderMethod · 0.80
to_typeMethod · 0.45

Tested by

no test coverage detected