@@ -1160,7 +1160,11 @@ impl<'a, 'alloc> Parser<'a, 'alloc> {
11601160 None => Err ( SyntaxError :: UnexpectedEOFDetected ( self . module_id ) ) ,
11611161 } ?;
11621162 let def_token_id = self . token_arena . alloc ( Shared :: clone ( def_token) ) ;
1163- let params = self . parse_params ( ) ?;
1163+ let params = if self . is_next_token ( |token| matches ! ( token, TokenKind :: Colon | TokenKind :: Do ) ) {
1164+ SmallVec :: new ( )
1165+ } else {
1166+ self . parse_params ( ) ?
1167+ } ;
11641168
11651169 self . consume_colon_or_do ( ) ;
11661170
@@ -6768,6 +6772,48 @@ mod tests {
67686772 token( TokenKind :: RParen ) ,
67696773 ] ,
67706774 Err ( SyntaxError :: MultipleVariadicParameters ( Token { range: Range :: default ( ) , kind: TokenKind :: Asterisk , module_id: 1 . into( ) } ) ) ) ]
6775+ #[ case:: def_without_params(
6776+ vec![
6777+ token( TokenKind :: Def ) ,
6778+ token( TokenKind :: Ident ( SmolStr :: new( "f" ) ) ) ,
6779+ token( TokenKind :: Colon ) ,
6780+ token( TokenKind :: Ident ( SmolStr :: new( "args" ) ) ) ,
6781+ token( TokenKind :: SemiColon )
6782+ ] ,
6783+ Ok ( vec![
6784+ Shared :: new( Node {
6785+ token_id: 0 . into( ) ,
6786+ expr: Shared :: new( Expr :: Def (
6787+ IdentWithToken :: new_with_token( "f" , Some ( Shared :: new( token( TokenKind :: Ident ( SmolStr :: new( "f" ) ) ) ) ) ) ,
6788+ smallvec![ ] ,
6789+ vec![ Shared :: new( Node {
6790+ token_id: 2 . into( ) ,
6791+ expr: Shared :: new( Expr :: Ident ( IdentWithToken :: new_with_token( "args" , Some ( Shared :: new( token( TokenKind :: Ident ( SmolStr :: new( "args" ) ) ) ) ) ) ) ) ,
6792+ } ) ] ,
6793+ ) ) ,
6794+ } ) ,
6795+ ] ) ) ]
6796+ #[ case:: def_without_params_with_do(
6797+ vec![
6798+ token( TokenKind :: Def ) ,
6799+ token( TokenKind :: Ident ( SmolStr :: new( "f" ) ) ) ,
6800+ token( TokenKind :: Do ) ,
6801+ token( TokenKind :: Ident ( SmolStr :: new( "args" ) ) ) ,
6802+ token( TokenKind :: SemiColon )
6803+ ] ,
6804+ Ok ( vec![
6805+ Shared :: new( Node {
6806+ token_id: 0 . into( ) ,
6807+ expr: Shared :: new( Expr :: Def (
6808+ IdentWithToken :: new_with_token( "f" , Some ( Shared :: new( token( TokenKind :: Ident ( SmolStr :: new( "f" ) ) ) ) ) ) ,
6809+ smallvec![ ] ,
6810+ vec![ Shared :: new( Node {
6811+ token_id: 2 . into( ) ,
6812+ expr: Shared :: new( Expr :: Ident ( IdentWithToken :: new_with_token( "args" , Some ( Shared :: new( token( TokenKind :: Ident ( SmolStr :: new( "args" ) ) ) ) ) ) ) ) ,
6813+ } ) ] ,
6814+ ) ) ,
6815+ } ) ,
6816+ ] ) ) ]
67716817 #[ case:: macro_variadic_param(
67726818 vec![
67736819 token( TokenKind :: Macro ) ,
0 commit comments