Fixed constructor args #60

This commit is contained in:
2026-06-03 19:51:27 +02:00
parent 269e43930f
commit c07e0bcb3e
4 changed files with 53 additions and 4 deletions
+5 -1
View File
@@ -38,7 +38,11 @@ impl GenRust for Literal {
Self::Tuple(values) => {
cg.add("(");
for val in values {
for (i, val) in values.iter().enumerate() {
if i > 0 {
cg.add(", ");
}
val.gen_rust(ctx, cg);
}
+29 -2
View File
@@ -196,12 +196,21 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &Spanned<ClassConstructor>) {
cg.add_indented(&format!("this.constructor("));
for (i, param) in self.1.item.params.0.iter().enumerate() {
for (i, param) in self
.1
.item
.params
.0
.iter()
.map(|v| expr_pattern(&v.name))
.enumerate()
{
if i > 0 {
cg.add(", ");
}
param.name.gen_rust(ctx, cg);
ctx.expr_ensure_semicolon = false;
param.gen_rust(ctx, cg);
}
cg.addln(");");
@@ -237,6 +246,24 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &Spanned<ClassConstructor>) {
}
}
pub fn expr_pattern(pat: &Pattern) -> Expression {
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!(),
}
}
impl GenRust for TopLevelKind {
fn gen_rust(&self, ctx: &mut Context, cg: &mut RustCodegen) {
match self {