From: Eric S. Raymond Date: Fri, 13 Feb 2004 21:30:15 +0000 (+0000) Subject: Reoder tuples from the other direction. X-Git-Tag: 1.0~113 X-Git-Url: http://thyrsus.com/gitweb/?a=commitdiff_plain;h=79b76eee7f080831db858476ecc258eb88c8e145;p=mad.git Reoder tuples from the other direction. --- diff --git a/mad b/mad index 16851aa..a39686e 100755 --- a/mad +++ b/mad @@ -208,6 +208,9 @@ def p_external_call(t): def p_external_function(t): "statement : EXTERNAL FUNCTION application" t[0] = ('external_function', tuple(t[3])) +def p_external_function0(t): + "statement : EXTERNAL FUNCTION" + t[0] = ('external_function', ()) ## FUNCTION RETURN def p_function_return(t): @@ -346,7 +349,7 @@ def p_whenever_simple(t): t[0] = ('if', t[2], t[4]) def p_whenever_complex(t): 'statement : WHENEVER expression' - t[0] = ('whenever', t[2], t[4]) + t[0] = ('whenever', t[2]) def p_whenever_or(t): 'statement : OR WHENEVER expression' t[0] = ('or', t[3]) @@ -526,13 +529,22 @@ def analyze(): else: format[var] = statement[2] # Reorder code tuples so internal functions are just after entry points + lastentry = -1 + savelist = [] + internalcount = 0 for i in range(len(deck)): (file, line, label, statement) = deck[i] if statement[0] == 'entry': lastentry = i internalcount = 1 + for line in savelist: + deck.insert(i, deck.pop(line)) + savelist = [] elif statement[0] == 'internal': - deck.insert(lastentry + internalcount, deck.pop(i)) + if lastentry != -1: + deck.insert(lastentry + internalcount, deck.pop(i)) + else: + savelist.append(i) internalcount += 1 # Reorder code tuples so SET LIST arrays are global. firstentry = -1 @@ -600,7 +612,7 @@ def analyze(): deck[i] = (file, line, label, ('entry', name, prev[1])) break elif prev[0] == 'entry': - croak(prev, "multiple ENTRY points are not supported") + croak(deck[i-j-1],"multiple ENTRY points are not supported") else: croak(deck[i], 'no EXTERNAL declaration matches this ENTRY')