Working constructor and statements
This commit is contained in:
+2
-1
@@ -87,6 +87,7 @@ impl GenRust for Expression {
|
|||||||
} => {
|
} => {
|
||||||
cg.add(&prefixes.get_rust());
|
cg.add(&prefixes.get_rust());
|
||||||
initial.gen_rust(ctx, cg);
|
initial.gen_rust(ctx, cg);
|
||||||
|
cg.add(&Some(prefixes).get_rust());
|
||||||
for postfix in postfixes {
|
for postfix in postfixes {
|
||||||
postfix.gen_rust(ctx, cg);
|
postfix.gen_rust(ctx, cg);
|
||||||
}
|
}
|
||||||
@@ -126,7 +127,7 @@ impl GetRust for Vec<Prefix> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GetRust for Option<Vec<Prefix>> {
|
impl GetRust for Option<&Vec<Prefix>> {
|
||||||
fn get_rust(&self) -> String {
|
fn get_rust(&self) -> String {
|
||||||
if let Some(prefixes) = self {
|
if let Some(prefixes) = self {
|
||||||
prefixes
|
prefixes
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use crate::{GenRust, GetRust, RustCodegen};
|
|||||||
impl GenRust for Block {
|
impl GenRust for Block {
|
||||||
fn gen_rust(&self, ctx: &mut Context, cg: &mut RustCodegen) {
|
fn gen_rust(&self, ctx: &mut Context, cg: &mut RustCodegen) {
|
||||||
for stmt in &self.0 {
|
for stmt in &self.0 {
|
||||||
|
ctx.expr_ensure_semicolon = true;
|
||||||
cg.add_indented("");
|
cg.add_indented("");
|
||||||
stmt.gen_rust(ctx, cg);
|
stmt.gen_rust(ctx, cg);
|
||||||
}
|
}
|
||||||
@@ -14,7 +15,6 @@ impl GenRust for Block {
|
|||||||
if let Some(soft_return) = &self.1 {
|
if let Some(soft_return) = &self.1 {
|
||||||
ctx.expr_ensure_semicolon = false;
|
ctx.expr_ensure_semicolon = false;
|
||||||
soft_return.gen_rust(ctx, cg);
|
soft_return.gen_rust(ctx, cg);
|
||||||
ctx.expr_ensure_semicolon = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -197,7 +197,7 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &ClassConstructor) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cg.add_indentedln(&format!("this.construct_class("));
|
cg.add_indentedln(&format!("this.constructor("));
|
||||||
|
|
||||||
for (i, param) in self.1.params.0.iter().enumerate() {
|
for (i, param) in self.1.params.0.iter().enumerate() {
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
@@ -207,22 +207,30 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &ClassConstructor) {
|
|||||||
param.name.gen_rust(ctx, cg);
|
param.name.gen_rust(ctx, cg);
|
||||||
}
|
}
|
||||||
|
|
||||||
cg.add(")");
|
cg.add(");");
|
||||||
|
|
||||||
cg.add_indentedln("this");
|
cg.add_indentedln("this");
|
||||||
|
|
||||||
cg.indent -= 1;
|
cg.indent -= 1;
|
||||||
cg.add_indentedln("}\n");
|
cg.add_indentedln("}\n");
|
||||||
|
|
||||||
|
let mut constructor_params = vec![VarDecl {
|
||||||
|
mutable: false,
|
||||||
|
name: Pattern::Id(Identifier(String::from("self"))),
|
||||||
|
type_: Some(TypeExpr(
|
||||||
|
TypeExprKind::Path(Path(vec![Identifier(String::from("Self"))])),
|
||||||
|
vec![TypePostfix::RefMut],
|
||||||
|
)),
|
||||||
|
}];
|
||||||
|
|
||||||
|
constructor_params.append(&mut self.1.params.0.clone());
|
||||||
|
|
||||||
FunctionDecl {
|
FunctionDecl {
|
||||||
visibility: self.1.visibility.clone(),
|
visibility: self.1.visibility.clone(),
|
||||||
name: Identifier(String::from("constructor")),
|
name: Identifier(String::from("constructor")),
|
||||||
generics: self.1.generics.clone(),
|
generics: self.1.generics.clone(),
|
||||||
params: self.1.params.clone(),
|
params: ParamList(constructor_params),
|
||||||
return_type: TypeExpr(
|
return_type: TypeExpr::no_px(TypeExprKind::Tuple(Vec::new())),
|
||||||
TypeExprKind::Path(Path(vec![Identifier(String::from("Self"))])),
|
|
||||||
Vec::new(),
|
|
||||||
),
|
|
||||||
body: Some(self.1.body.clone()),
|
body: Some(self.1.body.clone()),
|
||||||
}
|
}
|
||||||
.gen_rust(ctx, cg);
|
.gen_rust(ctx, cg);
|
||||||
|
|||||||
Reference in New Issue
Block a user