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)
|
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();
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue