/[eiffelstudio]/branches/eth/eve/Src/framework/code_analysis/rules/ca_rd_analysis_rule.e
ViewVC logotype

Diff of /branches/eth/eve/Src/framework/code_analysis/rules/ca_rd_analysis_rule.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 93942 by zurfluhs, Wed Jan 8 13:12:05 2014 UTC revision 93943 by zurfluhs, Thu Jan 9 13:38:38 2014 UTC
# Line 33  feature -- CFG Node Visitor Line 33  feature -- CFG Node Visitor
33    
34                                  -- Since local expanded variables are initialized to their default values we                                  -- Since local expanded variables are initialized to their default values we
35                                  -- count this as an assignment.                                  -- count this as an assignment.
36                          across current_feature.locals as l_locals loop                          if attached current_feature.locals then
37                                  across l_locals.item.id_list as l_id_list loop                                  across current_feature.locals as l_locals loop
38                                          create l_init_set.make                                          across l_locals.item.id_list as l_id_list loop
39                                          l_init_set.extend (0)                                                  create l_init_set.make
40                                          rd_entry.at (a_cfg.start_node.label).extend (l_init_set, l_id_list.item)                                                  l_init_set.extend (0)
41                                                    rd_entry.at (a_cfg.start_node.label).extend (l_init_set, l_id_list.item)
42                                            end
43                                  end                                  end
44                          end                          end
45    
# Line 105  feature {NONE} -- Implementation Line 107  feature {NONE} -- Implementation
107                  do                  do
108                          rd_changed := False                          rd_changed := False
109    
110                          l_entry_table := rd_entry.at (a_label)                          l_entry_table := rd_entry [a_label]
111                          l_exit_table := rd_exit.at (a_label)                          l_exit_table := rd_exit [a_label]
112    
113                          from l_entry_table.start                          from l_entry_table.start
114                          until l_entry_table.after loop                          until l_entry_table.after loop
# Line 116  feature {NONE} -- Implementation Line 118  feature {NONE} -- Implementation
118    
119                                  if l_exit_table.has (l_key) then                                  if l_exit_table.has (l_key) then
120                                          l_old_count := l_exit_table.at (l_key).count                                          l_old_count := l_exit_table.at (l_key).count
121                                          l_exit_table.at (l_key).copy (l_item)                                          l_exit_table [l_key].copy (l_item)
122                                          rd_changed := (l_old_count /= l_exit_table.at (l_key).count) or rd_changed                                          rd_changed := (l_old_count /= l_exit_table [l_key].count) or rd_changed
123                                  else                                  else
124                                          create l_new.make                                          create l_new.make
125                                          l_new.copy (l_item)                                          l_new.copy (l_item)
# Line 135  feature {NONE} -- Implementation Line 137  feature {NONE} -- Implementation
137                          l_rd: LINKED_SET [INTEGER]                          l_rd: LINKED_SET [INTEGER]
138                  do                  do
139                          l_label := a_instr.label                          l_label := a_instr.label
140                          l_old_count := rd_exit.at (l_label).count                          l_old_count := rd_exit [l_label].count
141    
142                          if attached {ASSIGN_AS} a_instr.instruction as l_assign                          if attached {ASSIGN_AS} a_instr.instruction as l_assign
143                          and then attached {ACCESS_ID_AS} l_assign.target as l_id                          and then attached {ACCESS_ID_AS} l_assign.target as l_id
# Line 143  feature {NONE} -- Implementation Line 145  feature {NONE} -- Implementation
145                                  l_var_id := l_id.feature_name.name_id                                  l_var_id := l_id.feature_name.name_id
146    
147                                          -- Remove all previous RD entries.                                          -- Remove all previous RD entries.
148                                  rd_exit.at (l_label).remove (l_var_id)                                  rd_exit [l_label].remove (l_var_id)
149                                  create l_rd.make                                  create l_rd.make
150                                  l_rd.extend (l_label)                                  l_rd.extend (l_label)
151                                  rd_exit.at (l_label).extend (l_rd, l_var_id)                                  rd_exit [l_label].extend (l_rd, l_var_id)
   
                                 rd_changed := True  
152                          else                          else
153                                          -- Just copy from entry to exit.                                          -- Just copy from entry to exit.
154                                  process_default (l_label)                                  process_default (l_label)
155                          end                          end
156    
157                          rd_changed := (l_old_count /= rd_exit.at (a_instr.label).count) or rd_changed                          rd_changed := (l_old_count /= rd_exit [l_label].count) or rd_changed
158                  end                  end
159    
160          rd_entry, rd_exit: ARRAYED_LIST [HASH_TABLE [LINKED_SET [INTEGER], INTEGER]]          rd_entry, rd_exit: ARRAYED_LIST [HASH_TABLE [LINKED_SET [INTEGER], INTEGER]]

Legend:
Removed from v.93942  
changed lines
  Added in v.93943

  ViewVC Help
Powered by ViewVC 1.1.23