Skip to content

Commit 1f17a25

Browse files
authored
feat: Default more builder methods to open extension sets (#492)
Another step towards #424 (but not all the way there yet)
1 parent c53df7a commit 1f17a25

File tree

6 files changed

+13
-20
lines changed

6 files changed

+13
-20
lines changed

src/builder.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ pub(crate) mod test {
135135

136136
/// A helper method which creates a DFG rooted hugr with closed resources,
137137
/// for tests which want to avoid having open extension variables after
138-
/// inference.
138+
/// inference. Using DFGBuilder will default to a root node with an open
139+
/// extension variable
139140
pub(crate) fn closed_dfg_root_hugr(signature: FunctionType) -> Hugr {
140141
let mut hugr = Hugr::new(NodeType::pure(ops::DFG {
141142
signature: signature.clone(),

src/builder/build_traits.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,7 @@ pub trait Dataflow: Container {
322322

323323
let (cfg_node, _) = add_node_with_wires(
324324
self,
325-
// TODO: Make input extensions a parameter
326-
NodeType::pure(ops::CFG {
325+
NodeType::open_extensions(ops::CFG {
327326
inputs: inputs.clone(),
328327
outputs: output_types.clone(),
329328
}),
@@ -606,8 +605,7 @@ fn add_op_with_wires<T: Dataflow + ?Sized>(
606605
optype: impl Into<OpType>,
607606
inputs: Vec<Wire>,
608607
) -> Result<(Node, usize), BuildError> {
609-
// TODO: Make this NodeType::open_extensions
610-
add_node_with_wires(data_builder, NodeType::pure(optype), inputs)
608+
add_node_with_wires(data_builder, NodeType::open_extensions(optype), inputs)
611609
}
612610

613611
fn add_node_with_wires<T: Dataflow + ?Sized>(

src/builder/cfg.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ impl CFGBuilder<Hugr> {
6363
};
6464

6565
// TODO: Allow input extensions to be specified
66-
let base = Hugr::new(NodeType::pure(cfg_op));
66+
let base = Hugr::new(NodeType::open_extensions(cfg_op));
6767
let cfg_node = base.root();
6868
CFGBuilder::create(base, cfg_node, input, output)
6969
}
@@ -280,7 +280,7 @@ impl BlockBuilder<Hugr> {
280280
};
281281

282282
// TODO: Allow input extensions to be specified
283-
let base = Hugr::new(NodeType::pure(op));
283+
let base = Hugr::new(NodeType::open_extensions(op));
284284
let root = base.root();
285285
Self::create(base, root, predicate_variants, other_outputs, inputs)
286286
}

src/builder/conditional.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ impl<B: AsMut<Hugr> + AsRef<Hugr>> ConditionalBuilder<B> {
129129
// TODO: Allow this to be non-pure
130130
self.hugr_mut().add_op_before(sibling_node, case_op)?
131131
} else {
132-
// TODO: Allow this to be non-pure
133132
self.add_child_op(case_op)?
134133
};
135134

@@ -178,7 +177,7 @@ impl ConditionalBuilder<Hugr> {
178177
extension_delta,
179178
};
180179
// TODO: Allow input extensions to be specified
181-
let base = Hugr::new(NodeType::pure(op));
180+
let base = Hugr::new(NodeType::open_extensions(op));
182181
let conditional_node = base.root();
183182

184183
Ok(ConditionalBuilder {
@@ -196,8 +195,7 @@ impl CaseBuilder<Hugr> {
196195
let op = ops::Case {
197196
signature: signature.clone(),
198197
};
199-
// TODO: Allow input extensions to be specified
200-
let base = Hugr::new(NodeType::pure(op));
198+
let base = Hugr::new(NodeType::open_extensions(op));
201199
let root = base.root();
202200
let dfg_builder = DFGBuilder::create_with_io(base, root, signature, None)?;
203201

src/builder/dataflow.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ impl<T: AsMut<Hugr> + AsRef<Hugr>> DFGBuilder<T> {
7676

7777
impl DFGBuilder<Hugr> {
7878
/// Begin building a new DFG rooted HUGR.
79+
/// Input extensions default to being an open variable
7980
///
8081
/// # Errors
8182
///
@@ -84,13 +85,9 @@ impl DFGBuilder<Hugr> {
8485
let dfg_op = ops::DFG {
8586
signature: signature.clone(),
8687
};
87-
// TODO: Allow input extensions to be specified
88-
let base = Hugr::new(NodeType::pure(dfg_op));
88+
let base = Hugr::new(NodeType::open_extensions(dfg_op));
8989
let root = base.root();
90-
DFGBuilder::create_with_io(
91-
base, root, signature, // TODO: Make input extensions a parameter
92-
None,
93-
)
90+
DFGBuilder::create_with_io(base, root, signature, None)
9491
}
9592
}
9693

@@ -256,8 +253,7 @@ pub(crate) mod test {
256253

257254
let inner_builder = func_builder.dfg_builder(
258255
FunctionType::new(type_row![NAT], type_row![NAT]),
259-
// TODO: This should be None
260-
Some(ExtensionSet::new()),
256+
None,
261257
[int],
262258
)?;
263259
let inner_id = n_identity(inner_builder)?;

src/builder/tail_loop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ impl TailLoopBuilder<Hugr> {
8282
rest: inputs_outputs.into(),
8383
};
8484
// TODO: Allow input extensions to be specified
85-
let base = Hugr::new(NodeType::pure(tail_loop.clone()));
85+
let base = Hugr::new(NodeType::open_extensions(tail_loop.clone()));
8686
let root = base.root();
8787
Self::create_with_io(base, root, &tail_loop)
8888
}

0 commit comments

Comments
 (0)