Skip to content

Commit fdf2bb1

Browse files
committed
add JetHL trait implementation and usage across modules
1 parent f3168af commit fdf2bb1

4 files changed

Lines changed: 40 additions & 12 deletions

File tree

src/ast.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use simplicity::jet::Elements;
1111
use crate::debug::{CallTracker, DebugSymbols, TrackedCallName};
1212
use crate::driver::{FileScoped, SymbolTable, MAIN_MODULE, MAIN_STR};
1313
use crate::error::{Error, RichError, Span, WithSpan};
14+
use crate::jet::JetHL;
1415
use crate::num::{NonZeroPow2Usize, Pow2Usize};
1516
use crate::parse::MatchPattern;
1617
use crate::pattern::Pattern;
@@ -1266,14 +1267,16 @@ impl AbstractSyntaxTree for Call {
12661267
let name = CallName::analyze(from, ty, scope)?;
12671268
let args = match name.clone() {
12681269
CallName::Jet(jet) => {
1269-
let args_tys = crate::jet::source_type(jet)
1270+
let args_tys = jet
1271+
.source_type()
12701272
.iter()
12711273
.map(AliasedType::resolve_builtin)
12721274
.collect::<Result<Vec<ResolvedType>, AliasName>>()
12731275
.map_err(Error::UndefinedAlias)
12741276
.with_span(from)?;
12751277
check_argument_types(from.args(), &args_tys).with_span(from)?;
1276-
let out_ty = crate::jet::target_type(jet)
1278+
let out_ty = jet
1279+
.target_type()
12771280
.resolve_builtin()
12781281
.map_err(Error::UndefinedAlias)
12791282
.with_span(from)?;
@@ -1440,10 +1443,8 @@ impl AbstractSyntaxTree for CallName {
14401443
) -> Result<Self, RichError> {
14411444
match from.name() {
14421445
parse::CallName::Jet(name) => match Elements::from_str(name.as_inner()) {
1443-
Ok(Elements::CheckSigVerify | Elements::Verify) | Err(_) => {
1444-
Err(Error::JetDoesNotExist(name.clone())).with_span(from)
1445-
}
1446-
Ok(jet) => Ok(Self::Jet(jet)),
1446+
Ok(jet) if !jet.is_disabled() => Ok(Self::Jet(jet)),
1447+
_ => Err(Error::JetDoesNotExist(name.clone())).with_span(from),
14471448
},
14481449
parse::CallName::UnwrapLeft(right_ty) => scope
14491450
.resolve(right_ty)

src/compile/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use crate::ast::{
1717
};
1818
use crate::debug::CallTracker;
1919
use crate::error::{Error, RichError, Span, WithSpan};
20+
use crate::jet::JetHL;
2021
use crate::named::{self, CoreExt, PairBuilder};
2122
use crate::num::{NonZeroPow2Usize, Pow2Usize};
2223
use crate::pattern::{BasePattern, Pattern};
@@ -410,7 +411,7 @@ impl Call {
410411
args.comp(&body).with_span(self)
411412
}
412413
CallName::Assert => {
413-
let jet = ProgNode::jet(scope.ctx(), &Elements::Verify);
414+
let jet = ProgNode::jet(scope.ctx(), &*Elements::verify());
414415
scope.with_debug_symbol(args, &jet, self)
415416
}
416417
CallName::Panic => {

src/jet.rs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,32 @@ use crate::types::UIntType::*;
44
use crate::types::*;
55

66
use simplicity::jet::Elements;
7+
use simplicity::jet::Jet;
8+
9+
pub trait JetHL {
10+
fn source_type(&self) -> Vec<AliasedType>;
11+
fn target_type(&self) -> AliasedType;
12+
fn verify() -> Box<dyn Jet>;
13+
fn is_disabled(&self) -> bool;
14+
}
15+
16+
impl JetHL for Elements {
17+
fn source_type(&self) -> Vec<AliasedType> {
18+
source_type(*self)
19+
}
20+
21+
fn target_type(&self) -> AliasedType {
22+
target_type(*self)
23+
}
24+
25+
fn verify() -> Box<dyn Jet> {
26+
Box::new(Elements::Verify)
27+
}
28+
29+
fn is_disabled(&self) -> bool {
30+
matches!(self, Elements::CheckSigVerify | Elements::Verify)
31+
}
32+
}
733

834
fn tuple<A: Into<AliasedType>, I: IntoIterator<Item = A>>(elements: I) -> AliasedType {
935
AliasedType::tuple(elements.into_iter().map(A::into))
@@ -1044,7 +1070,7 @@ mod tests {
10441070
fn compatible_source_type() {
10451071
for jet in Elements::ALL {
10461072
let resolved_ty = ResolvedType::tuple(
1047-
source_type(jet)
1073+
jet.source_type()
10481074
.into_iter()
10491075
.map(|t| t.resolve_builtin().unwrap()),
10501076
);
@@ -1059,7 +1085,7 @@ mod tests {
10591085
#[test]
10601086
fn compatible_target_type() {
10611087
for jet in Elements::ALL {
1062-
let resolved_ty = target_type(jet).resolve_builtin().unwrap();
1088+
let resolved_ty = jet.target_type().resolve_builtin().unwrap();
10631089
let structural_ty = StructuralType::from(&resolved_ty);
10641090
let simplicity_ty = jet.target_ty().to_final();
10651091

src/tracker.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use simplicity::{Ihr, RedeemNode, Value as SimValue};
66
use crate::array::Unfolder;
77
use crate::debug::{DebugSymbols, TrackedCallName};
88
use crate::either::Either;
9-
use crate::jet::{source_type, target_type};
9+
use crate::jet::JetHL;
1010
use crate::str::AliasName;
1111
use crate::types::AliasedType;
1212
use crate::value::StructuralValue;
@@ -212,7 +212,7 @@ impl<'a> DefaultTracker<'a> {
212212
match output.clone() {
213213
NodeOutput::Success(mut output_frame) => {
214214
let target_ty = &node.arrow().target;
215-
let jet_target_ty = resolve_jet_type(&target_type(jet));
215+
let jet_target_ty = resolve_jet_type(&jet.target_type());
216216

217217
let output_value = SimValue::from_padded_bits(&mut output_frame, target_ty)
218218
.expect("output from bit machine is always well-formed");
@@ -319,7 +319,7 @@ impl ExecTracker for DefaultTracker<'_> {
319319

320320
/// Parses jet input arguments from the bit machine's read frame.
321321
fn parse_jet_arguments(jet: Elements, input_frame: &mut FrameIter) -> Result<Vec<Value>, String> {
322-
let source_types = source_type(jet);
322+
let source_types = jet.source_type();
323323
if source_types.is_empty() {
324324
return Ok(vec![]);
325325
}

0 commit comments

Comments
 (0)