Ensure code-gen's Program version/semantic matches Plutus version
This commit is contained in:
parent
4a8bec4caa
commit
ef89691331
|
@ -163,17 +163,19 @@ impl<'a> CodeGenerator<'a> {
|
|||
self.finalize(term)
|
||||
}
|
||||
|
||||
fn finalize(&mut self, mut term: Term<Name>) -> Program<Name> {
|
||||
term = self.special_functions.apply_used_functions(term);
|
||||
|
||||
fn new_program<T>(&self, term: Term<T>) -> Program<T> {
|
||||
let version = match self.plutus_version {
|
||||
PlutusVersion::V1 | PlutusVersion::V2 => (1, 0, 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.
|
||||
// If this isn't done, re-using the same instance
|
||||
|
@ -4245,10 +4247,8 @@ impl<'a> CodeGenerator<'a> {
|
|||
.constr_fields_exposer()
|
||||
.constr_index_exposer();
|
||||
|
||||
let mut program: Program<Name> = Program {
|
||||
version: (1, 0, 0),
|
||||
term: self.special_functions.apply_used_functions(term),
|
||||
};
|
||||
let mut program =
|
||||
self.new_program(self.special_functions.apply_used_functions(term));
|
||||
|
||||
let mut interner = CodeGenInterner::new();
|
||||
|
||||
|
@ -4358,10 +4358,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
.apply(Term::integer(constr_index.into()))
|
||||
.apply(term);
|
||||
|
||||
let mut program: Program<Name> = Program {
|
||||
version: (1, 0, 0),
|
||||
term,
|
||||
};
|
||||
let mut program = self.new_program(term);
|
||||
|
||||
let mut interner = CodeGenInterner::new();
|
||||
|
||||
|
@ -4914,10 +4911,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
};
|
||||
|
||||
if extract_constant(term.pierce_no_inlines()).is_some() {
|
||||
let mut program: Program<Name> = Program {
|
||||
version: (1, 0, 0),
|
||||
term,
|
||||
};
|
||||
let mut program = self.new_program(term);
|
||||
|
||||
let mut interner = CodeGenInterner::new();
|
||||
|
||||
|
@ -4942,10 +4936,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
if extract_constant(term.pierce_no_inlines()).is_some() {
|
||||
term = builder::convert_type_to_data(term, &tipo);
|
||||
|
||||
let mut program: Program<Name> = Program {
|
||||
version: (1, 0, 0),
|
||||
term,
|
||||
};
|
||||
let mut program = self.new_program(term);
|
||||
|
||||
let mut interner = CodeGenInterner::new();
|
||||
|
||||
|
@ -5391,10 +5382,7 @@ impl<'a> CodeGenerator<'a> {
|
|||
let maybe_const = extract_constant(item.pierce_no_inlines());
|
||||
maybe_const.is_some()
|
||||
}) {
|
||||
let mut program: Program<Name> = Program {
|
||||
version: (1, 0, 0),
|
||||
term,
|
||||
};
|
||||
let mut program = self.new_program(term);
|
||||
|
||||
let mut interner = CodeGenInterner::new();
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@ use serde::{Deserialize, Serialize};
|
|||
#[serde(rename_all = "camelCase")]
|
||||
pub enum PlutusVersion {
|
||||
V1,
|
||||
#[default]
|
||||
V2,
|
||||
#[default]
|
||||
V3,
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ description: "Code:\n\npub fn add(a: Int, b: Int) -> Int {\n a + b\n}\n"
|
|||
}
|
||||
}
|
||||
],
|
||||
"compiledCode": "500100002322337000046eb4004dd68009",
|
||||
"hash": "bcd6700b4dba798a7d19c5769ef3deb21423f8809594a6942860dd1f",
|
||||
"compiledCode": "500101002322337000046eb4004dd68009",
|
||||
"hash": "b8374597a772cef80d891b7f6a03588e10cc19b780251228ba4ce9c6",
|
||||
"definitions": {
|
||||
"Int": {
|
||||
"dataType": "integer"
|
||||
|
|
|
@ -18,8 +18,8 @@ description: "Code:\n\npub type Foo<a> {\n Empty\n Bar(a, Foo<a>)\n}\n\npub fn
|
|||
}
|
||||
}
|
||||
],
|
||||
"compiledCode": "5901d501000032323232323222323232323253330083002300937540062a666010600460126ea801052000001001132323232533300b3004300c375400c2646464a66601c600e601e6ea80284c8cdc019b80003375a60260026600c0046026602800260206ea8028010c044c048008dd6980800098069baa006001132533300b3005300c375400c2a666016600860186ea801c4c8cdc01bad3010001330034c103d879800030103011001300d375400e00200226466e00dd698078009980118079808000a60103d8798000300c375400a600200244464646464a66601e601260206ea800854ccc03cc024c040dd50018a4000002002264a66601e601060206ea80084c8c8c94ccc048c02cc04cdd500309919b80337000066eb4c05c004ccc02c02c008c05cc060004c050dd5003002180a980b0011bad301400130113754004002264a66601e601260206ea800854ccc03cc020c040dd500189919b80375a6028002666010010980103d8798000301430150013011375400600200226466e00dd698098009998038039809980a000a60103d8798000301037540026022004602060220026601c0046601c00297ae0370e90011b8748000c024008c020c024004cc018008cc0180052f5c0ae6955ceaab9e5740ae855d101",
|
||||
"hash": "dca86b6e092019b67ef310ba8360682d7bf8284cc728c6b525fb0b0d",
|
||||
"compiledCode": "5901d501010032323232323222323232323253330083002300937540062a666010600460126ea801052000001001132323232533300b3004300c375400c2646464a66601c600e601e6ea80284c8cdc019b80003375a60260026600c0046026602800260206ea8028010c044c048008dd6980800098069baa006001132533300b3005300c375400c2a666016600860186ea801c4c8cdc01bad3010001330034c103d879800030103011001300d375400e00200226466e00dd698078009980118079808000a60103d8798000300c375400a600200244464646464a66601e601260206ea800854ccc03cc024c040dd50018a4000002002264a66601e601060206ea80084c8c8c94ccc048c02cc04cdd500309919b80337000066eb4c05c004ccc02c02c008c05cc060004c050dd5003002180a980b0011bad301400130113754004002264a66601e601260206ea800854ccc03cc020c040dd500189919b80375a6028002666010010980103d8798000301430150013011375400600200226466e00dd698098009998038039809980a000a60103d8798000301037540026022004602060220026601c0046601c00297ae0370e90011b8748000c024008c020c024004cc018008cc0180052f5c0ae6955ceaab9e5740ae855d101",
|
||||
"hash": "46254b889c878fb25e55ad7e9eb3d331770a55defec65749c9504581",
|
||||
"definitions": {
|
||||
"Int": {
|
||||
"dataType": "integer"
|
||||
|
|
|
@ -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 expected = Program {
|
||||
version: (1, 0, 0),
|
||||
version: (1, 1, 0),
|
||||
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 expected = Program {
|
||||
version: (1, 0, 0),
|
||||
version: (1, 1, 0),
|
||||
term: expected,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue