@@ -346,23 +346,27 @@ fn subscript(sbscrpt: &Subscript, val: &Value, plan: Plan, symbols: SymbolTableR
346346 _ => todo ! ( ) ,
347347 }
348348 } ,
349- Subscript :: Range ( x) => todo ! ( ) ,
349+ Subscript :: Range ( rng) => {
350+ let result = range ( rng, plan. clone ( ) , symbols. clone ( ) , functions. clone ( ) ) ?;
351+ match result. as_vecusize ( ) {
352+ Some ( v) => Ok ( v. to_value ( ) ) ,
353+ None => Err ( MechError { tokens : vec ! [ ] , msg : file ! ( ) . to_string ( ) , id : line ! ( ) , kind : MechErrorKind :: UnhandledIndexKind } ) ,
354+ }
355+ } ,
350356 Subscript :: Swizzle ( x) => todo ! ( ) ,
351- Subscript :: Formula ( fctr) => { return factor ( fctr, plan. clone ( ) , symbols. clone ( ) , functions. clone ( ) ) ; } ,
357+ Subscript :: Formula ( fctr) => {
358+ let result = factor ( fctr, plan. clone ( ) , symbols. clone ( ) , functions. clone ( ) ) ?;
359+ result. as_index ( )
360+ } ,
352361 Subscript :: Bracket ( subs) => {
353362 let mut resolved_subs = vec ! [ ] ;
354363 for s in subs {
355364 let result = subscript ( & s, val, plan. clone ( ) , symbols. clone ( ) , functions. clone ( ) ) ?;
356- match result. as_index ( ) {
357- Some ( ix) => resolved_subs. push ( ix) ,
358- None => { return Err ( MechError { tokens : vec ! [ ] , msg : file ! ( ) . to_string ( ) , id : line ! ( ) , kind : MechErrorKind :: UnhandledIndexKind } ) ; }
359- }
365+ resolved_subs. push ( result) ;
360366 }
361- let sub_value = match resolved_subs. len ( ) {
362- 1 => resolved_subs[ 0 ] . clone ( ) ,
363- x => resolved_subs. iter ( ) . map ( |s| s. as_usize ( ) . unwrap ( ) ) . collect :: < Vec < usize > > ( ) . to_value ( ) ,
364- } ;
365- let new_fxn = MatrixAccess { } . compile ( & vec ! [ val. clone( ) , sub_value] ) ?;
367+ let mut fxn_input = vec ! [ val. clone( ) ] ;
368+ fxn_input. append ( & mut resolved_subs) ;
369+ let new_fxn = MatrixAccess { } . compile ( & fxn_input) ?;
366370 new_fxn. solve ( ) ;
367371 let res = new_fxn. out ( ) ;
368372 let mut plan_brrw = plan. borrow_mut ( ) ;
0 commit comments