Codegen function call parameters
This commit is contained in:
parent
a6bff95d24
commit
a605d182b4
@ -20,7 +20,7 @@
|
||||
## v0.0.10
|
||||
|
||||
- [x] Parse function call parameters
|
||||
- [ ] Codegen function call parameters
|
||||
- [x] Codegen function call parameters
|
||||
- [ ] Parse function declaration arguments
|
||||
- [ ] Begin work on semantic analysis
|
||||
- [ ] Symbol table
|
||||
|
@ -4,6 +4,8 @@ use super::Transpilable;
|
||||
|
||||
impl Transpilable for FunctionCall {
|
||||
fn transpile(&self) -> String {
|
||||
format!("{}()", self.function.transpile())
|
||||
let parameters = &self.arguments.arguments.iter().map(|expr| expr.transpile()).collect::<Vec<_>>().join(", ");
|
||||
|
||||
format!("{}({})", self.function.transpile(), parameters)
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ use super::Expression;
|
||||
#[derive(Debug)]
|
||||
pub struct FunctionCall {
|
||||
pub function: Box<Expression>,
|
||||
pub arguments: Box<ArgumentsList>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -1,7 +1,10 @@
|
||||
use crate::{
|
||||
lexic::token::Token,
|
||||
syntax::{
|
||||
ast::{functions::FunctionCall, Expression},
|
||||
ast::{
|
||||
functions::{ArgumentsList, FunctionCall},
|
||||
Expression,
|
||||
},
|
||||
functions::arguments_list,
|
||||
ParseResult,
|
||||
},
|
||||
@ -20,7 +23,7 @@ pub fn try_parse(tokens: &Vec<Token>, pos: usize) -> ParseResult<Expression, ()>
|
||||
};
|
||||
|
||||
// Parse arguments list
|
||||
let (_args_list, next_pos) = match arguments_list::try_parse(tokens, next_pos) {
|
||||
let (arguments, next_pos) = match arguments_list::try_parse(tokens, next_pos) {
|
||||
ParseResult::Ok(args, next) => (args, next),
|
||||
ParseResult::Err(err) => return ParseResult::Err(err),
|
||||
_ => {
|
||||
@ -30,13 +33,11 @@ pub fn try_parse(tokens: &Vec<Token>, pos: usize) -> ParseResult<Expression, ()>
|
||||
|
||||
let fun_call = FunctionCall {
|
||||
function: Box::new(primary_expr),
|
||||
arguments: Box::new(arguments),
|
||||
};
|
||||
|
||||
ParseResult::Ok(Expression::FunctionCall(fun_call), next_pos)
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
|
||||
}
|
||||
mod test {}
|
||||
|
Loading…
Reference in New Issue
Block a user