|
| 1 | +use core::f64; |
1 | 2 | use std::collections::HashMap; |
2 | 3 | use std::vec; |
3 | 4 |
|
@@ -3260,8 +3261,8 @@ fn parse_primary_expression( |
3260 | 3261 | } |
3261 | 3262 |
|
3262 | 3263 | match &tokens[*position].kind { |
3263 | | - TokenKind::Integer(_) => parse_const_integer_expression(tokens, position), |
3264 | | - TokenKind::Float(_) => parse_const_float_expression(tokens, position), |
| 3264 | + TokenKind::Integer(value) => Ok(Box::new(NumberExpr::int(*value))), |
| 3265 | + TokenKind::Float(value) => Ok(Box::new(NumberExpr::float(*value))), |
3265 | 3266 | TokenKind::Infinity => parse_float_infinity_or_nan_expression(tokens, position), |
3266 | 3267 | TokenKind::NaN => parse_float_infinity_or_nan_expression(tokens, position), |
3267 | 3268 | TokenKind::Symbol(_) => parse_symbol_expression(context, env, tokens, position), |
@@ -3297,64 +3298,17 @@ fn parse_primary_expression( |
3297 | 3298 | } |
3298 | 3299 | } |
3299 | 3300 |
|
3300 | | -fn parse_const_integer_expression( |
3301 | | - tokens: &[Token], |
3302 | | - position: &mut usize, |
3303 | | -) -> Result<Box<dyn Expr>, Box<Diagnostic>> { |
3304 | | - match tokens[*position].kind { |
3305 | | - TokenKind::Integer(integer) => { |
3306 | | - *position += 1; |
3307 | | - let value = Number::Int(integer); |
3308 | | - Ok(Box::new(NumberExpr { value })) |
3309 | | - } |
3310 | | - _ => Err(Diagnostic::error("Too big Integer value") |
3311 | | - .add_help("Try to use smaller value") |
3312 | | - .add_note(&format!( |
3313 | | - "Integer value must be between {} and {}", |
3314 | | - i64::MIN, |
3315 | | - i64::MAX |
3316 | | - )) |
3317 | | - .with_location(tokens[*position].location) |
3318 | | - .as_boxed()), |
3319 | | - } |
3320 | | -} |
3321 | | - |
3322 | | -fn parse_const_float_expression( |
3323 | | - tokens: &[Token], |
3324 | | - position: &mut usize, |
3325 | | -) -> Result<Box<dyn Expr>, Box<Diagnostic>> { |
3326 | | - match tokens[*position].kind { |
3327 | | - TokenKind::Float(float) => { |
3328 | | - *position += 1; |
3329 | | - let value = Number::Float(float); |
3330 | | - Ok(Box::new(NumberExpr { value })) |
3331 | | - } |
3332 | | - _ => Err(Diagnostic::error("Too big Float value") |
3333 | | - .add_help("Try to use smaller value") |
3334 | | - .add_note(&format!( |
3335 | | - "Float value must be between {} and {}", |
3336 | | - f64::MIN, |
3337 | | - f64::MAX |
3338 | | - )) |
3339 | | - .with_location(tokens[*position].location) |
3340 | | - .as_boxed()), |
3341 | | - } |
3342 | | -} |
3343 | | - |
3344 | 3301 | fn parse_float_infinity_or_nan_expression( |
3345 | 3302 | tokens: &[Token], |
3346 | 3303 | position: &mut usize, |
3347 | 3304 | ) -> Result<Box<dyn Expr>, Box<Diagnostic>> { |
3348 | | - if tokens[*position].kind == TokenKind::Infinity { |
3349 | | - *position += 1; |
3350 | | - let value = Number::Float(f64::INFINITY); |
3351 | | - return Ok(Box::new(NumberExpr { value })); |
3352 | | - } |
3353 | | - |
3354 | 3305 | *position += 1; |
3355 | | - |
3356 | | - let value = Number::Float(f64::NAN); |
3357 | | - Ok(Box::new(NumberExpr { value })) |
| 3306 | + let value = if tokens[*position].kind == TokenKind::Infinity { |
| 3307 | + f64::INFINITY |
| 3308 | + } else { |
| 3309 | + f64::NAN |
| 3310 | + }; |
| 3311 | + Ok(Box::new(NumberExpr::float(value))) |
3358 | 3312 | } |
3359 | 3313 |
|
3360 | 3314 | fn parse_symbol_expression( |
|
0 commit comments