~ chicken-core (chicken-5) 2f5952b92b48207161dd4252a0888b14cc7c5cca


commit 2f5952b92b48207161dd4252a0888b14cc7c5cca
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Sep 2 15:55:57 2016 +0200
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Sat Sep 10 12:32:21 2016 +0200

    feathers: fixed use of source file search path
    
    Signed-off-by: Peter Bex <peter@more-magic.net>

diff --git a/NEWS b/NEWS
index b148866a..629a12ca 100644
--- a/NEWS
+++ b/NEWS
@@ -43,6 +43,7 @@
 
 - Tools
   - Feathers now has a more neutral color scheme and larger font size.
+  - With the -dir option, feathers can now correctly find source code.
 
 - Runtime system:
   - The calling convention of CPS procedures has been changed to
diff --git a/feathers.tcl b/feathers.tcl
index 0e678888..59451f37 100644
--- a/feathers.tcl
+++ b/feathers.tcl
@@ -1420,24 +1420,41 @@ proc ExtractLocation args {
 }
 
 
+proc LocateFile {fname} {
+    global search_path
+
+    foreach d $search_path {
+        set fn [file join $d $fname]
+
+        if {[file exists $fn]} {
+            set fn [file normalize $fn]
+            Log "Located: $fn"
+            return $fn
+        }
+    }
+
+    return ""
+}
+
+
 proc InsertDebugInfo {index event args} {
     global file_list globals
     set loc [eval ExtractLocation $args]
 
-    # chck for assignment event
+    # check for assignment event
     if {$event == 1} {
         set name [lindex $args 1]
         lappend globals($name) $index
     }
 
     if {$loc != ""} {
-        set fname [file normalize [lindex $loc 0]]
-        set line [lindex $loc 1]
+        set fname [LocateFile [lindex $loc 0]]
 
         if {[lsearch -exact $file_list $fname] == -1} {
             lappend file_list $fname
         }
 
+        set line [lindex $loc 1]
         # icky: compute array variable name from filename:
         set tname "file:$fname"
         global $tname
@@ -1696,19 +1713,11 @@ proc LocateEvent {loc val} {
     set loc [ExtractLocation $loc $val]
 
     if {$loc != ""} {
-        set fname [file normalize [lindex $loc 0]]
+        set fname0 [lindex $loc 0]
+        set fname [LocateFile [lindex $loc 0]]
         set line [lindex $loc 1]
 
         if {$fname != $current_filename} {
-            foreach d $search_path {
-                set fn [file join $d $fname]
-
-                if {[file exists $fn]} {
-                    set fname $fn
-                    break
-                }
-            }
-
             if {![LoadFile $fname]} return
 
             if {[SwitchFile $fname]} ApplyTags
Trap