@@ -36,21 +36,21 @@ pub fn resolve_expression(expr: &Expression, state: &mut State) -> Value {
3636 } ;
3737 Value :: Closure ( Box :: new ( Callable :: Function ( closure) ) )
3838 }
39- Expression :: ListMemberAccess { list , index } => {
40- let index = resolve_expression ( index , state) ;
41- let list = resolve_expression ( list , state) ;
42- if let Value :: List ( list) = list {
43- if let Value :: Number ( index ) = index {
44- if index >= 0.0 && index < list. len ( ) as f32 {
45- return list[ index as usize ] . clone ( ) ;
39+ Expression :: MemberAccess { object , key } => {
40+ let key = resolve_expression ( key , state) ;
41+ let object = resolve_expression ( object , state) ;
42+ if let Value :: List ( list) = object {
43+ if let Value :: Number ( key ) = key {
44+ if key >= 0.0 && key < list. len ( ) as f32 {
45+ return list[ key as usize ] . clone ( ) ;
4646 } else {
4747 return Value :: Null ;
4848 }
4949 } else {
5050 return Value :: Null ;
5151 }
52- } else if let Value :: Object ( object) = list {
53- if let Value :: String ( ref key) = index {
52+ } else if let Value :: Object ( object) = object {
53+ if let Value :: String ( ref key) = key {
5454 if let Some ( value) = object. get ( key) {
5555 return value. clone ( ) ;
5656 } else {
@@ -209,10 +209,10 @@ pub fn assign_expression(expr: &Expression, value: Value, state: &mut State, is_
209209 }
210210 Ok ( ( ) )
211211 }
212- Expression :: ListMemberAccess { list , index } => {
213- let index_val = resolve_expression ( index , state) ;
214- let list = get_mut_container ( list , state, is_global) ?;
215- match ( list , index_val ) {
212+ Expression :: MemberAccess { object , key } => {
213+ let key_val = resolve_expression ( key , state) ;
214+ let object = get_mut_container ( object , state, is_global) ?;
215+ match ( object , key_val ) {
216216 ( Value :: List ( list) , Value :: Number ( idx) ) => { list[ idx as usize ] = value; Ok ( ( ) ) }
217217 ( Value :: Object ( obj) , Value :: String ( s) ) => {
218218 obj. insert ( s. clone ( ) , value) ;
@@ -635,10 +635,10 @@ fn get_mut_container<'a>(
635635 }
636636 }
637637
638- Expression :: ListMemberAccess { list , index } => {
639- let index_val = crate :: utils:: resolve_expression ( index , state) ; // resolve key first
640- let container = get_mut_container ( list , state, is_global) ?; // now borrow mutable
641- match ( container, index_val ) {
638+ Expression :: MemberAccess { object , key } => {
639+ let key_val = crate :: utils:: resolve_expression ( key , state) ; // resolve key first
640+ let container = get_mut_container ( object , state, is_global) ?; // now borrow mutable
641+ match ( container, key_val ) {
642642 ( Value :: List ( list) , Value :: Number ( idx) ) => {
643643 let idx = idx as usize ;
644644 if idx >= list. len ( ) {
0 commit comments