Check-in [4df56a9e7e]
Not logged in
Overview

SHA1 Hash:4df56a9e7eb00cf5f8a7282b1b6ea8eb7f7df6b1
Date: 2007-10-13 23:42:08
User: aku
Comment:For the record an alternative design for the main method of the pass manager where the four principal loops (skip, setup, run, and defer) are merged into two (skip/setup) and (run/defer). Not really less code, also more complex to understand and maintain. The fact that 'setup' and 'run' is performed for the same passes is more difficult to see. This code will not be used.
Timelines: ancestors | descendants | both | trunk
Other Links: files | ZIP archive | manifest

Tags And Properties
Changes
[hide diffs]

Modified tools/cvs2fossil/lib/c2f_pass.tcl from [ddf979344e] to [dbcd2bfeb0].

@@ -95,38 +95,48 @@
 	}
     }
 
     typemethod run {} {
 	if {$mystart < 0} {set mystart 0}
-	if {$myend   < 0} {set myend [expr {[llength $mypasses] - 1}]}
+	if {$myend   < 0} {set myend end}
 
 	# TODO: Timing statistics for the passes.
 	# TODO: Artifact manager (clean after pass?. need to know skipped/defered passes ?)
 	# TODO:
 	# TODO:
 
-	set skipped [lrange $mypasses 0 [expr {$mystart - 1}]]
-	set run     [lrange $mypasses $mystart $myend]
-	set defered [lrange $mypasses [expr {$myend + 1}] end]
-
-	foreach p $skipped {
-	    log write 0 pass "Skip  $p"
-	    Call $p load
-	}
-	foreach p $run {
-	    log write 0 pass "Setup $p"
-	    Call $p setup
+	set firstrun [lindex $mypasses $mystart]
+	set lastrun  [lindex $mypasses $myend]
+
+	# We have in principle four loops here (skip, setup, run, and
+	# defer). These are however merged into two, skip/setup, and
+	# run/defer.
+
+	set skip 1
+	foreach p [lrange $mypasses 0 $myend] {
+	    if {$p eq $firstrun} {set skip 0}
+	    if {$skip} {
+		log write 0 pass "Skip  $p"
+		Call $p load
+	    } else {
+		log write 0 pass "Setup $p"
+		Call $p setup
+	    }
 	}
-	foreach p $run {
-	    log write 0 pass "Begin $p"
-	    Call $p run
-	    log write 0 pass "Done  $p"
-	    trouble abort?
-	}
-	foreach p $defered {
-	    log write 0 pass "Defer $p"
-	    Call $p discard
+
+	set run 1
+	foreach p [lrange $mypasses $mystart end] {
+	    if {$run} {
+		log write 0 pass "Begin $p"
+		Call $p run
+		log write 0 pass "Done  $p"
+		trouble abort?
+	    } else {
+		log write 0 pass "Defer $p"
+		Call $p discard
+	    }
+	    if {$p eq $lastrun} {set run 0}
 	}
 
 	state release
 	return
     }