From 05d9c29717f7ae31dfad9230d469af0fa7f0c761 Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Sun, 21 May 2023 18:55:31 +0200
Subject: Applied variadic index length technique

---
 src/parse.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

(limited to 'src/parse.c')

diff --git a/src/parse.c b/src/parse.c
index f6e047d..cf873c6 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -71,9 +71,14 @@ static struct term *parse_bloc_bblc(const char *term, size_t *bit)
 		(*bit)++;
 	} else if (!BIT_AT(*bit) && BIT_AT(*bit + 1) && BIT_AT(*bit + 2)) {
 		(*bit) += 3;
+
+		// selected bit pattern, see readme
+		int sel = (2 << (BIT_AT(*bit) * 2 + BIT_AT(*bit + 1) + 2));
+		(*bit) += 2;
+
 		res = new_term(REF);
-		short index = 0;
-		for (int i = 0; i < 16; i++) {
+		size_t index = 0;
+		for (int i = 0; i < sel; i++) {
 			index |= (BIT_AT(*bit) >> (7 - (*bit % 8))) << i;
 			(*bit) += 1;
 		}
-- 
cgit v1.2.3