Fix: Generics decl constraints

This commit is contained in:
2026-05-17 19:30:20 +02:00
parent 1d4473906f
commit 907d9d7f9d
4 changed files with 20 additions and 10 deletions
-2
View File
@@ -14,8 +14,6 @@ pub class Application {
i32 ticks; i32 ticks;
pub constructor(str* name) { pub constructor(str* name) {
new<T::t> test::Test();
self.name = name.to_string(); self.name = name.to_string();
self.tasks = new Vec(); self.tasks = new Vec();
+11
View File
@@ -41,3 +41,14 @@ impl TypeExpr {
Self(kind, Vec::new()) Self(kind, Vec::new())
} }
} }
impl From<GenericDecl> for Generic {
fn from(value: GenericDecl) -> Self {
match value {
GenericDecl::Lifetime(life) => Generic::Lifetime(life),
GenericDecl::Type(ty, _) => {
Generic::Type(TypeExpr(TypeExprKind::Path(Path(vec![ty])), Vec::new()))
}
}
}
}
+2 -2
View File
@@ -101,7 +101,7 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for TopLevelKind {
ast_expr!(TopLevelKind::ImplDecl(pair.try_into())) ast_expr!(TopLevelKind::ImplDecl(pair.try_into()))
} }
Rule::trait_decl => dbg!(ast_expr!(TopLevelKind::TraitDecl { Rule::trait_decl => ast_expr!(TopLevelKind::TraitDecl {
visibility: Visibility::try_from(&mut inner), visibility: Visibility::try_from(&mut inner),
name: inner.next().unwrap().try_into(), name: inner.next().unwrap().try_into(),
@@ -117,7 +117,7 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for TopLevelKind {
.map(|v| v.unwrap_or_default()), .map(|v| v.unwrap_or_default()),
items: Ok(Vec::new()) as AstResult<'_, Vec<_>>, items: Ok(Vec::new()) as AstResult<'_, Vec<_>>,
})), }),
_ => AstError::bug_unimplemented(pair), _ => AstError::bug_unimplemented(pair),
} }
+7 -6
View File
@@ -482,9 +482,10 @@ impl ToRust for TopLevelKind {
format!( format!(
"<{}>", "<{}>",
generics generics
.clone()
.0 .0
.iter() .into_iter()
.map(|v| (false, v).get_rust()) .map(|v| Generic::from(v).get_rust())
.collect::<Vec<_>>() .collect::<Vec<_>>()
.join(", ") .join(", ")
) )
@@ -892,7 +893,7 @@ impl GetRust for GenericsDecl {
"<{}>", "<{}>",
self.0 self.0
.iter() .iter()
.map(|v| (false, v).get_rust()) .map(|v| v.get_rust())
.collect::<Vec<_>>() .collect::<Vec<_>>()
.join(", ") .join(", ")
) )
@@ -900,13 +901,13 @@ impl GetRust for GenericsDecl {
} }
} }
impl GetRust for (bool, &GenericDecl) { impl GetRust for GenericDecl {
fn get_rust(&self) -> String { fn get_rust(&self) -> String {
match &self.1 { match &self {
GenericDecl::Lifetime(name) => format!("'{}", name.get_rust()), GenericDecl::Lifetime(name) => format!("'{}", name.get_rust()),
GenericDecl::Type(name, requirements) => { GenericDecl::Type(name, requirements) => {
name.get_rust() name.get_rust()
+ &(if self.0 && requirements.len() != 0 { + &(if requirements.len() != 0 {
format!( format!(
": {}", ": {}",
requirements requirements