@@ -155,19 +155,18 @@ impl<'a> VM<'a> {
155155 let a = self . stack [ len - 2 ] ;
156156 let b = self . stack [ len - 1 ] ;
157157 let result = match fast {
158+ FastOp :: AddFloat if a. is_float ( ) && b. is_float ( ) => Val :: float ( a. as_float ( ) + b. as_float ( ) ) ,
158159 FastOp :: AddInt if a. is_int ( ) && b. is_int ( ) => {
159160 let r = a. as_int ( ) as i128 + b. as_int ( ) as i128 ;
160- if r >= Val :: INT_MIN as i128 && r <= Val :: INT_MAX as i128 { Val :: int ( r as i64 ) } else { Val :: float ( r as f64 ) }
161+ if r >= Val :: INT_MIN as i128 && r <= Val :: INT_MAX as i128 { Val :: int ( r as i64 ) } else { return Ok ( false ) ; }
161162 }
162- FastOp :: AddFloat if a. is_float ( ) && b. is_float ( ) => Val :: float ( a. as_float ( ) + b. as_float ( ) ) ,
163163 FastOp :: SubInt if a. is_int ( ) && b. is_int ( ) => {
164164 let r = a. as_int ( ) as i128 - b. as_int ( ) as i128 ;
165- if r >= Val :: INT_MIN as i128 && r <= Val :: INT_MAX as i128 { Val :: int ( r as i64 ) } else { Val :: float ( r as f64 ) }
165+ if r >= Val :: INT_MIN as i128 && r <= Val :: INT_MAX as i128 { Val :: int ( r as i64 ) } else { return Ok ( false ) ; }
166166 }
167- FastOp :: SubFloat if a. is_float ( ) && b. is_float ( ) => Val :: float ( a. as_float ( ) - b. as_float ( ) ) ,
168167 FastOp :: MulInt if a. is_int ( ) && b. is_int ( ) => {
169168 let r = a. as_int ( ) as i128 * b. as_int ( ) as i128 ;
170- if r >= Val :: INT_MIN as i128 && r <= Val :: INT_MAX as i128 { Val :: int ( r as i64 ) } else { Val :: float ( r as f64 ) }
169+ if r >= Val :: INT_MIN as i128 && r <= Val :: INT_MAX as i128 { Val :: int ( r as i64 ) } else { return Ok ( false ) ; }
171170 }
172171 FastOp :: MulFloat if a. is_float ( ) && b. is_float ( ) => Val :: float ( a. as_float ( ) * b. as_float ( ) ) ,
173172 FastOp :: LtInt if a. is_int ( ) && b. is_int ( ) => Val :: bool ( a. as_int ( ) < b. as_int ( ) ) ,
0 commit comments