about summary refs log tree commit diff stats
path: root/ntranslate
diff options
context:
space:
mode:
Diffstat (limited to 'ntranslate')
-rwxr-xr-xntranslate19
1 files changed, 16 insertions, 3 deletions
diff --git a/ntranslate b/ntranslate
index 9b8eb28c..e1c6f99b 100755
--- a/ntranslate
+++ b/ntranslate
@@ -27,11 +27,24 @@ cat a.calls     |apps/sigils   > a.sigils
 
 cat a.sigils    |apps/tests    > a.tests
 
-cat a.tests     |apps/dquotes  > a.dquotes
+cat a.tests     |apps/assort   > a.assort
 
-cat a.dquotes   |apps/assort   > a.assort
+cat a.assort    |apps/dquotes  > a.dquotes
 
-cat a.assort    |apps/pack     > a.pack
+# A little hack. We want ntranslate to always emit identical binaries to the
+# C++ translator. The C++ translator assorts segments before it processes
+# string literals, so we follow the same order above.
+#
+# However, dquotes currently emits a separate data segment for string literals.
+# So we need to run assort a second time to clean up after it.
+#
+# Potential solutions:
+#   a) modify C++ translator to process string literals before assorting.
+#   b) clean up dquotes to assume assorted segments, and append to the
+#   existing data segment.
+cat a.dquotes   |apps/assort   > a.assort2
+
+cat a.assort2   |apps/pack     > a.pack
 
 cat a.pack      |apps/survey   > a.survey