def process(self, ast): self._scope_linker.process(ast) id_collector = IdentifierClassifier.IdentifierCollector() classified_id_group = id_collector.collect_identifiers(ast) dec_id_nodes = classified_id_group.statically_declared_identifiers ref_id_nodes = classified_id_group.statically_referencing_identifiers # Attach a parent_scope accessor to the scope tree ReferenceReachabilityTester.TwoWayScopeReferenceAttacher.attach( self._scope_linker.scope_tree) # Reset REFERENCED_FLAG to False for dec_id_node in dec_id_nodes: dec_id_node[REFERENCED_FLAG] = False for ref_id_node in ref_id_nodes: is_reachable = self.check_reachability(ref_id_node) ref_id_node[REACHABILITY_FLAG] = is_reachable
def test_bucket(self): ast = self.create_ast(Fixtures['LOOP_VAR']) collector = IdentifierClassifier.IdentifierCollector() bucket = collector.collect_identifiers(ast) declaring_id_values = [ id_node['value'] for id_node in bucket['static_declaring_identifiers'] ] referencing_id_values = [ id_node['value'] for id_node in bucket['static_referencing_identifiers'] ] expected_declaring_id_values = ['implicit_global_loop_var'] expected_referencing_id_values = ['g:array'] self.assertEqual(expected_declaring_id_values, declaring_id_values) self.assertEqual(expected_referencing_id_values, referencing_id_values)