From 958ce6861a0a174245e8a60379eeffa45c49bb87 Mon Sep 17 00:00:00 2001
From: P. J. McDermott <pj@pehjota.net>
Date: Wed, 08 Feb 2017 23:12:06 -0500
Subject: eshtrans/frontend: Replace printf calls with array

This should run faster, due to the reduced forks and I/O calls, but it
doesn't seem to.

Also, this messes up the order of tokens.
---
diff --git a/eshtrans/frontend/lexer.esh b/eshtrans/frontend/lexer.esh
index 8ce6510..5854a35 100644
--- a/eshtrans/frontend/lexer.esh
+++ b/eshtrans/frontend/lexer.esh
@@ -30,6 +30,7 @@ here_queue=
 here_awaiting_end=
 here_awaiting_word=
 tok=
+tokc=
 
 #dbg()
 #{
@@ -856,6 +857,7 @@ run_sublexer()
 	here_queue=''
 	here_awaiting_end=false
 	here_awaiting_word=false
+	tokc=0
 
 	lbufi="${i}"
 	lsetc
@@ -872,6 +874,10 @@ run_sublexer()
 			;;
 	esac
 
+	eval "printf '%s' \"$(printf '${tokv_%d}' $(awk \
+		-v end=${tokc} \
+		'BEGIN { for (i = 0; i < end; ++i) print(i); }'))\""
+
 	printf "${RS}%d${RS}%d" ${lineno} ${lbufi}
 	return 0
 }
@@ -894,6 +900,7 @@ run_lexer()
 	here_queue=''
 	here_awaiting_end=false
 	here_awaiting_word=false
+	tokc=0
 
 	# Read file into array
 	eval "$(printf '%s' "${buf}" | awk -v FS='' -v j=0 \
@@ -922,6 +929,10 @@ run_lexer()
 		synexp ''
 	fi
 
+	eval "printf '%s' \"$(printf '${tokv_%d}' $(awk \
+		-v end=${tokc} \
+		'BEGIN { for (i = 0; i < end; ++i) print(i); }'))\""
+
 	return 0
 }
 
@@ -1069,7 +1080,8 @@ accept()
 	esac
 
 	#dbg "accept $t"
-	printf '%s' "${tok}${RS}"
+	eval "tokv_${tokc}=\${tok}\${RS}"
+	tokc=$((${tokc} + 1))
 	next
 	return 0
 }
--
cgit v0.9.1