Get built-in functions working
This commit is contained in:
parent
4d7f59aee2
commit
b17da5ad3c
@ -256,26 +256,8 @@ impl<'src> Parser<'src> {
|
|||||||
(Token::IsEven, left_span) => {
|
(Token::IsEven, left_span) => {
|
||||||
self.next_token()?;
|
self.next_token()?;
|
||||||
|
|
||||||
let mut value_parameters = None;
|
|
||||||
|
|
||||||
if let (Token::LeftParenthesis, _) = self.current {
|
if let (Token::LeftParenthesis, _) = self.current {
|
||||||
self.next_token()?;
|
self.next_token()?;
|
||||||
|
|
||||||
value_parameters = Some(vec![self.parse_node(0)?]);
|
|
||||||
|
|
||||||
loop {
|
|
||||||
self.next_token()?;
|
|
||||||
|
|
||||||
if let (Token::RightParenthesis, _) = self.current {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let (Token::Comma, _) = self.current {
|
|
||||||
self.next_token()?;
|
|
||||||
}
|
|
||||||
|
|
||||||
value_parameters.as_mut().unwrap().push(self.parse_node(0)?);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return Err(ParseError::ExpectedOpeningParenthesis {
|
return Err(ParseError::ExpectedOpeningParenthesis {
|
||||||
actual: self.current.0.clone(),
|
actual: self.current.0.clone(),
|
||||||
@ -296,7 +278,7 @@ impl<'src> Parser<'src> {
|
|||||||
Statement::BuiltInFunctionCall {
|
Statement::BuiltInFunctionCall {
|
||||||
function: BuiltInFunction::IsEven,
|
function: BuiltInFunction::IsEven,
|
||||||
type_arguments: None,
|
type_arguments: None,
|
||||||
value_arguments: value_parameters,
|
value_arguments: None,
|
||||||
},
|
},
|
||||||
left_span,
|
left_span,
|
||||||
))
|
))
|
||||||
|
@ -213,13 +213,11 @@ impl<P: Copy> Vm<P> {
|
|||||||
},
|
},
|
||||||
) = (left_value, right.statement)
|
) = (left_value, right.statement)
|
||||||
{
|
{
|
||||||
if let Some(mut nodes) = value_argument_nodes.take() {
|
|
||||||
nodes.insert(0, Node::new(Statement::Constant(value), right_span));
|
|
||||||
}
|
|
||||||
|
|
||||||
let value_arguments = if let Some(value_nodes) = value_argument_nodes {
|
|
||||||
let mut value_arguments = Vec::new();
|
let mut value_arguments = Vec::new();
|
||||||
|
|
||||||
|
value_arguments.push(value);
|
||||||
|
|
||||||
|
if let Some(value_nodes) = value_argument_nodes {
|
||||||
for node in value_nodes {
|
for node in value_nodes {
|
||||||
let position = node.position;
|
let position = node.position;
|
||||||
let value = if let Some(value) = self.run_node(node, variables)? {
|
let value = if let Some(value) = self.run_node(node, variables)? {
|
||||||
@ -230,13 +228,9 @@ impl<P: Copy> Vm<P> {
|
|||||||
|
|
||||||
value_arguments.push(value);
|
value_arguments.push(value);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Some(value_arguments)
|
let function_call_return = function.call(None, Some(value_arguments))?;
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
let function_call_return = function.call(None, value_arguments)?;
|
|
||||||
|
|
||||||
return Ok(Some(function_call_return));
|
return Ok(Some(function_call_return));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user