Add writeBits back in and use the optimizer to utilize the list conversion

This commit is contained in:
microproofs
2025-01-10 12:11:19 +07:00
parent 19d0ec23cf
commit f7f68fbafc
8 changed files with 238 additions and 67 deletions

View File

@@ -509,12 +509,8 @@ pub fn plutus(id_gen: &IdGenerator) -> TypeInfo {
};
for builtin in DefaultFunction::iter() {
// FIXME: Disabling WriteBits for now, since its signature requires the ability to create
// list of raw integers, which isn't possible through Aiken at the moment.
if !matches!(builtin, DefaultFunction::WriteBits) {
let value = from_default_function(builtin, id_gen);
plutus.values.insert(builtin.aiken_name(), value);
}
let value = from_default_function(builtin, id_gen);
plutus.values.insert(builtin.aiken_name(), value);
}
let index_tipo = Type::function(vec![Type::data()], Type::int());

View File

@@ -4028,7 +4028,7 @@ impl<'a> CodeGenerator<'a> {
} else {
let term = arg_stack.pop().unwrap();
match term.pierce_no_inlines() {
match term.pierce_no_inlines_ref() {
Term::Var(_) => Some(term.force()),
Term::Delay(inner_term) => Some(inner_term.as_ref().clone()),
Term::Apply { .. } => Some(term.force()),
@@ -4356,7 +4356,7 @@ impl<'a> CodeGenerator<'a> {
known_data_to_type(term, &tipo)
};
if extract_constant(term.pierce_no_inlines()).is_some() {
if extract_constant(term.pierce_no_inlines_ref()).is_some() {
let mut program = self.new_program(term);
let mut interner = CodeGenInterner::new();
@@ -4379,7 +4379,7 @@ impl<'a> CodeGenerator<'a> {
Air::CastToData { tipo } => {
let mut term = arg_stack.pop().unwrap();
if extract_constant(term.pierce_no_inlines()).is_some() {
if extract_constant(term.pierce_no_inlines_ref()).is_some() {
term = builder::convert_type_to_data(term, &tipo);
let mut program = self.new_program(term);
@@ -4792,7 +4792,7 @@ impl<'a> CodeGenerator<'a> {
.apply(term);
if arg_vec.iter().all(|item| {
let maybe_const = extract_constant(item.pierce_no_inlines());
let maybe_const = extract_constant(item.pierce_no_inlines_ref());
maybe_const.is_some()
}) {
let mut program = self.new_program(term);