Ensure code-gen's Program version/semantic matches Plutus version

This commit is contained in:
KtorZ 2024-08-29 16:56:16 +02:00
parent 4a8bec4caa
commit ef89691331
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
5 changed files with 20 additions and 32 deletions

View File

@ -163,17 +163,19 @@ impl<'a> CodeGenerator<'a> {
self.finalize(term) self.finalize(term)
} }
fn finalize(&mut self, mut term: Term<Name>) -> Program<Name> { fn new_program<T>(&self, term: Term<T>) -> Program<T> {
term = self.special_functions.apply_used_functions(term);
let version = match self.plutus_version { let version = match self.plutus_version {
PlutusVersion::V1 | PlutusVersion::V2 => (1, 0, 0), PlutusVersion::V1 | PlutusVersion::V2 => (1, 0, 0),
PlutusVersion::V3 => (1, 1, 0), PlutusVersion::V3 => (1, 1, 0),
}; };
let mut program = Program { version, term }; Program { version, term }
}
program = aiken_optimize_and_intern(program); fn finalize(&mut self, mut term: Term<Name>) -> Program<Name> {
term = self.special_functions.apply_used_functions(term);
let program = aiken_optimize_and_intern(self.new_program(term));
// This is very important to call here. // This is very important to call here.
// If this isn't done, re-using the same instance // If this isn't done, re-using the same instance
@ -4245,10 +4247,8 @@ impl<'a> CodeGenerator<'a> {
.constr_fields_exposer() .constr_fields_exposer()
.constr_index_exposer(); .constr_index_exposer();
let mut program: Program<Name> = Program { let mut program =
version: (1, 0, 0), self.new_program(self.special_functions.apply_used_functions(term));
term: self.special_functions.apply_used_functions(term),
};
let mut interner = CodeGenInterner::new(); let mut interner = CodeGenInterner::new();
@ -4358,10 +4358,7 @@ impl<'a> CodeGenerator<'a> {
.apply(Term::integer(constr_index.into())) .apply(Term::integer(constr_index.into()))
.apply(term); .apply(term);
let mut program: Program<Name> = Program { let mut program = self.new_program(term);
version: (1, 0, 0),
term,
};
let mut interner = CodeGenInterner::new(); let mut interner = CodeGenInterner::new();
@ -4914,10 +4911,7 @@ impl<'a> CodeGenerator<'a> {
}; };
if extract_constant(term.pierce_no_inlines()).is_some() { if extract_constant(term.pierce_no_inlines()).is_some() {
let mut program: Program<Name> = Program { let mut program = self.new_program(term);
version: (1, 0, 0),
term,
};
let mut interner = CodeGenInterner::new(); let mut interner = CodeGenInterner::new();
@ -4942,10 +4936,7 @@ impl<'a> CodeGenerator<'a> {
if extract_constant(term.pierce_no_inlines()).is_some() { if extract_constant(term.pierce_no_inlines()).is_some() {
term = builder::convert_type_to_data(term, &tipo); term = builder::convert_type_to_data(term, &tipo);
let mut program: Program<Name> = Program { let mut program = self.new_program(term);
version: (1, 0, 0),
term,
};
let mut interner = CodeGenInterner::new(); let mut interner = CodeGenInterner::new();
@ -5391,10 +5382,7 @@ impl<'a> CodeGenerator<'a> {
let maybe_const = extract_constant(item.pierce_no_inlines()); let maybe_const = extract_constant(item.pierce_no_inlines());
maybe_const.is_some() maybe_const.is_some()
}) { }) {
let mut program: Program<Name> = Program { let mut program = self.new_program(term);
version: (1, 0, 0),
term,
};
let mut interner = CodeGenInterner::new(); let mut interner = CodeGenInterner::new();

View File

@ -5,8 +5,8 @@ use serde::{Deserialize, Serialize};
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub enum PlutusVersion { pub enum PlutusVersion {
V1, V1,
#[default]
V2, V2,
#[default]
V3, V3,
} }

View File

@ -18,8 +18,8 @@ description: "Code:\n\npub fn add(a: Int, b: Int) -> Int {\n a + b\n}\n"
} }
} }
], ],
"compiledCode": "500100002322337000046eb4004dd68009", "compiledCode": "500101002322337000046eb4004dd68009",
"hash": "bcd6700b4dba798a7d19c5769ef3deb21423f8809594a6942860dd1f", "hash": "b8374597a772cef80d891b7f6a03588e10cc19b780251228ba4ce9c6",
"definitions": { "definitions": {
"Int": { "Int": {
"dataType": "integer" "dataType": "integer"

View File

@ -18,8 +18,8 @@ description: "Code:\n\npub type Foo<a> {\n Empty\n Bar(a, Foo<a>)\n}\n\npub fn
} }
} }
], ],
"compiledCode": "5901d501000032323232323222323232323253330083002300937540062a666010600460126ea801052000001001132323232533300b3004300c375400c2646464a66601c600e601e6ea80284c8cdc019b80003375a60260026600c0046026602800260206ea8028010c044c048008dd6980800098069baa006001132533300b3005300c375400c2a666016600860186ea801c4c8cdc01bad3010001330034c103d879800030103011001300d375400e00200226466e00dd698078009980118079808000a60103d8798000300c375400a600200244464646464a66601e601260206ea800854ccc03cc024c040dd50018a4000002002264a66601e601060206ea80084c8c8c94ccc048c02cc04cdd500309919b80337000066eb4c05c004ccc02c02c008c05cc060004c050dd5003002180a980b0011bad301400130113754004002264a66601e601260206ea800854ccc03cc020c040dd500189919b80375a6028002666010010980103d8798000301430150013011375400600200226466e00dd698098009998038039809980a000a60103d8798000301037540026022004602060220026601c0046601c00297ae0370e90011b8748000c024008c020c024004cc018008cc0180052f5c0ae6955ceaab9e5740ae855d101", "compiledCode": "5901d501010032323232323222323232323253330083002300937540062a666010600460126ea801052000001001132323232533300b3004300c375400c2646464a66601c600e601e6ea80284c8cdc019b80003375a60260026600c0046026602800260206ea8028010c044c048008dd6980800098069baa006001132533300b3005300c375400c2a666016600860186ea801c4c8cdc01bad3010001330034c103d879800030103011001300d375400e00200226466e00dd698078009980118079808000a60103d8798000300c375400a600200244464646464a66601e601260206ea800854ccc03cc024c040dd50018a4000002002264a66601e601060206ea80084c8c8c94ccc048c02cc04cdd500309919b80337000066eb4c05c004ccc02c02c008c05cc060004c050dd5003002180a980b0011bad301400130113754004002264a66601e601260206ea800854ccc03cc020c040dd500189919b80375a6028002666010010980103d8798000301430150013011375400600200226466e00dd698098009998038039809980a000a60103d8798000301037540026022004602060220026601c0046601c00297ae0370e90011b8748000c024008c020c024004cc018008cc0180052f5c0ae6955ceaab9e5740ae855d101",
"hash": "dca86b6e092019b67ef310ba8360682d7bf8284cc728c6b525fb0b0d", "hash": "46254b889c878fb25e55ad7e9eb3d331770a55defec65749c9504581",
"definitions": { "definitions": {
"Int": { "Int": {
"dataType": "integer" "dataType": "integer"

View File

@ -57,7 +57,7 @@ fn assert_uplc(source_code: &str, expected: Term<Name>, should_fail: bool) {
let debruijn_program: Program<DeBruijn> = program.try_into().unwrap(); let debruijn_program: Program<DeBruijn> = program.try_into().unwrap();
let expected = Program { let expected = Program {
version: (1, 0, 0), version: (1, 1, 0),
term: expected, term: expected,
}; };
@ -97,7 +97,7 @@ fn assert_uplc(source_code: &str, expected: Term<Name>, should_fail: bool) {
let debruijn_program: Program<DeBruijn> = program.try_into().unwrap(); let debruijn_program: Program<DeBruijn> = program.try_into().unwrap();
let expected = Program { let expected = Program {
version: (1, 0, 0), version: (1, 1, 0),
term: expected, term: expected,
}; };