fix(solc): process all imports even input files (#2136)
* fix(solc): process all imports even input files * pin test to 0.8.17
This commit is contained in:
parent
e20bb71569
commit
c436eae96c
|
@ -455,17 +455,20 @@ impl Graph {
|
||||||
all_nodes: &mut HashMap<usize, (PathBuf, Source)>,
|
all_nodes: &mut HashMap<usize, (PathBuf, Source)>,
|
||||||
sources: &mut Sources,
|
sources: &mut Sources,
|
||||||
edges: &[Vec<usize>],
|
edges: &[Vec<usize>],
|
||||||
num_input_files: usize,
|
processed_sources: &mut HashSet<usize>,
|
||||||
) {
|
) {
|
||||||
|
// iterate over all dependencies not processed yet
|
||||||
for dep in edges[idx].iter().copied() {
|
for dep in edges[idx].iter().copied() {
|
||||||
// we only process nodes that were added as part of the resolve step because input
|
// keep track of processed dependencies, if the dep was already in the set we have
|
||||||
// nodes are handled separately
|
// processed it already
|
||||||
if dep >= num_input_files {
|
if !processed_sources.insert(dep) {
|
||||||
// library import
|
continue
|
||||||
if let Some((path, source)) = all_nodes.remove(&dep) {
|
|
||||||
sources.insert(path, source);
|
|
||||||
insert_imports(dep, all_nodes, sources, edges, num_input_files);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// library import
|
||||||
|
if let Some((path, source)) = all_nodes.get(&dep).cloned() {
|
||||||
|
sources.insert(path, source);
|
||||||
|
insert_imports(dep, all_nodes, sources, edges, processed_sources);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -480,17 +483,21 @@ impl Graph {
|
||||||
// determine the `Sources` set for each solc version
|
// determine the `Sources` set for each solc version
|
||||||
for (version, input_node_indices) in versioned_nodes {
|
for (version, input_node_indices) in versioned_nodes {
|
||||||
let mut sources = Sources::new();
|
let mut sources = Sources::new();
|
||||||
|
|
||||||
|
// all input nodes will be processed
|
||||||
|
let mut processed_sources = input_node_indices.iter().copied().collect();
|
||||||
|
|
||||||
// we only process input nodes (from sources, tests for example)
|
// we only process input nodes (from sources, tests for example)
|
||||||
for idx in input_node_indices {
|
for idx in input_node_indices {
|
||||||
// insert the input node in the sources set and remove it from the available set
|
// insert the input node in the sources set and remove it from the available set
|
||||||
let (path, source) = all_nodes.remove(&idx).expect("node is preset. qed");
|
let (path, source) = all_nodes.get(&idx).cloned().expect("node is preset. qed");
|
||||||
sources.insert(path, source);
|
sources.insert(path, source);
|
||||||
insert_imports(
|
insert_imports(
|
||||||
idx,
|
idx,
|
||||||
&mut all_nodes,
|
&mut all_nodes,
|
||||||
&mut sources,
|
&mut sources,
|
||||||
&edges.edges,
|
&edges.edges,
|
||||||
edges.num_input_files,
|
&mut processed_sources,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
versioned_sources.insert(version, sources);
|
versioned_sources.insert(version, sources);
|
||||||
|
|
|
@ -1860,7 +1860,7 @@ fn can_parse_doc() {
|
||||||
|
|
||||||
let contract = r#"
|
let contract = r#"
|
||||||
// SPDX-License-Identifier: GPL-3.0-only
|
// SPDX-License-Identifier: GPL-3.0-only
|
||||||
pragma solidity ^0.8.0;
|
pragma solidity 0.8.17;
|
||||||
|
|
||||||
/// @title Not an ERC20.
|
/// @title Not an ERC20.
|
||||||
/// @author Notadev
|
/// @author Notadev
|
||||||
|
|
Loading…
Reference in New Issue