]> thyrsus.com Git - mad.git/commitdiff
Reorder internal functions.
authorEric S. Raymond <esr@thyrsus,com>
Sun, 1 Feb 2004 16:13:09 +0000 (16:13 +0000)
committerEric S. Raymond <esr@thyrsus,com>
Sun, 1 Feb 2004 16:13:09 +0000 (16:13 +0000)
mad

diff --git a/mad b/mad
index ed6cd8cda1b13e6cf2ba0a6904d850871fd70618..fd0879295c248b945faddfc2e328ee4b9303ae9d 100755 (executable)
--- a/mad
+++ b/mad
@@ -451,9 +451,17 @@ def analyze():
                 untyped.remove(var)
             else:
                 format[var] = statement[2]
+    # Reorder code tuples so internal functions are just after entry points
+    for i in range(len(deck)):
+        (file, line, label, statement) = deck[i]
+        if statement[0] == 'entry':
+            lastentry = i
+            internalcount = 1
+        elif statement[0] == 'internal':
+            deck.insert(lastentry + internalcount, deck.pop(i))
+            internalcount += 1
     # Do type deductions from format fields
     for card in deck:
-        (file, line, label, statement) = card
         if statement[0] == 'read':
             if statement[1] not in format:
                 croak(card, "uninitialized format string" +`statement[1]`)
@@ -685,7 +693,7 @@ def print_statement(statement):
     elif statement[0] == 'if':
         return 'if (' + print_expr(statement[1]) + ') ' + print_statement(statement[2])
     elif statement[0] == 'internal':
-        return '    %s %s {return %s;}\n' % \
+        return '    %s %s {return %s;}' % \
                       (mode(statement[3]), print_expr(('apply', statement[1], statement[2])), print_expr(statement[3]))
     elif statement[0] == 'pause':
         return('printf("%o", ' + print_expr(statement[1]) + '); getchar();')