From f5bb9ab57b9153775a9ffca7322173ec424d4669 Mon Sep 17 00:00:00 2001
From: Titus Wormer <tituswormer@gmail.com>
Date: Tue, 21 Jun 2022 18:09:24 +0200
Subject: Add support for capping destination (raw) balance

---
 src/construct/definition.rs          | 1 +
 src/construct/partial_destination.rs | 7 +++----
 2 files changed, 4 insertions(+), 4 deletions(-)

(limited to 'src/construct')

diff --git a/src/construct/definition.rs b/src/construct/definition.rs
index 69d8d9b..f8dc249 100644
--- a/src/construct/definition.rs
+++ b/src/construct/definition.rs
@@ -173,6 +173,7 @@ fn destination_before(tokenizer: &mut Tokenizer, code: Code) -> StateFnResult {
                     t,
                     c,
                     DestinationOptions {
+                        limit: usize::MAX,
                         destination: TokenType::DefinitionDestination,
                         literal: TokenType::DefinitionDestinationLiteral,
                         marker: TokenType::DefinitionDestinationLiteralMarker,
diff --git a/src/construct/partial_destination.rs b/src/construct/partial_destination.rs
index 823ce99..b2ceeb8 100644
--- a/src/construct/partial_destination.rs
+++ b/src/construct/partial_destination.rs
@@ -57,6 +57,8 @@ pub struct Options {
     pub raw: TokenType,
     /// Token for a the string.
     pub string: TokenType,
+    /// Maximum unbalanced parens.
+    pub limit: usize,
 }
 
 /// State needed to parse destination.
@@ -176,12 +178,9 @@ fn enclosed_escape(tokenizer: &mut Tokenizer, code: Code, info: Info) -> StateFn
 /// a|b
 /// ```
 fn raw(tokenizer: &mut Tokenizer, code: Code, mut info: Info) -> StateFnResult {
-    // To do: configurable.
-    let limit = usize::MAX;
-
     match code {
         Code::Char('(') => {
-            if info.balance >= limit {
+            if info.balance >= info.options.limit {
                 (State::Nok, None)
             } else {
                 tokenizer.consume(code);
-- 
cgit