From 8ab05509b10fd56378e8d009eac2e98977557292 Mon Sep 17 00:00:00 2001 From: KtorZ Date: Thu, 22 Dec 2022 09:30:58 +0100 Subject: [PATCH] Remove Named & DiscardLabeled, now unused And unify everything into either 'Discard' or 'NamedLabeled' --- crates/aiken-lang/src/ast.rs | 19 +++++++++---------- crates/aiken-lang/src/format.rs | 11 ++++------- crates/aiken-lang/src/parser.rs | 19 +++++++++++++------ crates/aiken-lang/src/tests/parser.rs | 9 ++++++--- crates/aiken-lang/src/tipo/environment.rs | 8 ++------ crates/aiken-lang/src/tipo/expr.rs | 4 ++-- crates/aiken-lang/src/uplc.rs | 3 +-- 7 files changed, 37 insertions(+), 36 deletions(-) diff --git a/crates/aiken-lang/src/ast.rs b/crates/aiken-lang/src/ast.rs index 880dde85..68c2b795 100644 --- a/crates/aiken-lang/src/ast.rs +++ b/crates/aiken-lang/src/ast.rs @@ -408,15 +408,7 @@ impl Arg { pub enum ArgName { Discard { name: String, - location: Span, - }, - LabeledDiscard { label: String, - name: String, - location: Span, - }, - Named { - name: String, location: Span, }, NamedLabeled { @@ -429,8 +421,15 @@ pub enum ArgName { impl ArgName { pub fn get_variable_name(&self) -> Option<&str> { match self { - ArgName::Discard { .. } | ArgName::LabeledDiscard { .. } => None, - ArgName::NamedLabeled { name, .. } | ArgName::Named { name, .. } => Some(name), + ArgName::Discard { .. } => None, + ArgName::NamedLabeled { name, .. } => Some(name), + } + } + + pub fn get_label(&self) -> String { + match self { + ArgName::Discard { label, .. } => label.to_string(), + ArgName::NamedLabeled { label, .. } => label.to_string(), } } } diff --git a/crates/aiken-lang/src/format.rs b/crates/aiken-lang/src/format.rs index 05826321..8a366830 100644 --- a/crates/aiken-lang/src/format.rs +++ b/crates/aiken-lang/src/format.rs @@ -1330,10 +1330,8 @@ impl<'comments> Formatter<'comments> { fn docs_fn_arg_name<'a>(&mut self, arg_name: &'a ArgName) -> Document<'a> { match arg_name { - ArgName::Named { .. } | ArgName::Discard { .. } => "".to_doc(), - ArgName::LabeledDiscard { label, .. } | ArgName::NamedLabeled { label, .. } => { - label.to_doc().append(": ") - } + ArgName::Discard { .. } => "".to_doc(), + ArgName::NamedLabeled { label, .. } => label.to_doc().append(": "), } } @@ -1591,9 +1589,8 @@ impl<'comments> Formatter<'comments> { impl<'a> Documentable<'a> for &'a ArgName { fn to_doc(self) -> Document<'a> { match self { - ArgName::Named { name, .. } | ArgName::Discard { name, .. } => name.to_doc(), - ArgName::LabeledDiscard { label, name, .. } - | ArgName::NamedLabeled { label, name, .. } => { + ArgName::Discard { name, .. } => name.to_doc(), + ArgName::NamedLabeled { label, name, .. } => { if label == name { name.to_doc() } else { diff --git a/crates/aiken-lang/src/parser.rs b/crates/aiken-lang/src/parser.rs index 88eec7d4..4129a729 100644 --- a/crates/aiken-lang/src/parser.rs +++ b/crates/aiken-lang/src/parser.rs @@ -496,13 +496,14 @@ pub fn fn_param_parser() -> impl Parser name} .then(select! {Token::DiscardName {name} => name}) - .map_with_span(|(label, name), span| ast::ArgName::LabeledDiscard { + .map_with_span(|(label, name), span| ast::ArgName::Discard { label, name, location: span, }), select! {Token::DiscardName {name} => name}.map_with_span(|name, span| { ast::ArgName::Discard { + label: name.clone(), name, location: span, } @@ -536,13 +537,17 @@ pub fn anon_fn_param_parser() -> impl Parser name}.map_with_span(|name, span| { ast::ArgName::Discard { + label: name.clone(), name, location: span, } }), - select! {Token::Name {name} => name}.map_with_span(|name, span| ast::ArgName::Named { - name, - location: span, + select! {Token::Name {name} => name}.map_with_span(|name, span| { + ast::ArgName::NamedLabeled { + label: name.clone(), + name, + location: span, + } }), )) .then(just(Token::Colon).ignore_then(type_parser()).or_not()) @@ -1151,11 +1156,13 @@ pub fn expr_parser( .map(|(index, a)| match a { ParserArg::Arg(arg) => *arg, ParserArg::Hole { location, label } => { + let name = format!("{}__{}", CAPTURE_VARIABLE, index); holes.push(ast::Arg { location: Span::empty(), annotation: None, - arg_name: ast::ArgName::Named { - name: format!("{}__{}", CAPTURE_VARIABLE, index), + arg_name: ast::ArgName::NamedLabeled { + label: name.clone(), + name, location: Span::empty(), }, tipo: (), diff --git a/crates/aiken-lang/src/tests/parser.rs b/crates/aiken-lang/src/tests/parser.rs index e167f277..39709339 100644 --- a/crates/aiken-lang/src/tests/parser.rs +++ b/crates/aiken-lang/src/tests/parser.rs @@ -905,7 +905,8 @@ fn anonymous_function() { location: Span::new((), 39..67), is_capture: false, arguments: vec![ast::Arg { - arg_name: ast::ArgName::Named { + arg_name: ast::ArgName::NamedLabeled { + label: "a".to_string(), name: "a".to_string(), location: Span::new((), 43..44), }, @@ -1068,7 +1069,8 @@ fn call() { location: Span::new((), 61..82), is_capture: true, arguments: vec![ast::Arg { - arg_name: ast::ArgName::Named { + arg_name: ast::ArgName::NamedLabeled { + label: "_capture__0".to_string(), name: "_capture__0".to_string(), location: Span::new((), 0..0), }, @@ -1093,7 +1095,8 @@ fn call() { location: Span::new((), 65..81), is_capture: false, arguments: vec![ast::Arg { - arg_name: ast::ArgName::Named { + arg_name: ast::ArgName::NamedLabeled { + label: "y".to_string(), name: "y".to_string(), location: Span::new((), 69..70), }, diff --git a/crates/aiken-lang/src/tipo/environment.rs b/crates/aiken-lang/src/tipo/environment.rs index e7460f58..491d3953 100644 --- a/crates/aiken-lang/src/tipo/environment.rs +++ b/crates/aiken-lang/src/tipo/environment.rs @@ -8,7 +8,7 @@ use itertools::Itertools; use crate::{ ast::{ - Annotation, ArgName, CallArg, DataType, Definition, Function, ModuleConstant, Pattern, + Annotation, CallArg, DataType, Definition, Function, ModuleConstant, Pattern, RecordConstructor, RecordConstructorArg, Span, TypeAlias, TypedDefinition, UnqualifiedImport, UntypedDefinition, Use, PIPE_VARIABLE, }, @@ -1012,11 +1012,7 @@ impl<'a> Environment<'a> { let mut field_map = FieldMap::new(args.len()); for (i, arg) in args.iter().enumerate() { - if let ArgName::NamedLabeled { label, .. } - | ArgName::LabeledDiscard { label, .. } = &arg.arg_name - { - field_map.insert(label.clone(), i, location)?; - } + field_map.insert(arg.arg_name.get_label().clone(), i, location)?; } let field_map = field_map.into_option(); diff --git a/crates/aiken-lang/src/tipo/expr.rs b/crates/aiken-lang/src/tipo/expr.rs index ba35a1e7..68c6cf9c 100644 --- a/crates/aiken-lang/src/tipo/expr.rs +++ b/crates/aiken-lang/src/tipo/expr.rs @@ -1544,7 +1544,7 @@ impl<'a, 'b> ExprTyper<'a, 'b> { let (body_rigid_names, body_infer) = self.in_new_scope(|body_typer| { for (arg, t) in args.iter().zip(args.iter().map(|arg| arg.tipo.clone())) { match &arg.arg_name { - ArgName::Named { name, .. } | ArgName::NamedLabeled { name, .. } => { + ArgName::NamedLabeled { name, .. } => { body_typer.environment.insert_variable( name.to_string(), ValueConstructorVariant::LocalVariable { @@ -1559,7 +1559,7 @@ impl<'a, 'b> ExprTyper<'a, 'b> { arg.location, ); } - ArgName::Discard { .. } | ArgName::LabeledDiscard { .. } => (), + ArgName::Discard { .. } => (), }; } diff --git a/crates/aiken-lang/src/uplc.rs b/crates/aiken-lang/src/uplc.rs index a2c99997..9bd3d3d7 100644 --- a/crates/aiken-lang/src/uplc.rs +++ b/crates/aiken-lang/src/uplc.rs @@ -1851,8 +1851,7 @@ impl<'a> CodeGenerator<'a> { for arg in function.arguments.iter() { match &arg.arg_name { - ArgName::Named { name, .. } - | ArgName::NamedLabeled { name, .. } => { + ArgName::NamedLabeled { name, .. } => { args.push(name.clone()); } _ => {