From 93f039ad6f7eb1cecb69193737dad515f8b16954 Mon Sep 17 00:00:00 2001
From: "Sven M. Hallberg" <pesco@khjk.org>
Date: Sat, 8 Feb 2020 21:59:12 +0100
Subject: [PATCH] reuse 'nat' for 'intg', now that it is just a synonym for
 'digits'

---
 pdf.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/pdf.c b/pdf.c
index 6514f50..1f869c1 100644
--- a/pdf.c
+++ b/pdf.c
@@ -251,15 +251,15 @@ act_pnat(const HParseResult *p, void *u)
 	return H_MAKE_UINT(x);
 }
 
+/* p = (sign, nat) */
 HParsedToken *
 act_intg(const HParseResult *p, void *u)
 {
-	int64_t x = 0;
-	HCountedArray *seq = H_FIELD_SEQ(1);
+	uint64_t xu = H_FIELD_UINT(1);
+	int64_t x;
 
-	// XXX check for overflow
-	for (size_t i = 0; i < seq->used; i++)
-		x = x*10 + H_CAST_UINT(seq->elements[i]);
+	assert(xu <= INT64_MAX);	// XXX add a validation to ensure this
+	x = xu;
 
 	HParsedToken *sgn = H_INDEX_TOKEN(p->ast, 0);
 	if (sgn->token_type == TT_BYTES &&
@@ -525,7 +525,8 @@ init_parser(struct Env *aux)
 	H_RULE(end,	h_end_p());
 	H_RULE(epsilon,	h_epsilon_p());
 	H_RULE(empty,	SEQ(epsilon));
-	H_ARULE(nat,	h_many1(digit));
+	H_RULE(digits,	h_many1(digit));
+	H_ARULE(nat,	digits);
 	H_ARULE(pnat,	SEQ(h_many(zero), pdigit, h_many(digit)));
 	H_RULE(npair,	SEQ(pnat, wel,ws, nat));
 
@@ -540,8 +541,7 @@ init_parser(struct Env *aux)
 	H_RULE(boole,	CHX(TOK(LIT("true")), TOK(LIT("false"))));
 
 	/* numbers */
-	H_RULE(digits,	h_many1(digit));
-	H_ARULE(intg,	TOK(SEQ(h_optional(sign), digits)));
+	H_ARULE(intg,	TOK(SEQ(h_optional(sign), nat)));
 	H_RULE(realnn,	CHX(SEQ(digits, period, digits),	/* 12.3 */
 			    SEQ(digits, period, empty),		/* 123. */
 			    SEQ(empty, period, digits)));	/* .123 */
-- 
GitLab