From 7969c86fa2c05695fea98e554b93a8110cfd09db Mon Sep 17 00:00:00 2001 From: Shunsuke Shibayama Date: Mon, 26 Dec 2022 23:31:43 +0900 Subject: [PATCH] Change containers mutable --- Cargo.lock | 8 ++++---- README.md | 1 + crates/py2erg/convert.rs | 14 +++++++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8616bdb..ec14a43 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -206,7 +206,7 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "els" version = "0.1.13-nightly.0" -source = "git+https://github.com/erg-lang/erg-language-server?branch=main#071ddf1eae1fc6df505e0fd58521cf49dea6444f" +source = "git+https://github.com/erg-lang/erg-language-server?branch=main#ba96e0d1e86f496600b659c4a3fd70ec215587f3" dependencies = [ "erg_common", "erg_compiler", @@ -227,7 +227,7 @@ dependencies = [ [[package]] name = "erg_common" version = "0.6.0" -source = "git+https://github.com/erg-lang/erg?branch=main#a1673e83c9a13c4d7b91ad6996c7068a9b68c27b" +source = "git+https://github.com/erg-lang/erg?branch=main#f0ecf59af17df5233fc94d2227c00b9a6926242d" dependencies = [ "hermit-abi", "libc", @@ -237,7 +237,7 @@ dependencies = [ [[package]] name = "erg_compiler" version = "0.6.0" -source = "git+https://github.com/erg-lang/erg?branch=main#a1673e83c9a13c4d7b91ad6996c7068a9b68c27b" +source = "git+https://github.com/erg-lang/erg?branch=main#f0ecf59af17df5233fc94d2227c00b9a6926242d" dependencies = [ "erg_common", "erg_parser", @@ -246,7 +246,7 @@ dependencies = [ [[package]] name = "erg_parser" version = "0.6.0" -source = "git+https://github.com/erg-lang/erg?branch=main#a1673e83c9a13c4d7b91ad6996c7068a9b68c27b" +source = "git+https://github.com/erg-lang/erg?branch=main#f0ecf59af17df5233fc94d2227c00b9a6926242d" dependencies = [ "erg_common", "unicode-xid 0.2.4", diff --git a/README.md b/README.md index 5bcebab..0f00488 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,7 @@ pylyzer converts Python ASTs to Erg ASTs and passes them to Erg's type checker. * [x] local scripts resolving * [ ] local packages resolving * [ ] compound type checking +* [ ] type assertion --- diff --git a/crates/py2erg/convert.rs b/crates/py2erg/convert.rs index 83d6994..5b0ccf3 100644 --- a/crates/py2erg/convert.rs +++ b/crates/py2erg/convert.rs @@ -355,6 +355,11 @@ impl ASTConverter { (l_brace, r_brace) } + fn mutate_expr(expr: Expr) -> Expr { + let mut_op = Token::new(TokenKind::Mutate, "!", expr.ln_begin().unwrap_or(0), expr.col_begin().unwrap_or(0)); + Expr::UnaryOp(UnaryOp::new(mut_op, expr)) + } + fn convert_expr(&mut self, expr: Located) -> Expr { match expr.node { ExpressionType::Number { value } => { @@ -477,7 +482,8 @@ impl ASTConverter { .map(|ex| PosArg::new(self.convert_expr(ex))) .collect::>(); let elems = Args::new(elements, vec![], None); - Expr::Array(Array::Normal(NormalArray::new(l_sqbr, r_sqbr, elems))) + let arr = Expr::Array(Array::Normal(NormalArray::new(l_sqbr, r_sqbr, elems))); + Self::mutate_expr(arr) } ExpressionType::Set { elements } => { let (l_brace, r_brace) = Self::gen_enclosure_tokens(TokenKind::LBrace, elements.iter(), expr.location); @@ -485,7 +491,8 @@ impl ASTConverter { .map(|ex| PosArg::new(self.convert_expr(ex))) .collect::>(); let elems = Args::new(elements, vec![], None); - Expr::Set(Set::Normal(NormalSet::new(l_brace, r_brace, elems))) + let set = Expr::Set(Set::Normal(NormalSet::new(l_brace, r_brace, elems))); + Self::mutate_expr(set) } ExpressionType::Dict { elements } => { let (l_brace, r_brace) = Self::gen_enclosure_tokens(TokenKind::LBrace, elements.iter().map(|(_, v)| v), expr.location); @@ -493,7 +500,8 @@ impl ASTConverter { .map(|(k, v)| KeyValue::new(k.map(|k| self.convert_expr(k)).unwrap_or(Expr::Dummy(Dummy::empty())), self.convert_expr(v)) ).collect::>(); - Expr::Dict(Dict::Normal(NormalDict::new(l_brace, r_brace, kvs))) + let dict = Expr::Dict(Dict::Normal(NormalDict::new(l_brace, r_brace, kvs))); + Self::mutate_expr(dict) } ExpressionType::Tuple { elements } => { let elements = elements.into_iter()