Fix: Generics decl constraints
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user