From 6724c8dff3c4a44f9c214665a3bcea85b25b2862 Mon Sep 17 00:00:00 2001 From: felipegchi Date: Thu, 1 Dec 2022 16:58:33 -0300 Subject: [PATCH 1/3] fix: string cons and nil are called when string is required --- crates/kind-derive/src/subst.rs | 2 +- crates/kind-pass/src/unbound/mod.rs | 21 +++++++++++++++++++-- crates/kind-tree/src/concrete/visitor.rs | 8 ++++---- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/crates/kind-derive/src/subst.rs b/crates/kind-derive/src/subst.rs index 35aab281..d2b792e0 100644 --- a/crates/kind-derive/src/subst.rs +++ b/crates/kind-derive/src/subst.rs @@ -182,7 +182,7 @@ impl<'a> Visitor for Subst<'a> { self.visit_expr(val); self.visit_expr(typ); } - ExprKind::Lit { lit } => self.visit_literal(lit), + ExprKind::Lit { lit } => self.visit_literal(expr.range, lit), ExprKind::Binary { op: _, fst, snd } => { self.visit_expr(fst); self.visit_expr(snd); diff --git a/crates/kind-pass/src/unbound/mod.rs b/crates/kind-pass/src/unbound/mod.rs index db88bcd7..55d3346c 100644 --- a/crates/kind-pass/src/unbound/mod.rs +++ b/crates/kind-pass/src/unbound/mod.rs @@ -334,7 +334,11 @@ impl Visitor for UnboundCollector { fn visit_pat(&mut self, pat: &mut Pat) { match &mut pat.data { PatKind::Var(ident) => self.visit_pat_ident(ident), - PatKind::Str(_) => (), + PatKind::Str(_) => { + let string = &mut QualifiedIdent::new_static("String", None, pat.range); + self.visit_qualified_ident(&mut string.add_segment("cons").to_generated()); + self.visit_qualified_ident(&mut string.add_segment("nil").to_generated()); + } PatKind::U60(_) => (), PatKind::U120(_) => (), PatKind::F60(_) => (), @@ -393,6 +397,19 @@ impl Visitor for UnboundCollector { } } + fn visit_literal(&mut self, range: Range, lit: &mut kind_tree::concrete::Literal) { + use kind_tree::concrete::Literal::*; + + match lit { + String(_) => { + let string = &mut QualifiedIdent::new_static("String", None, range); + self.visit_qualified_ident(&mut string.add_segment("cons").to_generated()); + self.visit_qualified_ident(&mut string.add_segment("nil").to_generated()); + } + _ => (), + } + } + fn visit_expr(&mut self, expr: &mut Expr) { match &mut expr.data { ExprKind::Var { name } => self.visit_ident(name), @@ -439,7 +456,7 @@ impl Visitor for UnboundCollector { self.visit_expr(val); self.visit_expr(typ); } - ExprKind::Lit { lit } => self.visit_literal(lit), + ExprKind::Lit { lit } => self.visit_literal(expr.range, lit), ExprKind::Binary { op: _, fst, snd } => { self.visit_expr(fst); self.visit_expr(snd); diff --git a/crates/kind-tree/src/concrete/visitor.rs b/crates/kind-tree/src/concrete/visitor.rs index 0a789364..68ed149e 100644 --- a/crates/kind-tree/src/concrete/visitor.rs +++ b/crates/kind-tree/src/concrete/visitor.rs @@ -56,8 +56,8 @@ pub trait Visitor: Sized { walk_syntax_ctx(self, synt); } - fn visit_literal(&mut self, lit: &mut Literal) { - walk_literal(self, lit); + fn visit_literal(&mut self, range: Range, lit: &mut Literal) { + walk_literal(self, range, lit); } fn visit_pat_ident(&mut self, ident: &mut PatIdent) { @@ -145,7 +145,7 @@ pub fn walk_range(_: &mut T, _: &mut Range) {} pub fn walk_syntax_ctx(_: &mut T, _: &mut SyntaxCtxIndex) {} -pub fn walk_literal(_: &mut T, _: &mut Literal) {} +pub fn walk_literal( _: &mut T, _: Range, _: &mut Literal) {} pub fn walk_constructor(ctx: &mut T, cons: &mut Constructor) { ctx.visit_ident(&mut cons.name); @@ -463,7 +463,7 @@ pub fn walk_expr(ctx: &mut T, expr: &mut Expr) { ctx.visit_expr(typ); } ExprKind::Lit { lit } => { - ctx.visit_literal(lit); + ctx.visit_literal(expr.range, lit); } ExprKind::Binary { op: _, fst, snd } => { ctx.visit_expr(fst); From 3701e43ff88482fcad1de29b48f3dde58fd97f43 Mon Sep 17 00:00:00 2001 From: felipegchi Date: Thu, 1 Dec 2022 17:05:17 -0300 Subject: [PATCH 2/3] test: added test to fix string --- crates/kind-tests/suite/eval/issues/CallStr.golden | 1 + crates/kind-tests/suite/eval/issues/CallStr.kind2 | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 crates/kind-tests/suite/eval/issues/CallStr.golden create mode 100644 crates/kind-tests/suite/eval/issues/CallStr.kind2 diff --git a/crates/kind-tests/suite/eval/issues/CallStr.golden b/crates/kind-tests/suite/eval/issues/CallStr.golden new file mode 100644 index 00000000..8660dd84 --- /dev/null +++ b/crates/kind-tests/suite/eval/issues/CallStr.golden @@ -0,0 +1 @@ +"ata" \ No newline at end of file diff --git a/crates/kind-tests/suite/eval/issues/CallStr.kind2 b/crates/kind-tests/suite/eval/issues/CallStr.kind2 new file mode 100644 index 00000000..e1a7f558 --- /dev/null +++ b/crates/kind-tests/suite/eval/issues/CallStr.kind2 @@ -0,0 +1,3 @@ +Main : U60 { + "ata" +} \ No newline at end of file From aa27e4aff756a91ce65be87d17f6db4e99c7cdad Mon Sep 17 00:00:00 2001 From: felipegchi Date: Thu, 1 Dec 2022 17:09:32 -0300 Subject: [PATCH 3/3] feat: bumped version --- crates/kind-cli/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/kind-cli/Cargo.toml b/crates/kind-cli/Cargo.toml index 14acf092..ef0cecfe 100644 --- a/crates/kind-cli/Cargo.toml +++ b/crates/kind-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kind-cli" -version = "0.3.0" +version = "0.3.1" edition = "2021" description = "A pure functional functional language that uses the HVM." repository = "https://github.com/Kindelia/Kind2"