Fixed constructor args
This commit is contained in:
@@ -248,8 +248,12 @@ impl GenRust for Pattern {
|
||||
Self::Struct(path, inner) => {
|
||||
cg.add(&path.get_rust());
|
||||
cg.add(" {");
|
||||
for pat in inner {
|
||||
pat.gen_rust(ctx, cg);
|
||||
for (name, pat) in inner {
|
||||
cg.add(&name.get_rust());
|
||||
if let Some(pat) = pat {
|
||||
cg.add(": ");
|
||||
pat.gen_rust(ctx, cg);
|
||||
}
|
||||
cg.add(",");
|
||||
}
|
||||
cg.add("}");
|
||||
|
||||
@@ -175,7 +175,27 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &Spanned<ClassConstructor>) {
|
||||
self.1.item.generics.get_rust()
|
||||
));
|
||||
|
||||
self.1.item.params.gen_rust(ctx, cg);
|
||||
let params = self
|
||||
.1
|
||||
.item
|
||||
.params
|
||||
.0
|
||||
.clone()
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(idx, mut v)| {
|
||||
v.name = construct_pattern(&v.name, idx);
|
||||
(idx, v)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
for (i, param) in ¶ms {
|
||||
if *i > 0 {
|
||||
cg.add(", ");
|
||||
}
|
||||
|
||||
param.gen_rust(ctx, cg);
|
||||
}
|
||||
|
||||
cg.addln(") -> Self {");
|
||||
cg.indent += 1;
|
||||
@@ -196,21 +216,13 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &Spanned<ClassConstructor>) {
|
||||
|
||||
cg.add_indented(&format!("this.constructor("));
|
||||
|
||||
for (i, param) in self
|
||||
.1
|
||||
.item
|
||||
.params
|
||||
.0
|
||||
.iter()
|
||||
.map(|v| expr_pattern(&v.name))
|
||||
.enumerate()
|
||||
{
|
||||
for (i, param) in params {
|
||||
if i > 0 {
|
||||
cg.add(", ");
|
||||
}
|
||||
|
||||
ctx.expr_ensure_semicolon = false;
|
||||
param.gen_rust(ctx, cg);
|
||||
param.name.gen_rust(ctx, cg);
|
||||
}
|
||||
|
||||
cg.addln(");");
|
||||
@@ -246,21 +258,11 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &Spanned<ClassConstructor>) {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn expr_pattern(pat: &Pattern) -> Expression {
|
||||
fn construct_pattern(pat: &Pattern, idx: usize) -> Pattern {
|
||||
match pat {
|
||||
Pattern::Literal(v) => Expression::Literal(v.clone()),
|
||||
Pattern::Path(_, v) => Expression::Path(v.clone().into()),
|
||||
Pattern::Tuple(items) => Expression::Literal(Literal::Tuple(
|
||||
items.iter().map(|v| expr_pattern(&v)).collect(),
|
||||
)),
|
||||
Pattern::NamedTuple(path, items) => Expression::Fix {
|
||||
initial: Box::new(Expression::Path(path.clone().into())),
|
||||
prefixes: Vec::new(),
|
||||
postfixes: vec![Postfix::Call(
|
||||
items.iter().map(|v| expr_pattern(&v)).collect(),
|
||||
)],
|
||||
},
|
||||
Pattern::Struct(_, _) => unimplemented!(),
|
||||
Pattern::Literal(v) => Pattern::Literal(v.clone()),
|
||||
Pattern::Path(is_mut, v) => Pattern::Path(*is_mut, v.clone().into()),
|
||||
_ => Pattern::Path(false, Path(vec![Identifier(format!("_{idx}"))])),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user