From 0f33caf4c1ee4d1f95d6ac3a41b5cf2f8efa7b54 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sat, 16 Mar 2019 22:41:22 +0100 Subject: Use Box more uniformly in AST Closes #28 --- dhall_core/src/parser.rs | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) (limited to 'dhall_core/src/parser.rs') diff --git a/dhall_core/src/parser.rs b/dhall_core/src/parser.rs index 9cbd878..b2955fb 100644 --- a/dhall_core/src/parser.rs +++ b/dhall_core/src/parser.rs @@ -437,7 +437,7 @@ rule!(double_quote_literal; // TODO: parse escapes rule!(double_quote_chunk>; children!(c: interpolation) => { - OwnedInterpolatedTextContents::Expr(*c) + OwnedInterpolatedTextContents::Expr(c) }, captured_str!(s) => { OwnedInterpolatedTextContents::Text(s) @@ -461,7 +461,7 @@ rule!(interpolation; rule!(single_quote_continue>>; children!(c: interpolation, rest: single_quote_continue) => { - rest.push(OwnedInterpolatedTextContents::Expr(*c)); rest + rest.push(OwnedInterpolatedTextContents::Expr(c)); rest }, children!(c: escaped_quote_pair, rest: single_quote_continue) => { rest.push(OwnedInterpolatedTextContents::Text(c)); rest @@ -746,7 +746,7 @@ rule!(annotated_expression; rule!(application_expression; children!(first: expression, rest*: expression) => { - let rest: Vec<_> = rest.map(|x| *x).collect(); + let rest: Vec<_> = rest.collect(); if rest.is_empty() { first } else { @@ -799,27 +799,23 @@ rule!(empty_record_type; rule!(non_empty_record_type_or_literal; children!(first_label: label, rest: non_empty_record_type) => { let (first_expr, mut map) = rest; - map.insert(first_label, *first_expr); + map.insert(first_label, first_expr); bx(Expr::Record(map)) }, children!(first_label: label, rest: non_empty_record_literal) => { let (first_expr, mut map) = rest; - map.insert(first_label, *first_expr); + map.insert(first_label, first_expr); bx(Expr::RecordLit(map)) }, ); -rule!(non_empty_record_type<(BoxExpr, BTreeMap)>; +rule!(non_empty_record_type<(BoxExpr, BTreeMap)>; self!(x: partial_record_entries) => x ); -named!(partial_record_entries<(BoxExpr, BTreeMap)>; +named!(partial_record_entries<(BoxExpr, BTreeMap)>; children!(expr: expression, entries*: record_entry) => { - let mut map: BTreeMap = BTreeMap::new(); - for (n, e) in entries { - map.insert(n, *e); - } - (expr, map) + (expr, entries.collect()) } ); @@ -827,7 +823,7 @@ named!(record_entry<(Label, BoxExpr)>; children!(name: label, expr: expression) => (name, expr) ); -rule!(non_empty_record_literal<(BoxExpr, BTreeMap)>; +rule!(non_empty_record_literal<(BoxExpr, BTreeMap)>; self!(x: partial_record_entries) => x ); @@ -846,29 +842,25 @@ rule!(union_type_or_literal; rule!(empty_union_type<()>; children!() => ()); rule!(non_empty_union_type_or_literal - <(Option<(Label, BoxExpr)>, BTreeMap)>; + <(Option<(Label, BoxExpr)>, BTreeMap)>; children!(l: label, e: expression, entries: union_type_entries) => { (Some((l, e)), entries) }, children!(l: label, e: expression, rest: non_empty_union_type_or_literal) => { let (x, mut entries) = rest; - entries.insert(l, *e); + entries.insert(l, e); (x, entries) }, children!(l: label, e: expression) => { let mut entries = BTreeMap::new(); - entries.insert(l, *e); + entries.insert(l, e); (None, entries) }, ); -rule!(union_type_entries>; +rule!(union_type_entries>; children!(entries*: union_type_entry) => { - let mut map: BTreeMap = BTreeMap::new(); - for (n, e) in entries { - map.insert(n, *e); - } - map + entries.collect() } ); @@ -878,7 +870,7 @@ rule!(union_type_entry<(Label, BoxExpr)>; rule!(non_empty_list_literal_raw; children!(items*: expression) => { - bx(Expr::ListLit(None, items.map(|x| *x).collect())) + bx(Expr::ListLit(None, items.collect())) } ); -- cgit v1.2.3