From 8039d48537f529b134a9734c9715f13b66527ab7 Mon Sep 17 00:00:00 2001
From: Mikael Vejdemo-Johansson <michiexile@gmail.com>
Date: Wed, 8 Apr 2015 13:53:45 +0200
Subject: [PATCH] removed use of h_many to get desugars

---
 examples/ties.c | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/examples/ties.c b/examples/ties.c
index 341f5ba0..42dacb4e 100644
--- a/examples/ties.c
+++ b/examples/ties.c
@@ -173,7 +173,12 @@ HParser* finkmaoTW() {
   HParser *tuck = h_choice(h_sequence(T, T, U, NULL),
 			   h_sequence(W, W, U, NULL),
 			   NULL);
-  return h_choice(h_sequence(prefix, h_many(pair), tuck, NULL), NULL);
+  HParser *pairstar = h_indirect();
+  HParser *pstar_ = h_choice(h_sequence(pair, tuckpairstar, NULL),
+			      h_epsilon_p(),
+			      NULL);
+  h_bind_indirect(pairstar, pstar_);
+  return h_choice(h_sequence(prefix, pairstar, tuck, NULL), NULL);
 }
 
 HParser* depth1TW() {
@@ -185,7 +190,13 @@ HParser* depth1TW() {
   HParser *tuck = h_choice(h_sequence(T, T, U, NULL),
 			   h_sequence(W, W, U, NULL),
 			   NULL);
-  return h_choice(h_sequence(prefix, h_many(h_choice(pair, tuck, NULL)), tuck, NULL), NULL);
+  HParser *tuckpairstar = h_indirect();
+  HParser *tpstar_ = h_choice(h_sequence(pair, tuckpairstar, NULL),
+			      h_sequence(tuck, tuckpairstar, NULL),
+			      h_epsilon_p(),
+			      NULL);
+  h_bind_indirect(tuckpairstar, tpstar_);
+  return h_choice(h_sequence(prefix, tuckpairstar, tuck, NULL), NULL);
 }
 
 HParser* depth1() {
@@ -307,9 +318,16 @@ HParser* depthNTW() {
   h_bind_indirect(wt0, wt0_);
   h_bind_indirect(wt1, wt1_);
   h_bind_indirect(wt2, wt2_);
-  
   HParser *tuck = h_choice(tstart, wstart, NULL);
-  return h_choice(h_sequence(prefix, h_many(h_choice(pair, tuck, NULL)), tuck, NULL), NULL);
+
+  HParser *tuckpairstar = h_indirect();
+  HParser *tpstar_ = h_choice(h_sequence(pair, tuckpairstar, NULL),
+			      h_sequence(tuck, tuckpairstar, NULL),
+			      h_epsilon_p(),
+			      NULL);
+  h_bind_indirect(tuckpairstar, tpstar_);
+			      
+  return h_choice(h_sequence(prefix, tuckpairstar, tuck, NULL), NULL);
 }
 
 
-- 
GitLab