@@ -60,7 +60,7 @@ pub(crate) enum Expression<'src> {
6060        right :  Box < Expression < ' src > > , 
6161    } , 
6262    Function  { 
63- 		 expr :  Option < Box < Expression < ' src > > > , 
63+          expr :  Option < Box < Expression < ' src > > > , 
6464        name :  & ' src  str , 
6565        arguments :  Vec < Expression < ' src > > , 
6666    } , 
@@ -184,17 +184,23 @@ impl<'src> Function<'src> {
184184                    match  tokens. next ( )  { 
185185                        Some ( ( Token :: BracketRoundOpen ,  l,  c) )  => match  tokens. next ( )  { 
186186                            Some ( ( Token :: BracketRoundClose ,  ..) )  => ( ) , 
187-                             Some ( ( pre,  ..) )  => { 
187+                             Some ( ( mut   pre,  ..) )  => { 
188188                                loop  { 
189189                                    let  ( expr,  last_tk)  = Expression :: parse ( pre,  tokens) ?; 
190190                                    args. push ( expr) ; 
191191                                    match  last_tk { 
192192                                        Some ( Token :: Comma )  => ( ) , 
193193                                        Some ( Token :: BracketRoundClose )  => break , 
194+                                         None  => err ! ( UnexpectedEOF ,  0 ,  0 ) , 
194195                                        tk => { 
195196                                            panic ! ( "Expression did not parse all tokens: {:?}" ,  tk) 
196197                                        } 
197198                                    } 
199+                                     pre = if  let  Some ( ( tk,  ..) )  = tokens. next ( )  { 
200+                                         tk
201+                                     }  else  { 
202+                                         err ! ( UnexpectedEOF ,  0 ,  0 ) ; 
203+                                     } ; 
198204                                } 
199205                                lines. push ( Statement :: Call  {  func :  name,  args } ) ; 
200206                            } 
@@ -245,6 +251,7 @@ impl<'src> Function<'src> {
245251                    } 
246252                } 
247253                Some ( ( Token :: Indent ( 0 ) ,  ..) )  | None  => return  Ok ( ( lines,  0 ) ) , 
254+                 Some ( ( Token :: Indent ( i) ,  ..) )  if  i < expected_indent => return  Ok ( ( lines,  0 ) ) , 
248255                Some ( ( Token :: Indent ( i) ,  ..) )  if  i == expected_indent => ( ) , 
249256                Some ( ( Token :: Indent ( i) ,  l,  c) )  => err ! ( UnexpectedIndent ,  i,  l,  c) , 
250257                Some ( ( tk,  ..) )  => todo ! ( "{:?}" ,  tk) , 
@@ -293,8 +300,15 @@ impl<'src> Expression<'src> {
293300                            None  => err ! ( UnexpectedEOF ,  0 ,  0 ) , 
294301                        } 
295302                    } 
296- 					let  expr = None ; 
297-                     ( Expression :: Function  {  expr,  name,  arguments } ,  None ) 
303+                     let  expr = None ; 
304+                     ( 
305+                         Expression :: Function  { 
306+                             expr, 
307+                             name, 
308+                             arguments, 
309+                         } , 
310+                         None , 
311+                     ) 
298312                } 
299313                Some ( ( tk,  ..) )  => ( Expression :: Atom ( Atom :: Name ( name) ) ,  Some ( tk) ) , 
300314                e => todo ! ( "{:?}" ,  e) , 
@@ -305,7 +319,7 @@ impl<'src> Expression<'src> {
305319            match  last_tk { 
306320                Token :: Op ( opl)  => match  tokens. next ( )  { 
307321                    Some ( ( Token :: Name ( mid) ,  ..) )  => { 
308- 						 let  og_mid = mid; 
322+                          let  og_mid = mid; 
309323                        let  mid = Expression :: Atom ( Atom :: Name ( mid) ) ; 
310324                        match  tokens. next ( )  { 
311325                            Some ( ( Token :: Op ( opr) ,  ..) )  => match  tokens. next ( )  { 
@@ -335,20 +349,21 @@ impl<'src> Expression<'src> {
335349                                } 
336350                                e => todo ! ( "{:?}" ,  e) , 
337351                            } , 
338- 							Some ( ( Token :: BracketRoundOpen ,  ..) )  => { 
339- 								// FIXME handle function args & check for ending brace 
340- 								tokens. next ( ) ; 
341- 								match  opl { 
342- 									Op :: Access  => { 
343- 										Ok ( ( Expression :: Function  { 
344- 											expr :  Some ( Box :: new ( lhs) ) , 
345- 											name :  og_mid, 
346- 											arguments :  Vec :: new ( ) , 
347- 										} ,  Some ( Token :: BracketRoundClose ) ) ) 
348- 									} 
349- 									e => todo ! ( "{:?}" ,  e) , 
350- 								} 
351- 							} 
352+                             Some ( ( Token :: BracketRoundOpen ,  ..) )  => { 
353+                                 // FIXME handle function args & check for ending brace 
354+                                 tokens. next ( ) ; 
355+                                 match  opl { 
356+                                     Op :: Access  => Ok ( ( 
357+                                         Expression :: Function  { 
358+                                             expr :  Some ( Box :: new ( lhs) ) , 
359+                                             name :  og_mid, 
360+                                             arguments :  Vec :: new ( ) , 
361+                                         } , 
362+                                         Some ( Token :: BracketRoundClose ) , 
363+                                     ) ) , 
364+                                     e => todo ! ( "{:?}" ,  e) , 
365+                                 } 
366+                             } 
352367                            Some ( ( tk,  ..) )  if  tk == Token :: BracketRoundClose  => Ok ( ( 
353368                                Expression :: Operation  { 
354369                                    left :  Box :: new ( lhs) , 
@@ -379,8 +394,7 @@ impl<'src> Expression<'src> {
379394                } 
380395                Some ( ( Token :: Comma ,  ..) )  => return  Ok ( ( lhs,  Some ( Token :: Comma ) ) ) , 
381396                Some ( ( Token :: Indent ( i) ,  ..) )  => return  Ok ( ( lhs,  Some ( Token :: Indent ( i) ) ) ) , 
382-                 Some ( ( tk,  ..) )  => todo ! ( "{:?}" ,  tk) , 
383-                 None  => todo ! ( "none" ) , 
397+                 e => todo ! ( "{:?}" ,  e) , 
384398            } 
385399        } 
386400    } 
0 commit comments