From e8391ee1750229dfed6600ccd6ca0ea303bed75f Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Tue, 16 May 2023 21:56:10 +0900 Subject: [PATCH] specialize ConversionFlag --- ast/asdl_rs.py | 1 + ast/src/fold_helpers.rs | 3 ++- ast/src/gen/generic.rs | 2 +- ast/src/generic.rs | 2 +- ast/src/pyo3.rs | 9 ++++++++- ast/src/unparse.rs | 8 ++++---- .../rustpython_parser__parser__tests__try.snap | 8 ++------ ...python_parser__parser__tests__try_star.snap | 16 ++++------------ ...ring__tests__fstring_escaped_character.snap | 4 +--- ...string__tests__fstring_escaped_newline.snap | 4 +--- ...ring__tests__fstring_line_continuation.snap | 4 +--- ...s__fstring_parse_self_documenting_base.snap | 4 +--- ...tring_parse_self_documenting_base_more.snap | 8 ++------ ..._fstring_parse_self_documenting_format.snap | 4 +--- ...ring__tests__fstring_unescaped_newline.snap | 4 +--- ...string__tests__parse_f_string_concat_3.snap | 4 +--- ...n_parser__string__tests__parse_fstring.snap | 8 ++------ ...r__string__tests__parse_fstring_equals.snap | 4 +--- ...ring__tests__parse_fstring_nested_spec.snap | 8 ++------ ...tring__tests__parse_fstring_not_equals.snap | 4 +--- ...__tests__parse_fstring_not_nested_spec.snap | 4 +--- ...sts__parse_fstring_self_doc_prec_space.snap | 4 +--- ..._parse_fstring_self_doc_trailing_space.snap | 4 +--- ...tring__tests__parse_fstring_yield_expr.snap | 4 +--- ...hon_parser__string__tests__raw_fstring.snap | 4 +--- ...ring__tests__triple_quoted_raw_fstring.snap | 4 +--- parser/src/string.rs | 18 +++++++++--------- 27 files changed, 53 insertions(+), 98 deletions(-) diff --git a/ast/asdl_rs.py b/ast/asdl_rs.py index e5e5bcf..0dc4c8c 100755 --- a/ast/asdl_rs.py +++ b/ast/asdl_rs.py @@ -28,6 +28,7 @@ assert BUILTIN_TYPE_NAMES.keys() == asdl.builtin_types BUILTIN_INT_NAMES = { "simple": "bool", "is_async": "bool", + "conversion": "ConversionFlag", } RUST_KEYWORDS = { diff --git a/ast/src/fold_helpers.rs b/ast/src/fold_helpers.rs index 74c7d3c..4b54966 100644 --- a/ast/src/fold_helpers.rs +++ b/ast/src/fold_helpers.rs @@ -1,4 +1,4 @@ -use crate::{builtin, fold::Fold}; +use crate::{builtin, fold::Fold, ConversionFlag}; pub trait Foldable { type Mapped; @@ -67,5 +67,6 @@ simple_fold!( builtin::String, builtin::Identifier, bool, + ConversionFlag, builtin::Constant ); diff --git a/ast/src/gen/generic.rs b/ast/src/gen/generic.rs index fce8459..39ead97 100644 --- a/ast/src/gen/generic.rs +++ b/ast/src/gen/generic.rs @@ -931,7 +931,7 @@ impl From> for Expr { pub struct ExprFormattedValue { pub range: R, pub value: Box>, - pub conversion: Int, + pub conversion: ConversionFlag, pub format_spec: Option>>, } diff --git a/ast/src/generic.rs b/ast/src/generic.rs index 56ad5ce..318a7bf 100644 --- a/ast/src/generic.rs +++ b/ast/src/generic.rs @@ -1,5 +1,5 @@ #![allow(clippy::derive_partial_eq_without_eq)] -pub use crate::{builtin::*, text_size::TextSize, Node}; +pub use crate::{builtin::*, text_size::TextSize, ConversionFlag, Node}; use std::fmt::{Debug, Display, Formatter}; use std::marker::PhantomData; diff --git a/ast/src/pyo3.rs b/ast/src/pyo3.rs index d54a59e..b176970 100644 --- a/ast/src/pyo3.rs +++ b/ast/src/pyo3.rs @@ -1,4 +1,4 @@ -use crate::{source_code::SourceRange, text_size::TextRange, Node}; +use crate::{source_code::SourceRange, text_size::TextRange, ConversionFlag, Node}; use num_complex::Complex64; use once_cell::sync::OnceCell; use pyo3::prelude::*; @@ -73,6 +73,13 @@ impl ToPyo3Ast for bool { } } +impl ToPyo3Ast for ConversionFlag { + #[inline] + fn to_pyo3_ast(&self, py: Python) -> PyResult> { + Ok((*self as i8).to_object(py)) + } +} + impl ToPyo3Ast for crate::Constant { #[inline] fn to_pyo3_ast(&self, py: Python) -> PyResult> { diff --git a/ast/src/unparse.rs b/ast/src/unparse.rs index b68be60..ebfe99a 100644 --- a/ast/src/unparse.rs +++ b/ast/src/unparse.rs @@ -346,7 +346,7 @@ impl<'a> Unparser<'a> { conversion, format_spec, range: _range, - }) => self.unparse_formatted(value, conversion.to_u32(), format_spec.as_deref())?, + }) => self.unparse_formatted(value, *conversion, format_spec.as_deref())?, Expr::JoinedStr(crate::ExprJoinedStr { values, range: _range, @@ -519,7 +519,7 @@ impl<'a> Unparser<'a> { fn unparse_formatted( &mut self, val: &Expr, - conversion: u32, + conversion: ConversionFlag, spec: Option<&Expr>, ) -> fmt::Result { let buffered = to_string_fmt(|f| Unparser::new(f).unparse_expr(val, precedence::TEST + 1)); @@ -533,7 +533,7 @@ impl<'a> Unparser<'a> { self.p(&buffered)?; drop(buffered); - if conversion != ConversionFlag::None as u32 { + if conversion != ConversionFlag::None { self.p("!")?; let buf = &[conversion as u8]; let c = std::str::from_utf8(buf).unwrap(); @@ -568,7 +568,7 @@ impl<'a> Unparser<'a> { conversion, format_spec, range: _range, - }) => self.unparse_formatted(value, conversion.to_u32(), format_spec.as_deref()), + }) => self.unparse_formatted(value, *conversion, format_spec.as_deref()), _ => unreachable!(), } } diff --git a/parser/src/snapshots/rustpython_parser__parser__tests__try.snap b/parser/src/snapshots/rustpython_parser__parser__tests__try.snap index c147b27..55ee202 100644 --- a/parser/src/snapshots/rustpython_parser__parser__tests__try.snap +++ b/parser/src/snapshots/rustpython_parser__parser__tests__try.snap @@ -121,9 +121,7 @@ expression: parse_ast keywords: [], }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), @@ -217,9 +215,7 @@ expression: parse_ast keywords: [], }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__parser__tests__try_star.snap b/parser/src/snapshots/rustpython_parser__parser__tests__try_star.snap index 9634857..5d4700f 100644 --- a/parser/src/snapshots/rustpython_parser__parser__tests__try_star.snap +++ b/parser/src/snapshots/rustpython_parser__parser__tests__try_star.snap @@ -233,9 +233,7 @@ expression: parse_ast keywords: [], }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), @@ -269,9 +267,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), @@ -365,9 +361,7 @@ expression: parse_ast keywords: [], }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), @@ -401,9 +395,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_character.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_character.snap index 47f4b47..942ce11 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_character.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_character.snap @@ -31,9 +31,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_newline.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_newline.snap index eb5d75c..df9b65b 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_newline.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_newline.snap @@ -31,9 +31,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_line_continuation.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_line_continuation.snap index 3cae4ff..8092302 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_line_continuation.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_line_continuation.snap @@ -31,9 +31,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base.snap index 40e0bb3..66613b1 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base.snap @@ -33,9 +33,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 114, - ), + conversion: Repr, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base_more.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base_more.snap index e08a79d..8d86b0c 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base_more.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base_more.snap @@ -42,9 +42,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 114, - ), + conversion: Repr, format_spec: None, }, ), @@ -87,9 +85,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 114, - ), + conversion: Repr, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_format.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_format.snap index 69f27ea..458ca1e 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_format.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_format.snap @@ -33,9 +33,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: Some( JoinedStr( ExprJoinedStr { diff --git a/parser/src/snapshots/rustpython_parser__string__tests__fstring_unescaped_newline.snap b/parser/src/snapshots/rustpython_parser__string__tests__fstring_unescaped_newline.snap index a1d7b53..72e1f42 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__fstring_unescaped_newline.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__fstring_unescaped_newline.snap @@ -31,9 +31,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap index ee1e801..1cefb19 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap @@ -31,9 +31,7 @@ expression: parse_ast kind: None, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring.snap index 85064e8..75707ef 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring.snap @@ -15,9 +15,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), @@ -33,9 +31,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_equals.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_equals.snap index ed5516f..b000745 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_equals.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_equals.snap @@ -34,9 +34,7 @@ expression: parse_ast ], }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_nested_spec.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_nested_spec.snap index 723801b..5a1bd11 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_nested_spec.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_nested_spec.snap @@ -15,9 +15,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: Some( JoinedStr( ExprJoinedStr { @@ -35,9 +33,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_equals.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_equals.snap index 4a40d0a..c0cf8eb 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_equals.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_equals.snap @@ -34,9 +34,7 @@ expression: parse_ast ], }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_nested_spec.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_nested_spec.snap index d860d64..1331a89 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_nested_spec.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_nested_spec.snap @@ -15,9 +15,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: Some( JoinedStr( ExprJoinedStr { diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_prec_space.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_prec_space.snap index 0fb434c..d151433 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_prec_space.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_prec_space.snap @@ -33,9 +33,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 114, - ), + conversion: Repr, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_trailing_space.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_trailing_space.snap index 83daabf..8ce955b 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_trailing_space.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_trailing_space.snap @@ -33,9 +33,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 114, - ), + conversion: Repr, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_yield_expr.snap b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_yield_expr.snap index fe7d731..e2bd4ea 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_yield_expr.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_yield_expr.snap @@ -12,9 +12,7 @@ expression: parse_ast value: None, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__raw_fstring.snap b/parser/src/snapshots/rustpython_parser__string__tests__raw_fstring.snap index 9ece93c..79258ea 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__raw_fstring.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__raw_fstring.snap @@ -22,9 +22,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/snapshots/rustpython_parser__string__tests__triple_quoted_raw_fstring.snap b/parser/src/snapshots/rustpython_parser__string__tests__triple_quoted_raw_fstring.snap index 7269b46..d366010 100644 --- a/parser/src/snapshots/rustpython_parser__string__tests__triple_quoted_raw_fstring.snap +++ b/parser/src/snapshots/rustpython_parser__string__tests__triple_quoted_raw_fstring.snap @@ -22,9 +22,7 @@ expression: parse_ast ctx: Load, }, ), - conversion: Int( - 0, - ), + conversion: None, format_spec: None, }, ), diff --git a/parser/src/string.rs b/parser/src/string.rs index f1fa073..e9def12 100644 --- a/parser/src/string.rs +++ b/parser/src/string.rs @@ -5,7 +5,7 @@ // we have to do the parsing here, manually. use crate::text_size::TextRange; use crate::{ - ast::{self, Constant, Expr, Int}, + ast::{self, Constant, Expr}, lexer::{LexicalError, LexicalErrorType}, parser::{parse_expression_starts_at, LalrpopError, ParseError, ParseErrorType}, token::{StringKind, Tok}, @@ -320,7 +320,7 @@ impl<'a> StringParser<'a> { ) })?, ), - conversion: Int::new(conversion as _), + conversion, format_spec: spec, range: self.range(), } @@ -354,13 +354,13 @@ impl<'a> StringParser<'a> { ) })?, ), - conversion: ast::Int::new( - (if conversion == ConversionFlag::None && spec.is_none() { - ConversionFlag::Repr - } else { - conversion - }) as _, - ), + conversion: if conversion == ConversionFlag::None + && spec.is_none() + { + ConversionFlag::Repr + } else { + conversion + }, format_spec: spec, range: self.range(), }