feat(gen_uplc): finished up a few more functions
Co-authored-by: Kasey White <kwhitemsg@gmail.com>
This commit is contained in:
parent
33a3c5dc13
commit
489dd235ff
File diff suppressed because it is too large
Load Diff
|
@ -219,6 +219,17 @@ impl<'a> AirStack<'a> {
|
||||||
self.merge_child(right);
|
self.merge_child(right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn unop(&mut self, op: crate::ast::UnOp, value: AirStack) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::UnOp {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
op,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_child(value);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn let_assignment(&mut self, name: impl ToString, value: AirStack) {
|
pub fn let_assignment(&mut self, name: impl ToString, value: AirStack) {
|
||||||
self.new_scope();
|
self.new_scope();
|
||||||
|
|
||||||
|
@ -416,4 +427,91 @@ impl<'a> AirStack<'a> {
|
||||||
|
|
||||||
self.merge_child(value);
|
self.merge_child(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn expect_constr(&mut self, tag: usize, value: AirStack) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::AssertConstr {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
constr_index: tag,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn expect_bool(&mut self, is_true: bool, value: AirStack) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::AssertBool {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
is_true,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_child(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn if_branch(&mut self, tipo: Arc<Type>, condition: AirStack, branch_body: AirStack) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::If {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
tipo,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_child(condition);
|
||||||
|
self.merge_child(branch_body);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn record_access(&mut self, tipo: Arc<Type>, record_index: u64, record: AirStack) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::RecordAccess {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
record_index,
|
||||||
|
tipo,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_child(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn record_update(
|
||||||
|
&mut self,
|
||||||
|
tipo: Arc<Type>,
|
||||||
|
highest_index: usize,
|
||||||
|
indices: Vec<(usize, Arc<Type>)>,
|
||||||
|
update: AirStack,
|
||||||
|
) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::RecordUpdate {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
highest_index,
|
||||||
|
indices,
|
||||||
|
tipo,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_child(update);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn tuple(&mut self, tipo: Arc<Type>, elems: Vec<AirStack>) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::Tuple {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
count: elems.len(),
|
||||||
|
tipo,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_children(elems);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn tuple_index(&mut self, tipo: Arc<Type>, tuple_index: usize, tuple: AirStack) {
|
||||||
|
self.new_scope();
|
||||||
|
|
||||||
|
self.air.push(Air::TupleIndex {
|
||||||
|
scope: self.scope.clone(),
|
||||||
|
tuple_index,
|
||||||
|
tipo,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.merge_child(tuple);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue