CompileUnit::ResolveSymbolContext was only filling in the LineEntry regardless of...
authorJim Ingham <jingham@apple.com>
Mon, 21 May 2012 23:06:47 +0000 (23:06 +0000)
committerJim Ingham <jingham@apple.com>
Mon, 21 May 2012 23:06:47 +0000 (23:06 +0000)
llvm-svn: 157217

lldb/source/Symbol/CompileUnit.cpp

index 4047ce4..ac57d88 100644 (file)
@@ -336,18 +336,30 @@ CompileUnit::ResolveSymbolContext
                 // We only have a single support file that matches, so use
                 // the line table function that searches for a line entries
                 // that match a single support file index
-                line_idx = line_table->FindLineEntryIndexByFileIndex (0, file_indexes.front(), line, exact, &sc.line_entry);
+                LineEntry line_entry;
+                line_idx = line_table->FindLineEntryIndexByFileIndex (0, file_indexes.front(), line, exact, &line_entry);
 
                 // If "exact == true", then "found_line" will be the same
                 // as "line". If "exact == false", the "found_line" will be the
                 // closest line entry with a line number greater than "line" and 
                 // we will use this for our subsequent line exact matches below.
-                found_line = sc.line_entry.line;
+                found_line = line_entry.line;
 
                 while (line_idx != UINT32_MAX)
                 {
+                    // If they only asked for the line entry, then we're done, we can just copy that over.
+                    // But if they wanted more than just the line number, fill it in.
+                    if (resolve_scope == eSymbolContextLineEntry)
+                    {
+                        sc.line_entry = line_entry;
+                    }
+                    else
+                    {
+                        line_entry.range.GetBaseAddress().CalculateSymbolContext(&sc, resolve_scope);
+                    }
+                    
                     sc_list.Append(sc);
-                    line_idx = line_table->FindLineEntryIndexByFileIndex (line_idx + 1, file_indexes.front(), found_line, true, &sc.line_entry);
+                    line_idx = line_table->FindLineEntryIndexByFileIndex (line_idx + 1, file_indexes.front(), found_line, true, &line_entry);
                 }
             }
             else
@@ -355,18 +367,28 @@ CompileUnit::ResolveSymbolContext
                 // We found multiple support files that match "file_spec" so use
                 // the line table function that searches for a line entries
                 // that match a multiple support file indexes.
-                line_idx = line_table->FindLineEntryIndexByFileIndex (0, file_indexes, line, exact, &sc.line_entry);
+                LineEntry line_entry;
+                line_idx = line_table->FindLineEntryIndexByFileIndex (0, file_indexes, line, exact, &line_entry);
 
                 // If "exact == true", then "found_line" will be the same
                 // as "line". If "exact == false", the "found_line" will be the
                 // closest line entry with a line number greater than "line" and 
                 // we will use this for our subsequent line exact matches below.
-                found_line = sc.line_entry.line;
+                found_line = line_entry.line;
 
                 while (line_idx != UINT32_MAX)
                 {
+                    if (resolve_scope == eSymbolContextLineEntry)
+                    {
+                        sc.line_entry = line_entry;
+                    }
+                    else
+                    {
+                        line_entry.range.GetBaseAddress().CalculateSymbolContext(&sc, resolve_scope);
+                    }
+                    
                     sc_list.Append(sc);
-                    line_idx = line_table->FindLineEntryIndexByFileIndex (line_idx + 1, file_indexes, found_line, true, &sc.line_entry);
+                    line_idx = line_table->FindLineEntryIndexByFileIndex (line_idx + 1, file_indexes, found_line, true, &line_entry);
                 }
             }
         }