move record index to start of update

This commit is contained in:
J.Teeuwissen 2023-05-27 14:42:37 +02:00
parent 9b58c0fb9c
commit 378a298b45
No known key found for this signature in database
GPG key ID: DB5F7A1ED8D478AD
6 changed files with 291 additions and 106 deletions

View file

@ -1,13 +1,13 @@
procedure Test.1 ():
let Test.7 : U8 = 1i64;
let Test.8 : U8 = 2i64;
let Test.6 : {U8, U8} = Struct {Test.7, Test.8};
ret Test.6;
let Test.10 : U8 = 1i64;
let Test.11 : U8 = 2i64;
let Test.9 : {U8, U8} = Struct {Test.10, Test.11};
ret Test.9;
procedure Test.0 ():
let Test.9 : {U8, U8} = CallByName Test.1;
let Test.3 : U8 = StructAtIndex 0 Test.9;
let Test.5 : {U8, U8} = CallByName Test.1;
let Test.4 : U8 = StructAtIndex 1 Test.5;
let Test.2 : List U8 = Array [Test.3, Test.4];
let Test.13 : {U8, U8} = CallByName Test.1;
let Test.4 : U8 = StructAtIndex 0 Test.13;
let Test.8 : {U8, U8} = CallByName Test.1;
let Test.6 : U8 = StructAtIndex 1 Test.8;
let Test.2 : List U8 = Array [Test.4, Test.6];
ret Test.2;

View file

@ -1,13 +1,13 @@
procedure Test.1 (Test.2):
dec Test.2;
let Test.7 : Str = "ux";
let Test.8 : Str = "uy";
let Test.6 : {Str, Str} = Struct {Test.7, Test.8};
ret Test.6;
let Test.8 : Str = "ux";
let Test.9 : Str = "uy";
let Test.7 : {Str, Str} = Struct {Test.8, Test.9};
ret Test.7;
procedure Test.0 ():
let Test.10 : Str = "x";
let Test.11 : Str = "y";
let Test.9 : {Str, Str} = Struct {Test.10, Test.11};
let Test.3 : {Str, Str} = CallByName Test.1 Test.9;
let Test.11 : Str = "x";
let Test.12 : Str = "y";
let Test.10 : {Str, Str} = Struct {Test.11, Test.12};
let Test.3 : {Str, Str} = CallByName Test.1 Test.10;
ret Test.3;

View file

@ -0,0 +1,47 @@
procedure List.3 (List.104, List.105, List.106):
let List.503 : {List U64, U64} = CallByName List.64 List.104 List.105 List.106;
let List.502 : List U64 = StructAtIndex 0 List.503;
ret List.502;
procedure List.6 (#Attr.2):
let List.501 : U64 = lowlevel ListLen #Attr.2;
ret List.501;
procedure List.64 (List.101, List.102, List.103):
let List.500 : U64 = CallByName List.6 List.101;
let List.497 : Int1 = CallByName Num.22 List.102 List.500;
if List.497 then
let List.498 : {List U64, U64} = CallByName List.67 List.101 List.102 List.103;
ret List.498;
else
let List.496 : {List U64, U64} = Struct {List.101, List.103};
ret List.496;
procedure List.67 (#Attr.2, #Attr.3, #Attr.4):
let List.499 : {List U64, U64} = lowlevel ListReplaceUnsafe #Attr.2 #Attr.3 #Attr.4;
ret List.499;
procedure Num.22 (#Attr.2, #Attr.3):
let Num.281 : Int1 = lowlevel NumLt #Attr.2 #Attr.3;
ret Num.281;
procedure Test.1 (Test.2):
let Test.10 : List U64 = StructAtIndex 2 Test.2;
let Test.8 : List U64 = StructAtIndex 1 Test.2;
let Test.6 : List U64 = StructAtIndex 0 Test.2;
let Test.13 : U64 = 8i64;
let Test.14 : U64 = 8i64;
let Test.9 : List U64 = CallByName List.3 Test.8 Test.13 Test.14;
let Test.11 : U64 = 7i64;
let Test.12 : U64 = 7i64;
let Test.7 : List U64 = CallByName List.3 Test.6 Test.11 Test.12;
let Test.5 : {List U64, List U64, List U64} = Struct {Test.7, Test.9, Test.10};
ret Test.5;
procedure Test.0 ():
let Test.15 : List U64 = Array [];
let Test.16 : List U64 = Array [];
let Test.17 : List U64 = Array [];
let Test.4 : {List U64, List U64, List U64} = Struct {Test.15, Test.16, Test.17};
let Test.3 : {List U64, List U64, List U64} = CallByName Test.1 Test.4;
ret Test.3;

View file

@ -3013,3 +3013,17 @@ fn rb_tree_fbip() {
"#
)
}
#[mono_test]
fn record_update() {
indoc!(
r#"
app "test" provides [main] to "./platform"
main = f {a: [], b: [], c:[]}
f : {a: List Nat, b: List Nat, c: List Nat} -> {a: List Nat, b: List Nat, c: List Nat}
f = \record -> {record & a: List.set record.a 7 7, b: List.set record.b 8 8}
"#
)
}