File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11use std:: collections:: HashMap ;
22
33use anyhow:: Result ;
4+ use rayon:: prelude:: * ;
45
56use crate :: Reclass ;
67use crate :: node:: Node ;
@@ -14,11 +15,19 @@ pub struct Exports<'a> {
1415impl < ' a > Exports < ' a > {
1516 // TODO(sg): ensure that we do proper ref lookups when rendering exports
1617 pub ( crate ) fn new ( r : & ' a Reclass ) -> Result < Self > {
18+ let nodes: Vec < _ > = r
19+ . nodes
20+ . par_iter ( )
21+ . map ( |( n, _) | -> Result < ( String , Node ) > {
22+ let node = Node :: parse ( r, n) ?;
23+ assert_eq ! ( n, & node. meta. name) ;
24+ Ok ( ( n. clone ( ) , node) )
25+ } )
26+ . collect ( ) ;
1727 let mut exports = HashMap :: new ( ) ;
18- for n in r. nodes . keys ( ) {
19- let node = Node :: parse ( r, n) ?;
20- assert_eq ! ( n, & node. meta. name) ;
21- exports. insert ( n. clone ( ) , node) ;
28+ for v in nodes {
29+ let ( name, node) = v?;
30+ exports. insert ( name, node) ;
2231 }
2332 Ok ( Self {
2433 exports,
Original file line number Diff line number Diff line change @@ -261,7 +261,11 @@ impl Reclass {
261261
262262 /// Renders a single Node and returns the corresponding `NodeInfo` struct.
263263 pub fn render_node ( & self , nodename : & str , exports : & Exports ) -> Result < NodeInfo > {
264- let mut n = Node :: parse ( self , nodename) ?;
264+ let mut n = if let Some ( n) = exports. exports . get ( nodename) {
265+ n. clone ( )
266+ } else {
267+ Node :: parse ( self , nodename) ?
268+ } ;
265269 n. render ( self , exports) ?;
266270 Ok ( NodeInfo :: from ( n) )
267271 }
You can’t perform that action at this time.
0 commit comments