|
|
|
@ -619,6 +619,10 @@ fn parse_class( |
|
|
|
|
} |
|
|
|
|
reader.consume(TokenType::CloseCurlyBracket, log); |
|
|
|
|
|
|
|
|
|
if name.is_none() { |
|
|
|
|
return Some(Box::new(ParsedStatement::Invalid)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Some(Box::new(ParsedStatement::ClassDeclaration { |
|
|
|
|
modifiers, |
|
|
|
|
name: name.unwrap(), |
|
|
|
@ -670,6 +674,10 @@ fn parse_funcdef( |
|
|
|
|
|
|
|
|
|
outer_reader.set_from_inner(&reader); |
|
|
|
|
|
|
|
|
|
if identifier.is_none() || param_list.is_none() { |
|
|
|
|
Some(Box::new(ParsedStatement::Invalid)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Some(Box::new(ParsedStatement::FuncDefDeclaration { |
|
|
|
|
modifiers, |
|
|
|
|
returns_reference, |
|
|
|
@ -894,7 +902,10 @@ fn parse_paramlist( |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
let param_type = parse_type(reader, log); |
|
|
|
|
// FIXME: Deal with empty param_type
|
|
|
|
|
if param_type.is_none() { |
|
|
|
|
// FIXME: Add logging
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
let type_mod = parse_typemod(reader, log); |
|
|
|
|
let identifier = parse_identifier(reader, log, true); |
|
|
|
|
let mut default = None; |
|
|
|
@ -1329,9 +1340,8 @@ fn parse_expr( |
|
|
|
|
if let Some(..) = binary_operand { |
|
|
|
|
let expr_term2 = parse_exprterm(reader, log); |
|
|
|
|
if expr_term2.is_none() { |
|
|
|
|
unimplemented!() |
|
|
|
|
return Some(Box::new(ParsedStatement::Invalid)); |
|
|
|
|
} |
|
|
|
|
// FIXME: deal with empty expr_term2
|
|
|
|
|
return Some(Box::new(ParsedStatement::BinaryExpr { |
|
|
|
|
left: expr_term.unwrap(), |
|
|
|
|
operator: binary_operand.unwrap(), |
|
|
|
@ -1556,10 +1566,13 @@ fn parse_exprvalue( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn parse_lambda( |
|
|
|
|
_outer_reader: &mut ParseReader, |
|
|
|
|
_log: &mut dyn FnMut(Message, Span), |
|
|
|
|
reader: &mut ParseReader, |
|
|
|
|
log: &mut dyn FnMut(Message, Span), |
|
|
|
|
) -> Option<Box<ParsedStatement>> { |
|
|
|
|
// lambda ::= 'function' '(' [[type typemod] identifier {',' [type typemod] identifier}] ')' statblock;
|
|
|
|
|
if reader.peek().token_type != TokenType::FunctionKeyword { |
|
|
|
|
return None; |
|
|
|
|
} |
|
|
|
|
unimplemented!(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|