Update: Function #65
This commit is contained in:
@@ -88,8 +88,11 @@ impl GenRust for FunctionDecl {
|
|||||||
param.gen_rust(ctx, cg);
|
param.gen_rust(ctx, cg);
|
||||||
}
|
}
|
||||||
|
|
||||||
cg.add(") -> ");
|
cg.add(") ");
|
||||||
cg.add(&self.return_type.get_rust());
|
if let Some(return_type) = &self.return_type {
|
||||||
|
cg.add("-> ");
|
||||||
|
cg.add(&return_type.get_rust());
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(body) = &self.body {
|
if let Some(body) = &self.body {
|
||||||
cg.add(" ");
|
cg.add(" ");
|
||||||
@@ -254,7 +257,7 @@ impl GenRust for (&Vec<Spanned<FieldDeclStmt>>, &Spanned<ClassConstructor>) {
|
|||||||
name: Identifier(String::from("constructor")),
|
name: Identifier(String::from("constructor")),
|
||||||
generics: self.1.item.generics.clone(),
|
generics: self.1.item.generics.clone(),
|
||||||
params: ParamList(constructor_params),
|
params: ParamList(constructor_params),
|
||||||
return_type: TypeExpr::Tuple(Vec::new()),
|
return_type: Some(TypeExpr::Tuple(Vec::new())),
|
||||||
body: Some(self.1.item.body.clone()),
|
body: Some(self.1.item.body.clone()),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ pub struct FunctionDecl {
|
|||||||
pub name: Identifier,
|
pub name: Identifier,
|
||||||
pub generics: GenericsDecl,
|
pub generics: GenericsDecl,
|
||||||
pub params: ParamList,
|
pub params: ParamList,
|
||||||
pub return_type: TypeExpr,
|
pub return_type: Option<TypeExpr>,
|
||||||
pub body: Option<Block>,
|
pub body: Option<Block>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ attributes = {
|
|||||||
// DECLARATION HELPERS
|
// DECLARATION HELPERS
|
||||||
// ======================================================
|
// ======================================================
|
||||||
var_decl = {
|
var_decl = {
|
||||||
"let" ~ WHITESPACE ~ pattern ~ type_expr?
|
"let" ~ pattern ~ type_expr?
|
||||||
}
|
}
|
||||||
|
|
||||||
field = {
|
field = {
|
||||||
@@ -323,7 +323,7 @@ trait_decl = {
|
|||||||
// ======================================================
|
// ======================================================
|
||||||
|
|
||||||
function_decl = {
|
function_decl = {
|
||||||
visibility? ~ type_expr ~ identifier ~ generics_decl? ~ "(" ~ method_args ~ ")" ~ (block | semicolon)
|
visibility? ~ "fn" ~ identifier ~ generics_decl? ~ "(" ~ method_args ~ ")" ~ type_expr? ~ (block | semicolon)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ======================================================
|
// ======================================================
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FunctionDecl {
|
|||||||
ast_ensure!(pair, Rule::function_decl => {
|
ast_ensure!(pair, Rule::function_decl => {
|
||||||
let mut inner = pair.into_inner();
|
let mut inner = pair.into_inner();
|
||||||
let visibility = Visibility::try_from(&mut inner);
|
let visibility = Visibility::try_from(&mut inner);
|
||||||
let return_type = TypeExpr::try_from(inner.next().unwrap());
|
|
||||||
let name = Identifier::try_from(inner.next().unwrap());
|
let name = Identifier::try_from(inner.next().unwrap());
|
||||||
|
|
||||||
let generics = consume_rule(&mut inner, Rule::generics_decl)
|
let generics = consume_rule(&mut inner, Rule::generics_decl)
|
||||||
@@ -51,6 +50,10 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for FunctionDecl {
|
|||||||
})
|
})
|
||||||
.unwrap_or_else(|| Ok(ParamList(self_param.into_iter().collect())));
|
.unwrap_or_else(|| Ok(ParamList(self_param.into_iter().collect())));
|
||||||
|
|
||||||
|
let return_type = consume_rule(&mut inner, Rule::type_expr)
|
||||||
|
.map(TypeExpr::try_from)
|
||||||
|
.transpose();
|
||||||
|
|
||||||
let body = inner.next().map(Block::try_from).transpose();
|
let body = inner.next().map(Block::try_from).transpose();
|
||||||
|
|
||||||
ast_expr!(Self {
|
ast_expr!(Self {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
void main() {}
|
fn main() {}
|
||||||
|
|
||||||
struct MyStruct<'a> {
|
struct MyStruct<'a> {
|
||||||
name *'a String
|
name *'a String
|
||||||
}
|
}
|
||||||
|
|
||||||
i32 add(a i32, b i32) {
|
fn add(a i32, b i32) i32 {
|
||||||
a + b
|
a + b
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user