Fix: Generics decl constraints
This commit is contained in:
@@ -14,8 +14,6 @@ pub class Application {
|
||||
i32 ticks;
|
||||
|
||||
pub constructor(str* name) {
|
||||
new<T::t> test::Test();
|
||||
|
||||
self.name = name.to_string();
|
||||
|
||||
self.tasks = new Vec();
|
||||
|
||||
@@ -41,3 +41,14 @@ impl TypeExpr {
|
||||
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()))
|
||||
}
|
||||
|
||||
Rule::trait_decl => dbg!(ast_expr!(TopLevelKind::TraitDecl {
|
||||
Rule::trait_decl => ast_expr!(TopLevelKind::TraitDecl {
|
||||
visibility: Visibility::try_from(&mut inner),
|
||||
|
||||
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()),
|
||||
|
||||
items: Ok(Vec::new()) as AstResult<'_, Vec<_>>,
|
||||
})),
|
||||
}),
|
||||
|
||||
_ => AstError::bug_unimplemented(pair),
|
||||
}
|
||||
|
||||
+7
-6
@@ -482,9 +482,10 @@ impl ToRust for TopLevelKind {
|
||||
format!(
|
||||
"<{}>",
|
||||
generics
|
||||
.clone()
|
||||
.0
|
||||
.iter()
|
||||
.map(|v| (false, v).get_rust())
|
||||
.into_iter()
|
||||
.map(|v| Generic::from(v).get_rust())
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
)
|
||||
@@ -892,7 +893,7 @@ impl GetRust for GenericsDecl {
|
||||
"<{}>",
|
||||
self.0
|
||||
.iter()
|
||||
.map(|v| (false, v).get_rust())
|
||||
.map(|v| v.get_rust())
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ")
|
||||
)
|
||||
@@ -900,13 +901,13 @@ impl GetRust for GenericsDecl {
|
||||
}
|
||||
}
|
||||
|
||||
impl GetRust for (bool, &GenericDecl) {
|
||||
impl GetRust for GenericDecl {
|
||||
fn get_rust(&self) -> String {
|
||||
match &self.1 {
|
||||
match &self {
|
||||
GenericDecl::Lifetime(name) => format!("'{}", name.get_rust()),
|
||||
GenericDecl::Type(name, requirements) => {
|
||||
name.get_rust()
|
||||
+ &(if self.0 && requirements.len() != 0 {
|
||||
+ &(if requirements.len() != 0 {
|
||||
format!(
|
||||
": {}",
|
||||
requirements
|
||||
|
||||
Reference in New Issue
Block a user