Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

Fix record updates discarding unlabelled fields

author
Gears
committer
Louis Pilfold
date (Dec 17, 2025, 3:13 PM UTC) commit ce65f87e parent a5d9c58a change-id wmlxmyuz
+907 -208
+4
CHANGELOG.md
··· 8 8 custom types. 9 9 ([Surya Rose](https://github.com/GearsDatapacks)) 10 10 11 + - Fixed a bug where updating records with unlabelled fields would result in 12 + invalid code. 13 + ([Surya Rose](https://github.com/GearsDatapacks)) 14 + 11 15 ## v1.14.0-rc1 - 2025-12-15 12 16 13 17 ### Compiler
+371 -159
compiler-core/generated/schema_capnp.rs
··· 195 195 } 196 196 } 197 197 mod _private { 198 - pub static ENCODED_NODE: [::capnp::Word; 51] = [ 199 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 198 + pub static ENCODED_NODE: [::capnp::Word; 50] = [ 199 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 200 200 ::capnp::word(106, 29, 126, 201, 93, 118, 154, 200), 201 201 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 202 202 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 203 203 ::capnp::word(2, 0, 7, 0, 0, 0, 0, 0), 204 204 ::capnp::word(0, 0, 0, 0, 1, 0, 0, 0), 205 - ::capnp::word(67, 1, 0, 0, 128, 1, 0, 0), 206 205 ::capnp::word(21, 0, 0, 0, 178, 0, 0, 0), 207 206 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 208 207 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 471 470 impl<Value> Pipeline<Value> where Value: ::capnp::traits::Pipelined, <Value as ::capnp::traits::Pipelined>::Pipeline: ::capnp::capability::FromTypelessPipeline { 472 471 } 473 472 mod _private { 474 - pub static ENCODED_NODE: [::capnp::Word; 51] = [ 475 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 473 + pub static ENCODED_NODE: [::capnp::Word; 50] = [ 474 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 476 475 ::capnp::word(253, 203, 85, 217, 186, 138, 221, 238), 477 476 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 478 477 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 479 478 ::capnp::word(1, 0, 7, 0, 0, 0, 2, 0), 480 479 ::capnp::word(0, 0, 0, 0, 1, 0, 0, 0), 481 - ::capnp::word(130, 1, 0, 0, 207, 1, 0, 0), 482 480 ::capnp::word(21, 0, 0, 0, 162, 0, 0, 0), 483 481 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 484 482 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 1000 998 } 1001 999 } 1002 1000 mod _private { 1003 - pub static ENCODED_NODE: [::capnp::Word; 322] = [ 1004 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 1001 + pub static ENCODED_NODE: [::capnp::Word; 321] = [ 1002 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 1005 1003 ::capnp::word(129, 5, 219, 80, 68, 149, 82, 154), 1006 1004 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 1007 1005 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 1008 1006 ::capnp::word(12, 0, 7, 0, 0, 0, 0, 0), 1009 1007 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 1010 - ::capnp::word(209, 1, 0, 0, 206, 3, 0, 0), 1011 1008 ::capnp::word(21, 0, 0, 0, 162, 0, 0, 0), 1012 1009 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 1013 1010 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 1557 1554 impl Pipeline { 1558 1555 } 1559 1556 mod _private { 1560 - pub static ENCODED_NODE: [::capnp::Word; 78] = [ 1561 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 1557 + pub static ENCODED_NODE: [::capnp::Word; 77] = [ 1558 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 1562 1559 ::capnp::word(101, 145, 82, 27, 227, 203, 200, 215), 1563 1560 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 1564 1561 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 1565 1562 ::capnp::word(3, 0, 7, 0, 0, 0, 0, 0), 1566 1563 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 1567 - ::capnp::word(208, 3, 0, 0, 90, 4, 0, 0), 1568 1564 ::capnp::word(21, 0, 0, 0, 194, 0, 0, 0), 1569 1565 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 1570 1566 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 1859 1855 impl Pipeline { 1860 1856 } 1861 1857 mod _private { 1862 - pub static ENCODED_NODE: [::capnp::Word; 69] = [ 1863 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 1858 + pub static ENCODED_NODE: [::capnp::Word; 68] = [ 1859 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 1864 1860 ::capnp::word(174, 202, 45, 66, 25, 97, 38, 203), 1865 1861 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 1866 1862 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 1867 1863 ::capnp::word(3, 0, 7, 0, 0, 0, 0, 0), 1868 1864 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 1869 - ::capnp::word(92, 4, 0, 0, 185, 4, 0, 0), 1870 1865 ::capnp::word(21, 0, 0, 0, 210, 0, 0, 0), 1871 1866 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 1872 1867 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 2134 2129 } 2135 2130 } 2136 2131 mod _private { 2137 - pub static ENCODED_NODE: [::capnp::Word; 49] = [ 2138 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 2132 + pub static ENCODED_NODE: [::capnp::Word; 48] = [ 2133 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 2139 2134 ::capnp::word(97, 111, 221, 187, 73, 147, 33, 194), 2140 2135 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 2141 2136 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 2142 2137 ::capnp::word(2, 0, 7, 0, 0, 0, 0, 0), 2143 2138 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 2144 - ::capnp::word(187, 4, 0, 0, 1, 5, 0, 0), 2145 2139 ::capnp::word(21, 0, 0, 0, 186, 0, 0, 0), 2146 2140 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 2147 2141 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 2418 2412 impl Pipeline { 2419 2413 } 2420 2414 mod _private { 2421 - pub static ENCODED_NODE: [::capnp::Word; 97] = [ 2422 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 2415 + pub static ENCODED_NODE: [::capnp::Word; 96] = [ 2416 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 2423 2417 ::capnp::word(201, 38, 14, 81, 37, 76, 28, 166), 2424 2418 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 2425 2419 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 2426 2420 ::capnp::word(0, 0, 7, 0, 0, 0, 5, 0), 2427 2421 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 2428 - ::capnp::word(3, 5, 0, 0, 157, 5, 0, 0), 2429 2422 ::capnp::word(21, 0, 0, 0, 218, 0, 0, 0), 2430 2423 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 2431 2424 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 2867 2860 } 2868 2861 } 2869 2862 mod _private { 2870 - pub static ENCODED_NODE: [::capnp::Word; 148] = [ 2871 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 2863 + pub static ENCODED_NODE: [::capnp::Word; 147] = [ 2864 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 2872 2865 ::capnp::word(77, 68, 194, 176, 34, 71, 88, 172), 2873 2866 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 2874 2867 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 2875 2868 ::capnp::word(7, 0, 7, 0, 0, 0, 0, 0), 2876 2869 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 2877 - ::capnp::word(159, 5, 0, 0, 134, 6, 0, 0), 2878 2870 ::capnp::word(21, 0, 0, 0, 18, 1, 0, 0), 2879 2871 ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 2880 2872 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 3208 3200 impl Pipeline { 3209 3201 } 3210 3202 mod _private { 3211 - pub static ENCODED_NODE: [::capnp::Word; 63] = [ 3212 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 3203 + pub static ENCODED_NODE: [::capnp::Word; 62] = [ 3204 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 3213 3205 ::capnp::word(156, 250, 40, 69, 63, 108, 134, 252), 3214 3206 ::capnp::word(13, 0, 0, 0, 1, 0, 2, 0), 3215 3207 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 3216 3208 ::capnp::word(0, 0, 7, 0, 0, 0, 0, 0), 3217 3209 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 3218 - ::capnp::word(136, 6, 0, 0, 214, 6, 0, 0), 3219 3210 ::capnp::word(21, 0, 0, 0, 170, 0, 0, 0), 3220 3211 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 3221 3212 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 3483 3474 impl Pipeline { 3484 3475 } 3485 3476 mod _private { 3486 - pub static ENCODED_NODE: [::capnp::Word; 76] = [ 3487 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 3477 + pub static ENCODED_NODE: [::capnp::Word; 75] = [ 3478 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 3488 3479 ::capnp::word(242, 117, 25, 190, 73, 132, 187, 199), 3489 3480 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 3490 3481 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 3491 3482 ::capnp::word(2, 0, 7, 0, 0, 0, 0, 0), 3492 3483 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 3493 - ::capnp::word(216, 6, 0, 0, 95, 7, 0, 0), 3494 3484 ::capnp::word(21, 0, 0, 0, 50, 1, 0, 0), 3495 3485 ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 3496 3486 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 3783 3773 impl Pipeline { 3784 3774 } 3785 3775 mod _private { 3786 - pub static ENCODED_NODE: [::capnp::Word; 71] = [ 3787 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 3776 + pub static ENCODED_NODE: [::capnp::Word; 70] = [ 3777 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 3788 3778 ::capnp::word(219, 85, 99, 173, 224, 242, 6, 232), 3789 3779 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 3790 3780 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 3791 3781 ::capnp::word(3, 0, 7, 0, 0, 0, 0, 0), 3792 3782 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 3793 - ::capnp::word(97, 7, 0, 0, 225, 7, 0, 0), 3794 3783 ::capnp::word(21, 0, 0, 0, 18, 1, 0, 0), 3795 3784 ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 3796 3785 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 4081 4070 } 4082 4071 } 4083 4072 mod _private { 4084 - pub static ENCODED_NODE: [::capnp::Word; 67] = [ 4085 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 4073 + pub static ENCODED_NODE: [::capnp::Word; 66] = [ 4074 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 4086 4075 ::capnp::word(234, 83, 193, 19, 176, 48, 149, 161), 4087 4076 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 4088 4077 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 4089 4078 ::capnp::word(3, 0, 7, 0, 0, 0, 0, 0), 4090 4079 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4091 - ::capnp::word(227, 7, 0, 0, 72, 8, 0, 0), 4092 4080 ::capnp::word(21, 0, 0, 0, 90, 1, 0, 0), 4093 4081 ::capnp::word(41, 0, 0, 0, 7, 0, 0, 0), 4094 4082 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 4477 4465 } 4478 4466 } 4479 4467 mod _private { 4480 - pub static ENCODED_NODE: [::capnp::Word; 132] = [ 4481 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 4468 + pub static ENCODED_NODE: [::capnp::Word; 131] = [ 4469 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 4482 4470 ::capnp::word(122, 109, 11, 224, 98, 109, 251, 177), 4483 4471 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 4484 4472 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 4485 4473 ::capnp::word(7, 0, 7, 0, 0, 0, 0, 0), 4486 4474 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4487 - ::capnp::word(74, 8, 0, 0, 117, 9, 0, 0), 4488 4475 ::capnp::word(21, 0, 0, 0, 234, 0, 0, 0), 4489 4476 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 4490 4477 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 4732 4719 pub fn has_publicity(&self) -> bool { 4733 4720 !self.reader.get_pointer_field(3).is_null() 4734 4721 } 4722 + #[inline] 4723 + pub fn get_positional_accessors(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::schema_capnp::positional_accessors::Owned>> { 4724 + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(4), ::core::option::Option::None) 4725 + } 4726 + #[inline] 4727 + pub fn has_positional_accessors(&self) -> bool { 4728 + !self.reader.get_pointer_field(4).is_null() 4729 + } 4735 4730 } 4736 4731 4737 4732 pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } 4738 4733 impl <> ::capnp::traits::HasStructSize for Builder<'_,> { 4739 - const STRUCT_SIZE: ::capnp::private::layout::StructSize = ::capnp::private::layout::StructSize { data: 0, pointers: 4 }; 4734 + const STRUCT_SIZE: ::capnp::private::layout::StructSize = ::capnp::private::layout::StructSize { data: 0, pointers: 5 }; 4740 4735 } 4741 4736 impl <> ::capnp::traits::HasTypeId for Builder<'_,> { 4742 4737 const TYPE_ID: u64 = _private::TYPE_ID; ··· 4850 4845 pub fn has_publicity(&self) -> bool { 4851 4846 !self.builder.is_pointer_field_null(3) 4852 4847 } 4848 + #[inline] 4849 + pub fn get_positional_accessors(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::schema_capnp::positional_accessors::Owned>> { 4850 + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(4), ::core::option::Option::None) 4851 + } 4852 + #[inline] 4853 + pub fn set_positional_accessors(&mut self, value: ::capnp::struct_list::Reader<'_,crate::schema_capnp::positional_accessors::Owned>) -> ::capnp::Result<()> { 4854 + ::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(4), value, false) 4855 + } 4856 + #[inline] 4857 + pub fn init_positional_accessors(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::schema_capnp::positional_accessors::Owned> { 4858 + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(4), size) 4859 + } 4860 + #[inline] 4861 + pub fn has_positional_accessors(&self) -> bool { 4862 + !self.builder.is_pointer_field_null(4) 4863 + } 4853 4864 } 4854 4865 4855 4866 pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } ··· 4867 4878 } 4868 4879 } 4869 4880 mod _private { 4870 - pub static ENCODED_NODE: [::capnp::Word; 104] = [ 4871 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 4881 + pub static ENCODED_NODE: [::capnp::Word; 124] = [ 4882 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 4872 4883 ::capnp::word(143, 103, 68, 141, 152, 59, 35, 132), 4873 4884 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 4874 4885 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 4875 - ::capnp::word(4, 0, 7, 0, 0, 0, 0, 0), 4886 + ::capnp::word(5, 0, 7, 0, 0, 0, 0, 0), 4876 4887 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4877 - ::capnp::word(119, 9, 0, 0, 47, 10, 0, 0), 4878 4888 ::capnp::word(21, 0, 0, 0, 210, 0, 0, 0), 4879 4889 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 4880 4890 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4881 - ::capnp::word(29, 0, 0, 0, 231, 0, 0, 0), 4891 + ::capnp::word(29, 0, 0, 0, 31, 1, 0, 0), 4882 4892 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4883 4893 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4884 4894 ::capnp::word(115, 99, 104, 101, 109, 97, 46, 99), ··· 4886 4896 ::capnp::word(101, 115, 115, 111, 114, 115, 77, 97), 4887 4897 ::capnp::word(112, 0, 0, 0, 0, 0, 0, 0), 4888 4898 ::capnp::word(0, 0, 0, 0, 1, 0, 1, 0), 4889 - ::capnp::word(16, 0, 0, 0, 3, 0, 4, 0), 4899 + ::capnp::word(20, 0, 0, 0, 3, 0, 4, 0), 4890 4900 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4891 4901 ::capnp::word(0, 0, 1, 0, 0, 0, 0, 0), 4892 4902 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4893 - ::capnp::word(97, 0, 0, 0, 42, 0, 0, 0), 4903 + ::capnp::word(125, 0, 0, 0, 42, 0, 0, 0), 4894 4904 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4895 - ::capnp::word(92, 0, 0, 0, 3, 0, 1, 0), 4896 - ::capnp::word(104, 0, 0, 0, 2, 0, 1, 0), 4905 + ::capnp::word(120, 0, 0, 0, 3, 0, 1, 0), 4906 + ::capnp::word(132, 0, 0, 0, 2, 0, 1, 0), 4897 4907 ::capnp::word(1, 0, 0, 0, 1, 0, 0, 0), 4898 4908 ::capnp::word(0, 0, 1, 0, 1, 0, 0, 0), 4899 4909 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4900 - ::capnp::word(101, 0, 0, 0, 130, 0, 0, 0), 4910 + ::capnp::word(129, 0, 0, 0, 130, 0, 0, 0), 4901 4911 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4902 - ::capnp::word(100, 0, 0, 0, 3, 0, 1, 0), 4903 - ::capnp::word(176, 0, 0, 0, 2, 0, 1, 0), 4912 + ::capnp::word(128, 0, 0, 0, 3, 0, 1, 0), 4913 + ::capnp::word(204, 0, 0, 0, 2, 0, 1, 0), 4904 4914 ::capnp::word(2, 0, 0, 0, 2, 0, 0, 0), 4905 4915 ::capnp::word(0, 0, 1, 0, 2, 0, 0, 0), 4906 4916 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4907 - ::capnp::word(173, 0, 0, 0, 202, 0, 0, 0), 4917 + ::capnp::word(201, 0, 0, 0, 202, 0, 0, 0), 4908 4918 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4909 - ::capnp::word(180, 0, 0, 0, 3, 0, 1, 0), 4910 - ::capnp::word(208, 0, 0, 0, 2, 0, 1, 0), 4919 + ::capnp::word(208, 0, 0, 0, 3, 0, 1, 0), 4920 + ::capnp::word(236, 0, 0, 0, 2, 0, 1, 0), 4911 4921 ::capnp::word(3, 0, 0, 0, 3, 0, 0, 0), 4912 4922 ::capnp::word(0, 0, 1, 0, 3, 0, 0, 0), 4913 4923 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4914 - ::capnp::word(205, 0, 0, 0, 82, 0, 0, 0), 4924 + ::capnp::word(233, 0, 0, 0, 82, 0, 0, 0), 4915 4925 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4916 - ::capnp::word(204, 0, 0, 0, 3, 0, 1, 0), 4917 - ::capnp::word(216, 0, 0, 0, 2, 0, 1, 0), 4926 + ::capnp::word(232, 0, 0, 0, 3, 0, 1, 0), 4927 + ::capnp::word(244, 0, 0, 0, 2, 0, 1, 0), 4928 + ::capnp::word(4, 0, 0, 0, 4, 0, 0, 0), 4929 + ::capnp::word(0, 0, 1, 0, 4, 0, 0, 0), 4930 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4931 + ::capnp::word(241, 0, 0, 0, 162, 0, 0, 0), 4932 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4933 + ::capnp::word(244, 0, 0, 0, 3, 0, 1, 0), 4934 + ::capnp::word(16, 1, 0, 0, 2, 0, 1, 0), 4918 4935 ::capnp::word(116, 121, 112, 101, 0, 0, 0, 0), 4919 4936 ::capnp::word(16, 0, 0, 0, 0, 0, 0, 0), 4920 4937 ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), ··· 4972 4989 ::capnp::word(16, 0, 0, 0, 0, 0, 0, 0), 4973 4990 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4974 4991 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4992 + ::capnp::word(112, 111, 115, 105, 116, 105, 111, 110), 4993 + ::capnp::word(97, 108, 65, 99, 99, 101, 115, 115), 4994 + ::capnp::word(111, 114, 115, 0, 0, 0, 0, 0), 4995 + ::capnp::word(14, 0, 0, 0, 0, 0, 0, 0), 4996 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4997 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4998 + ::capnp::word(0, 0, 0, 0, 3, 0, 1, 0), 4999 + ::capnp::word(16, 0, 0, 0, 0, 0, 0, 0), 5000 + ::capnp::word(182, 249, 180, 130, 154, 155, 250, 181), 5001 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5002 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5003 + ::capnp::word(14, 0, 0, 0, 0, 0, 0, 0), 5004 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5005 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 4975 5006 ]; 4976 5007 pub fn get_field_types(index: u16) -> ::capnp::introspect::Type { 4977 5008 match index { ··· 4979 5010 1 => <::capnp::struct_list::Owned<crate::schema_capnp::property::Owned<crate::schema_capnp::record_accessor::Owned>> as ::capnp::introspect::Introspect>::introspect(), 4980 5011 2 => <::capnp::struct_list::Owned<crate::schema_capnp::variant_specific_accessors::Owned> as ::capnp::introspect::Introspect>::introspect(), 4981 5012 3 => <crate::schema_capnp::publicity::Owned as ::capnp::introspect::Introspect>::introspect(), 5013 + 4 => <::capnp::struct_list::Owned<crate::schema_capnp::positional_accessors::Owned> as ::capnp::introspect::Introspect>::introspect(), 4982 5014 _ => ::capnp::introspect::panic_invalid_field_index(index), 4983 5015 } 4984 5016 } ··· 4991 5023 members_by_discriminant: MEMBERS_BY_DISCRIMINANT, 4992 5024 members_by_name: MEMBERS_BY_NAME, 4993 5025 }; 4994 - pub static NONUNION_MEMBERS : &[u16] = &[0,1,2,3]; 5026 + pub static NONUNION_MEMBERS : &[u16] = &[0,1,2,3,4]; 4995 5027 pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[]; 4996 - pub static MEMBERS_BY_NAME : &[u16] = &[3,1,0,2]; 5028 + pub static MEMBERS_BY_NAME : &[u16] = &[4,3,1,0,2]; 4997 5029 pub const TYPE_ID: u64 = 0x8423_3b98_8d44_678f; 4998 5030 } 4999 5031 } ··· 5148 5180 impl Pipeline { 5149 5181 } 5150 5182 mod _private { 5151 - pub static ENCODED_NODE: [::capnp::Word; 52] = [ 5152 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 5183 + pub static ENCODED_NODE: [::capnp::Word; 51] = [ 5184 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 5153 5185 ::capnp::word(25, 53, 175, 243, 170, 173, 34, 197), 5154 5186 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 5155 5187 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 5156 5188 ::capnp::word(1, 0, 7, 0, 0, 0, 0, 0), 5157 5189 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5158 - ::capnp::word(49, 10, 0, 0, 132, 10, 0, 0), 5159 5190 ::capnp::word(21, 0, 0, 0, 50, 1, 0, 0), 5160 5191 ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 5161 5192 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 5224 5255 } 5225 5256 } 5226 5257 5258 + pub mod positional_accessors { 5259 + #[derive(Copy, Clone)] 5260 + pub struct Owned(()); 5261 + impl ::capnp::introspect::Introspect for Owned { fn introspect() -> ::capnp::introspect::Type { ::capnp::introspect::TypeVariant::Struct(::capnp::introspect::RawBrandedStructSchema { generic: &_private::RAW_SCHEMA, field_types: _private::get_field_types, annotation_types: _private::get_annotation_types }).into() } } 5262 + impl ::capnp::traits::Owned for Owned { type Reader<'a> = Reader<'a>; type Builder<'a> = Builder<'a>; } 5263 + impl ::capnp::traits::OwnedStruct for Owned { type Reader<'a> = Reader<'a>; type Builder<'a> = Builder<'a>; } 5264 + impl ::capnp::traits::Pipelined for Owned { type Pipeline = Pipeline; } 5265 + 5266 + pub struct Reader<'a> { reader: ::capnp::private::layout::StructReader<'a> } 5267 + impl <> ::core::marker::Copy for Reader<'_,> {} 5268 + impl <> ::core::clone::Clone for Reader<'_,> { 5269 + fn clone(&self) -> Self { *self } 5270 + } 5271 + 5272 + impl <> ::capnp::traits::HasTypeId for Reader<'_,> { 5273 + const TYPE_ID: u64 = _private::TYPE_ID; 5274 + } 5275 + impl <'a,> ::core::convert::From<::capnp::private::layout::StructReader<'a>> for Reader<'a,> { 5276 + fn from(reader: ::capnp::private::layout::StructReader<'a>) -> Self { 5277 + Self { reader, } 5278 + } 5279 + } 5280 + 5281 + impl <'a,> ::core::convert::From<Reader<'a,>> for ::capnp::dynamic_value::Reader<'a> { 5282 + fn from(reader: Reader<'a,>) -> Self { 5283 + Self::Struct(::capnp::dynamic_struct::Reader::new(reader.reader, ::capnp::schema::StructSchema::new(::capnp::introspect::RawBrandedStructSchema { generic: &_private::RAW_SCHEMA, field_types: _private::get_field_types::<>, annotation_types: _private::get_annotation_types::<>}))) 5284 + } 5285 + } 5286 + 5287 + impl <> ::core::fmt::Debug for Reader<'_,> { 5288 + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::result::Result<(), ::core::fmt::Error> { 5289 + core::fmt::Debug::fmt(&::core::convert::Into::<::capnp::dynamic_value::Reader<'_>>::into(*self), f) 5290 + } 5291 + } 5292 + 5293 + impl <'a,> ::capnp::traits::FromPointerReader<'a> for Reader<'a,> { 5294 + fn get_from_pointer(reader: &::capnp::private::layout::PointerReader<'a>, default: ::core::option::Option<&'a [::capnp::Word]>) -> ::capnp::Result<Self> { 5295 + ::core::result::Result::Ok(reader.get_struct(default)?.into()) 5296 + } 5297 + } 5298 + 5299 + impl <'a,> ::capnp::traits::IntoInternalStructReader<'a> for Reader<'a,> { 5300 + fn into_internal_struct_reader(self) -> ::capnp::private::layout::StructReader<'a> { 5301 + self.reader 5302 + } 5303 + } 5304 + 5305 + impl <'a,> ::capnp::traits::Imbue<'a> for Reader<'a,> { 5306 + fn imbue(&mut self, cap_table: &'a ::capnp::private::layout::CapTable) { 5307 + self.reader.imbue(::capnp::private::layout::CapTableReader::Plain(cap_table)) 5308 + } 5309 + } 5310 + 5311 + impl <'a,> Reader<'a,> { 5312 + pub fn reborrow(&self) -> Reader<'_,> { 5313 + Self { .. *self } 5314 + } 5315 + 5316 + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { 5317 + self.reader.total_size() 5318 + } 5319 + #[inline] 5320 + pub fn get_accessors(self) -> ::capnp::Result<::capnp::struct_list::Reader<'a,crate::schema_capnp::type_::Owned>> { 5321 + ::capnp::traits::FromPointerReader::get_from_pointer(&self.reader.get_pointer_field(0), ::core::option::Option::None) 5322 + } 5323 + #[inline] 5324 + pub fn has_accessors(&self) -> bool { 5325 + !self.reader.get_pointer_field(0).is_null() 5326 + } 5327 + } 5328 + 5329 + pub struct Builder<'a> { builder: ::capnp::private::layout::StructBuilder<'a> } 5330 + impl <> ::capnp::traits::HasStructSize for Builder<'_,> { 5331 + const STRUCT_SIZE: ::capnp::private::layout::StructSize = ::capnp::private::layout::StructSize { data: 0, pointers: 1 }; 5332 + } 5333 + impl <> ::capnp::traits::HasTypeId for Builder<'_,> { 5334 + const TYPE_ID: u64 = _private::TYPE_ID; 5335 + } 5336 + impl <'a,> ::core::convert::From<::capnp::private::layout::StructBuilder<'a>> for Builder<'a,> { 5337 + fn from(builder: ::capnp::private::layout::StructBuilder<'a>) -> Self { 5338 + Self { builder, } 5339 + } 5340 + } 5341 + 5342 + impl <'a,> ::core::convert::From<Builder<'a,>> for ::capnp::dynamic_value::Builder<'a> { 5343 + fn from(builder: Builder<'a,>) -> Self { 5344 + Self::Struct(::capnp::dynamic_struct::Builder::new(builder.builder, ::capnp::schema::StructSchema::new(::capnp::introspect::RawBrandedStructSchema { generic: &_private::RAW_SCHEMA, field_types: _private::get_field_types::<>, annotation_types: _private::get_annotation_types::<>}))) 5345 + } 5346 + } 5347 + 5348 + impl <'a,> ::capnp::traits::ImbueMut<'a> for Builder<'a,> { 5349 + fn imbue_mut(&mut self, cap_table: &'a mut ::capnp::private::layout::CapTable) { 5350 + self.builder.imbue(::capnp::private::layout::CapTableBuilder::Plain(cap_table)) 5351 + } 5352 + } 5353 + 5354 + impl <'a,> ::capnp::traits::FromPointerBuilder<'a> for Builder<'a,> { 5355 + fn init_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, _size: u32) -> Self { 5356 + builder.init_struct(<Self as ::capnp::traits::HasStructSize>::STRUCT_SIZE).into() 5357 + } 5358 + fn get_from_pointer(builder: ::capnp::private::layout::PointerBuilder<'a>, default: ::core::option::Option<&'a [::capnp::Word]>) -> ::capnp::Result<Self> { 5359 + ::core::result::Result::Ok(builder.get_struct(<Self as ::capnp::traits::HasStructSize>::STRUCT_SIZE, default)?.into()) 5360 + } 5361 + } 5362 + 5363 + impl <> ::capnp::traits::SetterInput<Owned<>> for Reader<'_,> { 5364 + fn set_pointer_builder(mut pointer: ::capnp::private::layout::PointerBuilder<'_>, value: Self, canonicalize: bool) -> ::capnp::Result<()> { pointer.set_struct(&value.reader, canonicalize) } 5365 + } 5366 + 5367 + impl <'a,> Builder<'a,> { 5368 + pub fn into_reader(self) -> Reader<'a,> { 5369 + self.builder.into_reader().into() 5370 + } 5371 + pub fn reborrow(&mut self) -> Builder<'_,> { 5372 + Builder { builder: self.builder.reborrow() } 5373 + } 5374 + pub fn reborrow_as_reader(&self) -> Reader<'_,> { 5375 + self.builder.as_reader().into() 5376 + } 5377 + 5378 + pub fn total_size(&self) -> ::capnp::Result<::capnp::MessageSize> { 5379 + self.builder.as_reader().total_size() 5380 + } 5381 + #[inline] 5382 + pub fn get_accessors(self) -> ::capnp::Result<::capnp::struct_list::Builder<'a,crate::schema_capnp::type_::Owned>> { 5383 + ::capnp::traits::FromPointerBuilder::get_from_pointer(self.builder.get_pointer_field(0), ::core::option::Option::None) 5384 + } 5385 + #[inline] 5386 + pub fn set_accessors(&mut self, value: ::capnp::struct_list::Reader<'_,crate::schema_capnp::type_::Owned>) -> ::capnp::Result<()> { 5387 + ::capnp::traits::SetterInput::set_pointer_builder(self.builder.reborrow().get_pointer_field(0), value, false) 5388 + } 5389 + #[inline] 5390 + pub fn init_accessors(self, size: u32) -> ::capnp::struct_list::Builder<'a,crate::schema_capnp::type_::Owned> { 5391 + ::capnp::traits::FromPointerBuilder::init_pointer(self.builder.get_pointer_field(0), size) 5392 + } 5393 + #[inline] 5394 + pub fn has_accessors(&self) -> bool { 5395 + !self.builder.is_pointer_field_null(0) 5396 + } 5397 + } 5398 + 5399 + pub struct Pipeline { _typeless: ::capnp::any_pointer::Pipeline } 5400 + impl ::capnp::capability::FromTypelessPipeline for Pipeline { 5401 + fn new(typeless: ::capnp::any_pointer::Pipeline) -> Self { 5402 + Self { _typeless: typeless, } 5403 + } 5404 + } 5405 + impl Pipeline { 5406 + } 5407 + mod _private { 5408 + pub static ENCODED_NODE: [::capnp::Word; 39] = [ 5409 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 5410 + ::capnp::word(182, 249, 180, 130, 154, 155, 250, 181), 5411 + ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 5412 + ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 5413 + ::capnp::word(1, 0, 7, 0, 0, 0, 0, 0), 5414 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5415 + ::capnp::word(21, 0, 0, 0, 10, 1, 0, 0), 5416 + ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 5417 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5418 + ::capnp::word(33, 0, 0, 0, 63, 0, 0, 0), 5419 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5420 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5421 + ::capnp::word(115, 99, 104, 101, 109, 97, 46, 99), 5422 + ::capnp::word(97, 112, 110, 112, 58, 80, 111, 115), 5423 + ::capnp::word(105, 116, 105, 111, 110, 97, 108, 65), 5424 + ::capnp::word(99, 99, 101, 115, 115, 111, 114, 115), 5425 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5426 + ::capnp::word(0, 0, 0, 0, 1, 0, 1, 0), 5427 + ::capnp::word(4, 0, 0, 0, 3, 0, 4, 0), 5428 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5429 + ::capnp::word(0, 0, 1, 0, 0, 0, 0, 0), 5430 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5431 + ::capnp::word(13, 0, 0, 0, 82, 0, 0, 0), 5432 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5433 + ::capnp::word(12, 0, 0, 0, 3, 0, 1, 0), 5434 + ::capnp::word(40, 0, 0, 0, 2, 0, 1, 0), 5435 + ::capnp::word(97, 99, 99, 101, 115, 115, 111, 114), 5436 + ::capnp::word(115, 0, 0, 0, 0, 0, 0, 0), 5437 + ::capnp::word(14, 0, 0, 0, 0, 0, 0, 0), 5438 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5439 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5440 + ::capnp::word(0, 0, 0, 0, 3, 0, 1, 0), 5441 + ::capnp::word(16, 0, 0, 0, 0, 0, 0, 0), 5442 + ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), 5443 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5444 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5445 + ::capnp::word(14, 0, 0, 0, 0, 0, 0, 0), 5446 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5447 + ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5448 + ]; 5449 + pub fn get_field_types(index: u16) -> ::capnp::introspect::Type { 5450 + match index { 5451 + 0 => <::capnp::struct_list::Owned<crate::schema_capnp::type_::Owned> as ::capnp::introspect::Introspect>::introspect(), 5452 + _ => ::capnp::introspect::panic_invalid_field_index(index), 5453 + } 5454 + } 5455 + pub fn get_annotation_types(child_index: Option<u16>, index: u32) -> ::capnp::introspect::Type { 5456 + ::capnp::introspect::panic_invalid_annotation_indices(child_index, index) 5457 + } 5458 + pub static RAW_SCHEMA: ::capnp::introspect::RawStructSchema = ::capnp::introspect::RawStructSchema { 5459 + encoded_node: &ENCODED_NODE, 5460 + nonunion_members: NONUNION_MEMBERS, 5461 + members_by_discriminant: MEMBERS_BY_DISCRIMINANT, 5462 + members_by_name: MEMBERS_BY_NAME, 5463 + }; 5464 + pub static NONUNION_MEMBERS : &[u16] = &[0]; 5465 + pub static MEMBERS_BY_DISCRIMINANT : &[u16] = &[]; 5466 + pub static MEMBERS_BY_NAME : &[u16] = &[0]; 5467 + pub const TYPE_ID: u64 = 0xb5fa_9b9a_82b4_f9b6; 5468 + } 5469 + } 5470 + 5227 5471 pub mod record_accessor { 5228 5472 #[derive(Copy, Clone)] 5229 5473 pub struct Owned(()); ··· 5437 5681 } 5438 5682 } 5439 5683 mod _private { 5440 - pub static ENCODED_NODE: [::capnp::Word; 80] = [ 5441 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 5684 + pub static ENCODED_NODE: [::capnp::Word; 79] = [ 5685 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 5442 5686 ::capnp::word(158, 200, 86, 219, 173, 1, 90, 174), 5443 5687 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 5444 5688 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 5445 5689 ::capnp::word(3, 0, 7, 0, 0, 0, 0, 0), 5446 5690 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5447 - ::capnp::word(134, 10, 0, 0, 240, 10, 0, 0), 5448 5691 ::capnp::word(21, 0, 0, 0, 226, 0, 0, 0), 5449 5692 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 5450 5693 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 5713 5956 impl Pipeline { 5714 5957 } 5715 5958 mod _private { 5716 - pub static ENCODED_NODE: [::capnp::Word; 50] = [ 5717 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 5959 + pub static ENCODED_NODE: [::capnp::Word; 49] = [ 5960 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 5718 5961 ::capnp::word(153, 102, 38, 126, 162, 160, 201, 166), 5719 5962 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 5720 5963 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 5721 5964 ::capnp::word(0, 0, 7, 0, 0, 0, 2, 0), 5722 5965 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 5723 - ::capnp::word(91, 11, 0, 0, 178, 11, 0, 0), 5724 5966 ::capnp::word(21, 0, 0, 0, 234, 0, 0, 0), 5725 5967 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 5726 5968 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 6004 6246 impl Pipeline { 6005 6247 } 6006 6248 mod _private { 6007 - pub static ENCODED_NODE: [::capnp::Word; 50] = [ 6008 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 6249 + pub static ENCODED_NODE: [::capnp::Word; 49] = [ 6250 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 6009 6251 ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), 6010 6252 ::capnp::word(13, 0, 0, 0, 1, 0, 2, 0), 6011 6253 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 6012 6254 ::capnp::word(6, 0, 7, 0, 0, 0, 4, 0), 6013 6255 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6014 - ::capnp::word(180, 11, 0, 0, 75, 13, 0, 0), 6015 6256 ::capnp::word(21, 0, 0, 0, 146, 0, 0, 0), 6016 6257 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 6017 6258 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 6364 6605 } 6365 6606 } 6366 6607 mod _private { 6367 - pub static ENCODED_NODE: [::capnp::Word; 114] = [ 6368 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 6608 + pub static ENCODED_NODE: [::capnp::Word; 113] = [ 6609 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 6369 6610 ::capnp::word(112, 148, 53, 107, 90, 14, 28, 212), 6370 6611 ::capnp::word(18, 0, 0, 0, 1, 0, 2, 0), 6371 6612 ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), 6372 6613 ::capnp::word(6, 0, 7, 0, 1, 0, 0, 0), 6373 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6374 6614 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6375 6615 ::capnp::word(21, 0, 0, 0, 178, 0, 0, 0), 6376 6616 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 6684 6924 } 6685 6925 } 6686 6926 mod _private { 6687 - pub static ENCODED_NODE: [::capnp::Word; 52] = [ 6688 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 6927 + pub static ENCODED_NODE: [::capnp::Word; 51] = [ 6928 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 6689 6929 ::capnp::word(107, 183, 96, 119, 140, 121, 242, 130), 6690 6930 ::capnp::word(18, 0, 0, 0, 1, 0, 2, 0), 6691 6931 ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), 6692 6932 ::capnp::word(6, 0, 7, 0, 1, 0, 0, 0), 6693 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6694 6933 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6695 6934 ::capnp::word(21, 0, 0, 0, 170, 0, 0, 0), 6696 6935 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 6899 7138 impl Pipeline { 6900 7139 } 6901 7140 mod _private { 6902 - pub static ENCODED_NODE: [::capnp::Word; 32] = [ 6903 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 7141 + pub static ENCODED_NODE: [::capnp::Word; 31] = [ 7142 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 6904 7143 ::capnp::word(54, 132, 226, 31, 115, 14, 218, 204), 6905 7144 ::capnp::word(18, 0, 0, 0, 1, 0, 2, 0), 6906 7145 ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), 6907 7146 ::capnp::word(6, 0, 7, 0, 1, 0, 0, 0), 6908 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6909 7147 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 6910 7148 ::capnp::word(21, 0, 0, 0, 178, 0, 0, 0), 6911 7149 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 7105 7343 impl Pipeline { 7106 7344 } 7107 7345 mod _private { 7108 - pub static ENCODED_NODE: [::capnp::Word; 37] = [ 7109 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 7346 + pub static ENCODED_NODE: [::capnp::Word; 36] = [ 7347 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 7110 7348 ::capnp::word(61, 216, 21, 128, 12, 226, 23, 140), 7111 7349 ::capnp::word(18, 0, 0, 0, 1, 0, 2, 0), 7112 7350 ::capnp::word(0, 7, 151, 64, 46, 128, 246, 130), 7113 7351 ::capnp::word(6, 0, 7, 0, 1, 0, 0, 0), 7114 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 7115 7352 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 7116 7353 ::capnp::word(21, 0, 0, 0, 194, 0, 0, 0), 7117 7354 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 7398 7635 } 7399 7636 } 7400 7637 mod _private { 7401 - pub static ENCODED_NODE: [::capnp::Word; 81] = [ 7402 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 7638 + pub static ENCODED_NODE: [::capnp::Word; 80] = [ 7639 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 7403 7640 ::capnp::word(28, 5, 251, 168, 241, 216, 198, 212), 7404 7641 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 7405 7642 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 7406 7643 ::capnp::word(4, 0, 7, 0, 0, 0, 0, 0), 7407 7644 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 7408 - ::capnp::word(77, 13, 0, 0, 210, 13, 0, 0), 7409 7645 ::capnp::word(21, 0, 0, 0, 242, 0, 0, 0), 7410 7646 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 7411 7647 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 7704 7940 impl Pipeline { 7705 7941 } 7706 7942 mod _private { 7707 - pub static ENCODED_NODE: [::capnp::Word; 76] = [ 7708 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 7943 + pub static ENCODED_NODE: [::capnp::Word; 75] = [ 7944 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 7709 7945 ::capnp::word(102, 28, 233, 33, 200, 211, 73, 197), 7710 7946 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 7711 7947 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 7712 7948 ::capnp::word(1, 0, 7, 0, 0, 0, 3, 0), 7713 7949 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 7714 - ::capnp::word(212, 13, 0, 0, 67, 14, 0, 0), 7715 7950 ::capnp::word(21, 0, 0, 0, 186, 0, 0, 0), 7716 7951 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 7717 7952 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 7999 8234 impl Pipeline { 8000 8235 } 8001 8236 mod _private { 8002 - pub static ENCODED_NODE: [::capnp::Word; 101] = [ 8003 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 8237 + pub static ENCODED_NODE: [::capnp::Word; 100] = [ 8238 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 8004 8239 ::capnp::word(223, 160, 58, 118, 252, 159, 29, 155), 8005 8240 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 8006 8241 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 8007 8242 ::capnp::word(0, 0, 7, 0, 0, 0, 0, 0), 8008 8243 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 8009 - ::capnp::word(69, 14, 0, 0, 239, 14, 0, 0), 8010 8244 ::capnp::word(21, 0, 0, 0, 234, 0, 0, 0), 8011 8245 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 8012 8246 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 8337 8571 impl Pipeline { 8338 8572 } 8339 8573 mod _private { 8340 - pub static ENCODED_NODE: [::capnp::Word; 46] = [ 8341 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 8574 + pub static ENCODED_NODE: [::capnp::Word; 45] = [ 8575 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 8342 8576 ::capnp::word(26, 168, 208, 43, 233, 121, 76, 225), 8343 8577 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 8344 8578 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 8345 8579 ::capnp::word(9, 0, 7, 0, 0, 0, 3, 0), 8346 8580 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 8347 - ::capnp::word(241, 14, 0, 0, 97, 18, 0, 0), 8348 8581 ::capnp::word(21, 0, 0, 0, 42, 1, 0, 0), 8349 8582 ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 8350 8583 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 8694 8927 } 8695 8928 } 8696 8929 mod _private { 8697 - pub static ENCODED_NODE: [::capnp::Word; 114] = [ 8698 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 8930 + pub static ENCODED_NODE: [::capnp::Word; 113] = [ 8931 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 8699 8932 ::capnp::word(208, 251, 150, 129, 105, 157, 121, 149), 8700 8933 ::capnp::word(37, 0, 0, 0, 1, 0, 1, 0), 8701 8934 ::capnp::word(26, 168, 208, 43, 233, 121, 76, 225), 8702 8935 ::capnp::word(9, 0, 7, 0, 1, 0, 0, 0), 8703 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 8704 8936 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 8705 8937 ::capnp::word(21, 0, 0, 0, 162, 1, 0, 0), 8706 8938 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 9209 9441 } 9210 9442 } 9211 9443 mod _private { 9212 - pub static ENCODED_NODE: [::capnp::Word; 213] = [ 9213 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 9444 + pub static ENCODED_NODE: [::capnp::Word; 212] = [ 9445 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 9214 9446 ::capnp::word(121, 55, 113, 152, 197, 21, 166, 174), 9215 9447 ::capnp::word(37, 0, 0, 0, 1, 0, 1, 0), 9216 9448 ::capnp::word(26, 168, 208, 43, 233, 121, 76, 225), 9217 9449 ::capnp::word(9, 0, 7, 0, 1, 0, 0, 0), 9218 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 9219 9450 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 9220 9451 ::capnp::word(21, 0, 0, 0, 114, 1, 0, 0), 9221 9452 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 9743 9974 } 9744 9975 } 9745 9976 mod _private { 9746 - pub static ENCODED_NODE: [::capnp::Word; 159] = [ 9747 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 9977 + pub static ENCODED_NODE: [::capnp::Word; 158] = [ 9978 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 9748 9979 ::capnp::word(213, 61, 35, 233, 38, 21, 11, 240), 9749 9980 ::capnp::word(37, 0, 0, 0, 1, 0, 1, 0), 9750 9981 ::capnp::word(26, 168, 208, 43, 233, 121, 76, 225), 9751 9982 ::capnp::word(9, 0, 7, 0, 1, 0, 0, 0), 9752 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 9753 9983 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 9754 9984 ::capnp::word(21, 0, 0, 0, 98, 1, 0, 0), 9755 9985 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 10130 10360 impl Pipeline { 10131 10361 } 10132 10362 mod _private { 10133 - pub static ENCODED_NODE: [::capnp::Word; 79] = [ 10134 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 10363 + pub static ENCODED_NODE: [::capnp::Word; 78] = [ 10364 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 10135 10365 ::capnp::word(182, 107, 247, 129, 198, 121, 124, 171), 10136 10366 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 10137 10367 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 10138 10368 ::capnp::word(0, 0, 7, 0, 0, 0, 4, 0), 10139 10369 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 10140 - ::capnp::word(99, 18, 0, 0, 218, 18, 0, 0), 10141 10370 ::capnp::word(21, 0, 0, 0, 162, 0, 0, 0), 10142 10371 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 10143 10372 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 10418 10647 impl Pipeline { 10419 10648 } 10420 10649 mod _private { 10421 - pub static ENCODED_NODE: [::capnp::Word; 49] = [ 10422 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 10650 + pub static ENCODED_NODE: [::capnp::Word; 48] = [ 10651 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 10423 10652 ::capnp::word(236, 212, 23, 222, 114, 58, 95, 198), 10424 10653 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 10425 10654 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 10426 10655 ::capnp::word(2, 0, 7, 0, 0, 0, 0, 0), 10427 10656 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 10428 - ::capnp::word(220, 18, 0, 0, 23, 19, 0, 0), 10429 10657 ::capnp::word(21, 0, 0, 0, 178, 0, 0, 0), 10430 10658 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 10431 10659 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 10642 10870 impl Pipeline { 10643 10871 } 10644 10872 mod _private { 10645 - pub static ENCODED_NODE: [::capnp::Word; 48] = [ 10646 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 10873 + pub static ENCODED_NODE: [::capnp::Word; 47] = [ 10874 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 10647 10875 ::capnp::word(176, 122, 119, 83, 72, 147, 59, 230), 10648 10876 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 10649 10877 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 10650 10878 ::capnp::word(0, 0, 7, 0, 0, 0, 0, 0), 10651 10879 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 10652 - ::capnp::word(25, 19, 0, 0, 81, 19, 0, 0), 10653 10880 ::capnp::word(21, 0, 0, 0, 170, 0, 0, 0), 10654 10881 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 10655 10882 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 10853 11080 impl Pipeline { 10854 11081 } 10855 11082 mod _private { 10856 - pub static ENCODED_NODE: [::capnp::Word; 34] = [ 10857 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 11083 + pub static ENCODED_NODE: [::capnp::Word; 33] = [ 11084 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 10858 11085 ::capnp::word(206, 188, 213, 112, 115, 74, 121, 191), 10859 11086 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 10860 11087 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 10861 11088 ::capnp::word(0, 0, 7, 0, 0, 0, 0, 0), 10862 11089 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 10863 - ::capnp::word(154, 19, 0, 0, 196, 19, 0, 0), 10864 11090 ::capnp::word(21, 0, 0, 0, 202, 0, 0, 0), 10865 11091 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 10866 11092 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 11049 11275 impl Pipeline { 11050 11276 } 11051 11277 mod _private { 11052 - pub static ENCODED_NODE: [::capnp::Word; 34] = [ 11053 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 11278 + pub static ENCODED_NODE: [::capnp::Word; 33] = [ 11279 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 11054 11280 ::capnp::word(229, 125, 51, 241, 210, 87, 45, 136), 11055 11281 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 11056 11282 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 11057 11283 ::capnp::word(0, 0, 7, 0, 0, 0, 0, 0), 11058 11284 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 11059 - ::capnp::word(13, 20, 0, 0, 55, 20, 0, 0), 11060 11285 ::capnp::word(21, 0, 0, 0, 202, 0, 0, 0), 11061 11286 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 11062 11287 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 11269 11494 impl Pipeline { 11270 11495 } 11271 11496 mod _private { 11272 - pub static ENCODED_NODE: [::capnp::Word; 64] = [ 11273 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 11497 + pub static ENCODED_NODE: [::capnp::Word; 63] = [ 11498 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 11274 11499 ::capnp::word(69, 235, 12, 250, 24, 243, 166, 215), 11275 11500 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 11276 11501 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 11277 11502 ::capnp::word(1, 0, 7, 0, 0, 0, 0, 0), 11278 11503 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 11279 - ::capnp::word(57, 20, 0, 0, 138, 20, 0, 0), 11280 11504 ::capnp::word(21, 0, 0, 0, 178, 0, 0, 0), 11281 11505 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 11282 11506 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 11706 11930 impl Pipeline { 11707 11931 } 11708 11932 mod _private { 11709 - pub static ENCODED_NODE: [::capnp::Word; 125] = [ 11710 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 11933 + pub static ENCODED_NODE: [::capnp::Word; 124] = [ 11934 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 11711 11935 ::capnp::word(106, 82, 109, 230, 111, 220, 234, 230), 11712 11936 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 11713 11937 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 11714 11938 ::capnp::word(4, 0, 7, 0, 0, 0, 9, 0), 11715 11939 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 11716 - ::capnp::word(140, 20, 0, 0, 251, 22, 0, 0), 11717 11940 ::capnp::word(21, 0, 0, 0, 178, 0, 0, 0), 11718 11941 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 11719 11942 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 12052 12275 } 12053 12276 } 12054 12277 mod _private { 12055 - pub static ENCODED_NODE: [::capnp::Word; 53] = [ 12056 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 12278 + pub static ENCODED_NODE: [::capnp::Word; 52] = [ 12279 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 12057 12280 ::capnp::word(66, 132, 75, 125, 75, 73, 18, 163), 12058 12281 ::capnp::word(22, 0, 0, 0, 1, 0, 1, 0), 12059 12282 ::capnp::word(106, 82, 109, 230, 111, 220, 234, 230), 12060 12283 ::capnp::word(4, 0, 7, 0, 1, 0, 0, 0), 12061 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12062 12284 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12063 12285 ::capnp::word(21, 0, 0, 0, 226, 0, 0, 0), 12064 12286 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 12307 12529 } 12308 12530 } 12309 12531 mod _private { 12310 - pub static ENCODED_NODE: [::capnp::Word; 53] = [ 12311 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 12532 + pub static ENCODED_NODE: [::capnp::Word; 52] = [ 12533 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 12312 12534 ::capnp::word(187, 26, 170, 149, 101, 60, 254, 232), 12313 12535 ::capnp::word(22, 0, 0, 0, 1, 0, 1, 0), 12314 12536 ::capnp::word(106, 82, 109, 230, 111, 220, 234, 230), 12315 12537 ::capnp::word(4, 0, 7, 0, 1, 0, 0, 0), 12316 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12317 12538 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12318 12539 ::capnp::word(21, 0, 0, 0, 218, 0, 0, 0), 12319 12540 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 12586 12807 } 12587 12808 } 12588 12809 mod _private { 12589 - pub static ENCODED_NODE: [::capnp::Word; 67] = [ 12590 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 12810 + pub static ENCODED_NODE: [::capnp::Word; 66] = [ 12811 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 12591 12812 ::capnp::word(28, 159, 252, 166, 123, 114, 181, 230), 12592 12813 ::capnp::word(22, 0, 0, 0, 1, 0, 1, 0), 12593 12814 ::capnp::word(106, 82, 109, 230, 111, 220, 234, 230), 12594 12815 ::capnp::word(4, 0, 7, 0, 1, 0, 0, 0), 12595 12816 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12596 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12597 12817 ::capnp::word(21, 0, 0, 0, 234, 0, 0, 0), 12598 12818 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12599 12819 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 12907 13127 } 12908 13128 } 12909 13129 mod _private { 12910 - pub static ENCODED_NODE: [::capnp::Word; 79] = [ 12911 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 13130 + pub static ENCODED_NODE: [::capnp::Word; 78] = [ 13131 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 12912 13132 ::capnp::word(167, 2, 255, 44, 84, 233, 10, 203), 12913 13133 ::capnp::word(22, 0, 0, 0, 1, 0, 1, 0), 12914 13134 ::capnp::word(106, 82, 109, 230, 111, 220, 234, 230), 12915 13135 ::capnp::word(4, 0, 7, 0, 1, 0, 0, 0), 12916 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12917 13136 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 12918 13137 ::capnp::word(21, 0, 0, 0, 210, 0, 0, 0), 12919 13138 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 13193 13412 } 13194 13413 } 13195 13414 mod _private { 13196 - pub static ENCODED_NODE: [::capnp::Word; 50] = [ 13197 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 13415 + pub static ENCODED_NODE: [::capnp::Word; 49] = [ 13416 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 13198 13417 ::capnp::word(61, 195, 0, 38, 129, 28, 187, 154), 13199 13418 ::capnp::word(22, 0, 0, 0, 1, 0, 1, 0), 13200 13419 ::capnp::word(106, 82, 109, 230, 111, 220, 234, 230), 13201 13420 ::capnp::word(4, 0, 7, 0, 1, 0, 0, 0), 13202 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 13203 13421 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 13204 13422 ::capnp::word(21, 0, 0, 0, 82, 1, 0, 0), 13205 13423 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 13473 13691 } 13474 13692 } 13475 13693 mod _private { 13476 - pub static ENCODED_NODE: [::capnp::Word; 68] = [ 13477 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 13694 + pub static ENCODED_NODE: [::capnp::Word; 67] = [ 13695 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 13478 13696 ::capnp::word(181, 42, 182, 217, 246, 199, 65, 197), 13479 13697 ::capnp::word(13, 0, 0, 0, 1, 0, 0, 0), 13480 13698 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 13481 13699 ::capnp::word(3, 0, 7, 0, 0, 0, 0, 0), 13482 13700 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 13483 - ::capnp::word(253, 22, 0, 0, 105, 23, 0, 0), 13484 13701 ::capnp::word(21, 0, 0, 0, 234, 0, 0, 0), 13485 13702 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 13486 13703 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 13951 14168 impl Pipeline { 13952 14169 } 13953 14170 mod _private { 13954 - pub static ENCODED_NODE: [::capnp::Word; 265] = [ 13955 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 14171 + pub static ENCODED_NODE: [::capnp::Word; 264] = [ 14172 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 13956 14173 ::capnp::word(84, 4, 149, 82, 63, 31, 245, 176), 13957 14174 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 13958 14175 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 13959 14176 ::capnp::word(1, 0, 7, 0, 0, 0, 17, 0), 13960 14177 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 13961 - ::capnp::word(107, 23, 0, 0, 145, 25, 0, 0), 13962 14178 ::capnp::word(21, 0, 0, 0, 26, 1, 0, 0), 13963 14179 ::capnp::word(37, 0, 0, 0, 7, 0, 0, 0), 13964 14180 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 14441 14657 } 14442 14658 } 14443 14659 mod _private { 14444 - pub static ENCODED_NODE: [::capnp::Word; 50] = [ 14445 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 14660 + pub static ENCODED_NODE: [::capnp::Word; 49] = [ 14661 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 14446 14662 ::capnp::word(20, 184, 71, 227, 143, 218, 2, 146), 14447 14663 ::capnp::word(35, 0, 0, 0, 1, 0, 1, 0), 14448 14664 ::capnp::word(84, 4, 149, 82, 63, 31, 245, 176), 14449 14665 ::capnp::word(1, 0, 7, 0, 1, 0, 0, 0), 14450 14666 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 14451 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 14452 14667 ::capnp::word(21, 0, 0, 0, 66, 1, 0, 0), 14453 14668 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 14454 14669 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 14666 14881 impl Pipeline { 14667 14882 } 14668 14883 mod _private { 14669 - pub static ENCODED_NODE: [::capnp::Word; 50] = [ 14670 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 14884 + pub static ENCODED_NODE: [::capnp::Word; 49] = [ 14885 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 14671 14886 ::capnp::word(94, 12, 190, 163, 221, 253, 125, 207), 14672 14887 ::capnp::word(35, 0, 0, 0, 1, 0, 1, 0), 14673 14888 ::capnp::word(84, 4, 149, 82, 63, 31, 245, 176), 14674 14889 ::capnp::word(1, 0, 7, 0, 1, 0, 0, 0), 14675 - ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 14676 14890 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 14677 14891 ::capnp::word(21, 0, 0, 0, 66, 1, 0, 0), 14678 14892 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 14928 15142 impl Pipeline { 14929 15143 } 14930 15144 mod _private { 14931 - pub static ENCODED_NODE: [::capnp::Word; 73] = [ 14932 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 15145 + pub static ENCODED_NODE: [::capnp::Word; 72] = [ 15146 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 14933 15147 ::capnp::word(101, 33, 49, 62, 78, 11, 246, 235), 14934 15148 ::capnp::word(13, 0, 0, 0, 1, 0, 1, 0), 14935 15149 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 14936 15150 ::capnp::word(2, 0, 7, 0, 0, 0, 0, 0), 14937 15151 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 14938 - ::capnp::word(147, 25, 0, 0, 252, 25, 0, 0), 14939 15152 ::capnp::word(21, 0, 0, 0, 202, 0, 0, 0), 14940 15153 ::capnp::word(33, 0, 0, 0, 7, 0, 0, 0), 14941 15154 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), ··· 15189 15402 impl Pipeline { 15190 15403 } 15191 15404 mod _private { 15192 - pub static ENCODED_NODE: [::capnp::Word; 66] = [ 15193 - ::capnp::word(0, 0, 0, 0, 6, 0, 6, 0), 15405 + pub static ENCODED_NODE: [::capnp::Word; 65] = [ 15406 + ::capnp::word(0, 0, 0, 0, 5, 0, 6, 0), 15194 15407 ::capnp::word(130, 77, 162, 53, 234, 228, 146, 132), 15195 15408 ::capnp::word(13, 0, 0, 0, 1, 0, 2, 0), 15196 15409 ::capnp::word(190, 237, 188, 253, 156, 169, 51, 181), 15197 15410 ::capnp::word(0, 0, 7, 0, 0, 0, 0, 0), 15198 15411 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0), 15199 - ::capnp::word(254, 25, 0, 0, 91, 26, 0, 0), 15200 15412 ::capnp::word(21, 0, 0, 0, 186, 0, 0, 0), 15201 15413 ::capnp::word(29, 0, 0, 0, 7, 0, 0, 0), 15202 15414 ::capnp::word(0, 0, 0, 0, 0, 0, 0, 0),
+5
compiler-core/schema.capnp
··· 116 116 sharedAccessors @1 :List(Property(RecordAccessor)); 117 117 variantSpecificAccessors @2 :List(VariantSpecificAccessors); 118 118 publicity @3 :Publicity; 119 + positionalAccessors @4 :List(PositionalAccessors); 119 120 } 120 121 121 122 struct VariantSpecificAccessors { 122 123 accessors @0 :List(Property(RecordAccessor)); 124 + } 125 + 126 + struct PositionalAccessors { 127 + accessors @0 :List(Type); 123 128 } 124 129 125 130 struct RecordAccessor {
+21 -15
compiler-core/src/analyse.rs
··· 1255 1255 let Accessors { 1256 1256 shared_accessors, 1257 1257 variant_specific_accessors, 1258 + positional_accessors, 1258 1259 } = custom_type_accessors(&constructors_data)?; 1259 1260 1260 1261 let map = AccessorsMap { ··· 1268 1269 // `return_type_constructor` below rather than looking it up twice. 1269 1270 type_: type_.clone(), 1270 1271 variant_specific_accessors, 1272 + variant_positional_accessors: positional_accessors, 1271 1273 }; 1272 1274 environment.insert_accessors(name.clone(), map); 1273 1275 ··· 1955 1957 struct Accessors { 1956 1958 shared_accessors: HashMap<EcoString, RecordAccessor>, 1957 1959 variant_specific_accessors: Vec<HashMap<EcoString, RecordAccessor>>, 1960 + positional_accessors: Vec<Vec<Arc<Type>>>, 1958 1961 } 1959 1962 1960 1963 fn custom_type_accessors(constructors: &[TypeValueConstructor]) -> Result<Accessors, Error> { ··· 1966 1969 let _ = shared_accessors.insert(accessor.label.clone(), accessor); 1967 1970 } 1968 1971 1969 - let mut variant_specific_accessors: Vec<HashMap<EcoString, RecordAccessor>> = 1970 - Vec::with_capacity(constructors.len()); 1972 + let mut variant_specific_accessors = Vec::with_capacity(constructors.len()); 1973 + let mut positional_accessors = Vec::with_capacity(constructors.len()); 1971 1974 1972 1975 for constructor in constructors { 1973 1976 let mut fields = HashMap::with_capacity(constructor.parameters.len()); 1977 + let mut positional_fields = Vec::new(); 1974 1978 1975 1979 for (index, parameter) in constructor.parameters.iter().enumerate() { 1976 - let Some(label) = &parameter.label else { 1977 - continue; 1978 - }; 1979 - 1980 - let _ = fields.insert( 1981 - label.clone(), 1982 - RecordAccessor { 1983 - index: index as u64, 1984 - label: label.clone(), 1985 - type_: parameter.type_.clone(), 1986 - documentation: parameter.documentation.clone(), 1987 - }, 1988 - ); 1980 + if let Some(label) = &parameter.label { 1981 + _ = fields.insert( 1982 + label.clone(), 1983 + RecordAccessor { 1984 + index: index as u64, 1985 + label: label.clone(), 1986 + type_: parameter.type_.clone(), 1987 + documentation: parameter.documentation.clone(), 1988 + }, 1989 + ); 1990 + } else { 1991 + positional_fields.push(parameter.type_.clone()); 1992 + } 1989 1993 } 1990 1994 variant_specific_accessors.push(fields); 1995 + positional_accessors.push(positional_fields); 1991 1996 } 1992 1997 1993 1998 Ok(Accessors { 1994 1999 shared_accessors, 1995 2000 variant_specific_accessors, 2001 + positional_accessors, 1996 2002 }) 1997 2003 } 1998 2004
+1 -1
compiler-core/src/ast.rs
··· 6 6 mod tests; 7 7 pub mod visit; 8 8 9 - pub use self::typed::{InvalidExpression, TypedExpr}; 9 + pub use self::typed::{InvalidExpression, RecordAccessKind, TypedExpr}; 10 10 pub use self::untyped::{FunctionLiteralKind, UntypedExpr}; 11 11 12 12 pub use self::constant::{Constant, TypedConstant, UntypedConstant};
+1
compiler-core/src/ast/tests.rs
··· 150 150 type_: cat_type, 151 151 shared_accessors: accessors.clone().into(), 152 152 variant_specific_accessors: vec![accessors.into()], 153 + variant_positional_accessors: vec![vec![]], 153 154 }, 154 155 ); 155 156 let mut problems = Problems::new();
+10
compiler-core/src/ast/typed.rs
··· 105 105 index: u64, 106 106 record: Box<Self>, 107 107 documentation: Option<EcoString>, 108 + kind: RecordAccessKind, 108 109 }, 109 110 110 111 ModuleSelect { ··· 1526 1527 name: EcoString, 1527 1528 }, 1528 1529 } 1530 + 1531 + #[derive(Debug, Clone, Copy, PartialEq, Eq)] 1532 + pub enum RecordAccessKind { 1533 + /// A regular record access using the `value.label` syntax. 1534 + Labelled, 1535 + /// Access of an unlabelled field, generated internally by the compiler, such 1536 + /// as in record updates. 1537 + Positional, 1538 + }
+1
compiler-core/src/ast/visit.rs
··· 1189 1189 index, 1190 1190 record, 1191 1191 documentation, 1192 + kind: _, 1192 1193 } => v.visit_typed_expr_record_access( 1193 1194 location, 1194 1195 field_start,
+34
compiler-core/src/erlang/tests/records.rs
··· 433 433 ", 434 434 ); 435 435 } 436 + 437 + #[test] 438 + fn record_update_with_unlabelled_fields() { 439 + assert_erl!( 440 + r#" 441 + pub type Wibble { 442 + Wibble(Int, Float, b: Bool, s: String) 443 + } 444 + 445 + pub fn main() { 446 + let record = Wibble(1, 3.14, True, "Hello") 447 + Wibble(..record, b: False) 448 + } 449 + "# 450 + ); 451 + } 452 + 453 + #[test] 454 + fn constant_record_update_with_unlabelled_fields() { 455 + assert_erl!( 456 + r#" 457 + pub type Wibble { 458 + Wibble(Int, Float, b: Bool, s: String) 459 + } 460 + 461 + pub const record = Wibble(1, 3.14, True, "Hello") 462 + pub const updated = Wibble(..record, b: False) 463 + 464 + pub fn main() { 465 + updated 466 + } 467 + "# 468 + ); 469 + }
+31
compiler-core/src/erlang/tests/snapshots/gleam_core__erlang__tests__records__constant_record_update_with_unlabelled_fields.snap
··· 1 + --- 2 + source: compiler-core/src/erlang/tests/records.rs 3 + expression: "\npub type Wibble {\n Wibble(Int, Float, b: Bool, s: String)\n}\n\npub const record = Wibble(1, 3.14, True, \"Hello\")\npub const updated = Wibble(..record, b: False)\n\npub fn main() {\n updated\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub type Wibble { 8 + Wibble(Int, Float, b: Bool, s: String) 9 + } 10 + 11 + pub const record = Wibble(1, 3.14, True, "Hello") 12 + pub const updated = Wibble(..record, b: False) 13 + 14 + pub fn main() { 15 + updated 16 + } 17 + 18 + 19 + ----- COMPILED ERLANG 20 + -module(my@mod). 21 + -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). 22 + -define(FILEPATH, "project/test/my/mod.gleam"). 23 + -export([main/0]). 24 + -export_type([wibble/0]). 25 + 26 + -type wibble() :: {wibble, integer(), float(), boolean(), binary()}. 27 + 28 + -file("project/test/my/mod.gleam", 9). 29 + -spec main() -> wibble(). 30 + main() -> 31 + {wibble, 1, 3.14, false, <<"Hello"/utf8>>}.
+34
compiler-core/src/erlang/tests/snapshots/gleam_core__erlang__tests__records__record_update_with_unlabelled_fields.snap
··· 1 + --- 2 + source: compiler-core/src/erlang/tests/records.rs 3 + expression: "\npub type Wibble {\n Wibble(Int, Float, b: Bool, s: String)\n}\n\npub fn main() {\n let record = Wibble(1, 3.14, True, \"Hello\")\n Wibble(..record, b: False)\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub type Wibble { 8 + Wibble(Int, Float, b: Bool, s: String) 9 + } 10 + 11 + pub fn main() { 12 + let record = Wibble(1, 3.14, True, "Hello") 13 + Wibble(..record, b: False) 14 + } 15 + 16 + 17 + ----- COMPILED ERLANG 18 + -module(my@mod). 19 + -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). 20 + -define(FILEPATH, "project/test/my/mod.gleam"). 21 + -export([main/0]). 22 + -export_type([wibble/0]). 23 + 24 + -type wibble() :: {wibble, integer(), float(), boolean(), binary()}. 25 + 26 + -file("project/test/my/mod.gleam", 6). 27 + -spec main() -> wibble(). 28 + main() -> 29 + Record = {wibble, 1, 3.14, true, <<"Hello"/utf8>>}, 30 + {wibble, 31 + erlang:element(2, Record), 32 + erlang:element(3, Record), 33 + false, 34 + erlang:element(5, Record)}.
+25 -5
compiler-core/src/error.rs
··· 10 10 use crate::type_::collapse_links; 11 11 use crate::type_::error::{ 12 12 IncorrectArityContext, InvalidImportKind, MissingAnnotation, ModuleValueUsageContext, Named, 13 - UnknownField, UnknownTypeHint, UnsafeRecordUpdateReason, 13 + RecordField, UnknownField, UnknownTypeHint, UnsafeRecordUpdateReason, 14 14 }; 15 15 use crate::type_::printer::{Names, Printer}; 16 16 use crate::type_::{FieldAccessUsage, error::PatternMatchKind}; ··· 808 808 }) 809 809 .min_by_key(|&(_, distance)| distance) 810 810 .map(|(option, _)| format!("Did you mean `{option}`?")) 811 + } 812 + 813 + fn to_ordinal(value: u32) -> String { 814 + match value % 10 { 815 + 1 => format!("{value}st"), 816 + 2 => format!("{value}nd"), 817 + 3 => format!("{value}rd"), 818 + _ => format!("{value}th"), 819 + } 811 820 } 812 821 813 822 impl Error { ··· 2403 2412 expected_field_type, 2404 2413 record_field_type, 2405 2414 record_variant, 2406 - field_name, 2415 + field, 2407 2416 .. 2408 2417 } => { 2409 2418 let mut printer = Printer::new(names); 2410 2419 let expected_field_type = printer.print_type(expected_field_type); 2411 2420 let record_field_type = printer.print_type(record_field_type); 2412 2421 let record_variant = printer.print_type(record_variant); 2413 - let text = wrap_format!( 2414 - "The `{field_name}` field \ 2422 + let text = match field { 2423 + RecordField::Labelled(label) => wrap_format!( 2424 + "The `{label}` field \ 2415 2425 of this value is a `{record_field_type}`, but the arguments given to the record \ 2416 2426 update indicate that it should be a `{expected_field_type}`. 2417 2427 2418 2428 Note: If the same type variable is used for multiple fields, all those fields \ 2419 2429 need to be updated at the same time if their type changes." 2420 - ); 2430 + ), 2431 + RecordField::Unlabelled(index) => wrap_format!( 2432 + "The {} field \ 2433 + of this value is a `{record_field_type}`, but the arguments given to the record \ 2434 + update indicate that it should be a `{expected_field_type}`. 2435 + 2436 + Note: Unlabelled fields cannot be updated in a record update, so either add \ 2437 + a label or use a record constructor.", 2438 + to_ordinal(*index + 1), 2439 + ), 2440 + }; 2421 2441 2422 2442 Diagnostic { 2423 2443 title: "Incomplete record update".into(),
+2
compiler-core/src/inline.rs
··· 619 619 index, 620 620 record, 621 621 documentation, 622 + kind, 622 623 } => TypedExpr::RecordAccess { 623 624 location, 624 625 field_start, ··· 627 628 index, 628 629 record: self.boxed_expression(record), 629 630 documentation, 631 + kind, 630 632 }, 631 633 632 634 TypedExpr::Tuple {
+21 -1
compiler-core/src/javascript/expression.rs
··· 322 322 arguments, body, .. 323 323 } => self.fn_(arguments, body), 324 324 325 - TypedExpr::RecordAccess { record, label, .. } => self.record_access(record, label), 325 + TypedExpr::RecordAccess { 326 + record, 327 + label, 328 + kind: RecordAccessKind::Labelled, 329 + .. 330 + } => self.record_access(record, label), 331 + 332 + TypedExpr::RecordAccess { 333 + record, 334 + index, 335 + kind: RecordAccessKind::Positional, 336 + .. 337 + } => self.positional_record_access(record, *index), 338 + 326 339 TypedExpr::RecordUpdate { 327 340 record_assignment, 328 341 constructor, ··· 1401 1414 self.not_in_tail_position(None, |this| { 1402 1415 let record = this.wrap_expression(record); 1403 1416 docvec![record, ".", maybe_escape_property(label)] 1417 + }) 1418 + } 1419 + 1420 + fn positional_record_access(&mut self, record: &'a TypedExpr, index: u64) -> Document<'a> { 1421 + self.not_in_tail_position(None, |this| { 1422 + let record = this.wrap_expression(record); 1423 + docvec![record, "[", index, "]"] 1404 1424 }) 1405 1425 } 1406 1426
+34
compiler-core/src/javascript/tests/records.rs
··· 131 131 ", 132 132 ); 133 133 } 134 + 135 + #[test] 136 + fn record_update_with_unlabelled_fields() { 137 + assert_js!( 138 + r#" 139 + pub type Wibble { 140 + Wibble(Int, Float, b: Bool, s: String) 141 + } 142 + 143 + pub fn main() { 144 + let record = Wibble(1, 3.14, True, "Hello") 145 + Wibble(..record, b: False) 146 + } 147 + "# 148 + ); 149 + } 150 + 151 + #[test] 152 + fn constant_record_update_with_unlabelled_fields() { 153 + assert_js!( 154 + r#" 155 + pub type Wibble { 156 + Wibble(Int, Float, b: Bool, s: String) 157 + } 158 + 159 + pub const record = Wibble(1, 3.14, True, "Hello") 160 + pub const updated = Wibble(..record, b: False) 161 + 162 + pub fn main() { 163 + updated 164 + } 165 + "# 166 + ); 167 + }
+46
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__records__constant_record_update_with_unlabelled_fields.snap
··· 1 + --- 2 + source: compiler-core/src/javascript/tests/records.rs 3 + expression: "\npub type Wibble {\n Wibble(Int, Float, b: Bool, s: String)\n}\n\npub const record = Wibble(1, 3.14, True, \"Hello\")\npub const updated = Wibble(..record, b: False)\n\npub fn main() {\n updated\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub type Wibble { 8 + Wibble(Int, Float, b: Bool, s: String) 9 + } 10 + 11 + pub const record = Wibble(1, 3.14, True, "Hello") 12 + pub const updated = Wibble(..record, b: False) 13 + 14 + pub fn main() { 15 + updated 16 + } 17 + 18 + 19 + ----- COMPILED JAVASCRIPT 20 + import { CustomType as $CustomType } from "../gleam.mjs"; 21 + 22 + export class Wibble extends $CustomType { 23 + constructor($0, $1, b, s) { 24 + super(); 25 + this[0] = $0; 26 + this[1] = $1; 27 + this.b = b; 28 + this.s = s; 29 + } 30 + } 31 + export const Wibble$Wibble = ($0, $1, b, s) => new Wibble($0, $1, b, s); 32 + export const Wibble$isWibble = (value) => value instanceof Wibble; 33 + export const Wibble$Wibble$0 = (value) => value[0]; 34 + export const Wibble$Wibble$1 = (value) => value[1]; 35 + export const Wibble$Wibble$b = (value) => value.b; 36 + export const Wibble$Wibble$2 = (value) => value.b; 37 + export const Wibble$Wibble$s = (value) => value.s; 38 + export const Wibble$Wibble$3 = (value) => value.s; 39 + 40 + export const record = /* @__PURE__ */ new Wibble(1, 3.14, true, "Hello"); 41 + 42 + export const updated = /* @__PURE__ */ new Wibble(1, 3.14, false, "Hello"); 43 + 44 + export function main() { 45 + return updated; 46 + }
+41
compiler-core/src/javascript/tests/snapshots/gleam_core__javascript__tests__records__record_update_with_unlabelled_fields.snap
··· 1 + --- 2 + source: compiler-core/src/javascript/tests/records.rs 3 + expression: "\npub type Wibble {\n Wibble(Int, Float, b: Bool, s: String)\n}\n\npub fn main() {\n let record = Wibble(1, 3.14, True, \"Hello\")\n Wibble(..record, b: False)\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub type Wibble { 8 + Wibble(Int, Float, b: Bool, s: String) 9 + } 10 + 11 + pub fn main() { 12 + let record = Wibble(1, 3.14, True, "Hello") 13 + Wibble(..record, b: False) 14 + } 15 + 16 + 17 + ----- COMPILED JAVASCRIPT 18 + import { CustomType as $CustomType } from "../gleam.mjs"; 19 + 20 + export class Wibble extends $CustomType { 21 + constructor($0, $1, b, s) { 22 + super(); 23 + this[0] = $0; 24 + this[1] = $1; 25 + this.b = b; 26 + this.s = s; 27 + } 28 + } 29 + export const Wibble$Wibble = ($0, $1, b, s) => new Wibble($0, $1, b, s); 30 + export const Wibble$isWibble = (value) => value instanceof Wibble; 31 + export const Wibble$Wibble$0 = (value) => value[0]; 32 + export const Wibble$Wibble$1 = (value) => value[1]; 33 + export const Wibble$Wibble$b = (value) => value.b; 34 + export const Wibble$Wibble$2 = (value) => value.b; 35 + export const Wibble$Wibble$s = (value) => value.s; 36 + export const Wibble$Wibble$3 = (value) => value.s; 37 + 38 + export function main() { 39 + let record = new Wibble(1, 3.14, true, "Hello"); 40 + return new Wibble(record[0], record[1], false, record.s); 41 + }
+12
compiler-core/src/metadata/module_decoder.rs
··· 686 686 self, 687 687 variant_specific_accessors 688 688 ), 689 + variant_positional_accessors: read_vec!( 690 + &reader.get_positional_accessors()?, 691 + self, 692 + positional_accessors 693 + ), 689 694 }) 690 695 } 691 696 ··· 698 703 self, 699 704 record_accessor 700 705 )) 706 + } 707 + 708 + fn positional_accessors( 709 + &mut self, 710 + reader: &positional_accessors::Reader<'_>, 711 + ) -> Result<Vec<Arc<Type>>> { 712 + Ok(read_vec!(&reader.get_accessors()?, self, type_)) 701 713 } 702 714 703 715 fn record_accessor(&mut self, reader: &record_accessor::Reader<'_>) -> Result<RecordAccessor> {
+21 -3
compiler-core/src/metadata/module_encoder.rs
··· 115 115 self.build_record_accessor(property.init_value(), accessor) 116 116 } 117 117 118 - let mut builder = builder 118 + let mut variant_accessors = builder 119 + .reborrow() 119 120 .init_variant_specific_accessors(accessors.variant_specific_accessors.len() as u32); 120 121 for (i, map) in accessors.variant_specific_accessors.iter().enumerate() { 121 - self.build_constructor_accessors(builder.reborrow().get(i as u32), map); 122 + self.build_variant_accessors(variant_accessors.reborrow().get(i as u32), map); 123 + } 124 + 125 + let mut positional_accessors = 126 + builder.init_positional_accessors(accessors.variant_positional_accessors.len() as u32); 127 + for (i, fields) in accessors.variant_positional_accessors.iter().enumerate() { 128 + self.build_positional_accessors(positional_accessors.reborrow().get(i as u32), fields); 122 129 } 123 130 } 124 131 125 - fn build_constructor_accessors( 132 + fn build_variant_accessors( 126 133 &mut self, 127 134 builder: variant_specific_accessors::Builder<'_>, 128 135 accessors: &HashMap<EcoString, RecordAccessor>, ··· 132 139 let mut property = builder.reborrow().get(i as u32); 133 140 property.set_key(name); 134 141 self.build_record_accessor(property.init_value(), accessor) 142 + } 143 + } 144 + 145 + fn build_positional_accessors( 146 + &mut self, 147 + builder: positional_accessors::Builder<'_>, 148 + accessors: &[Arc<Type>], 149 + ) { 150 + let mut builder = builder.init_accessors(accessors.len() as u32); 151 + for (i, type_) in accessors.iter().enumerate() { 152 + self.build_type(builder.reborrow().get(i as u32), type_); 135 153 } 136 154 } 137 155
+4
compiler-core/src/metadata/tests.rs
··· 939 939 type_: type_::int(), 940 940 shared_accessors: accessors1.clone().into(), 941 941 variant_specific_accessors: vec![accessors1.into()], 942 + variant_positional_accessors: vec![vec![type_::int(), type_::float()]], 942 943 }, 943 944 ), 944 945 ( ··· 948 949 type_: type_::int(), 949 950 shared_accessors: accessors2.clone().into(), 950 951 variant_specific_accessors: vec![accessors2.into()], 952 + variant_positional_accessors: vec![vec![]], 951 953 }, 952 954 ), 953 955 ] ··· 1017 1019 type_: type_::int(), 1018 1020 shared_accessors: accessors1.clone().into(), 1019 1021 variant_specific_accessors: vec![accessors1.into()], 1022 + variant_positional_accessors: vec![vec![type_::int(), type_::float()]], 1020 1023 }, 1021 1024 ), 1022 1025 ( ··· 1026 1029 type_: type_::int(), 1027 1030 shared_accessors: accessors2.clone().into(), 1028 1031 variant_specific_accessors: vec![accessors2.into()], 1032 + variant_positional_accessors: vec![vec![]], 1029 1033 }, 1030 1034 ), 1031 1035 ]
+6
compiler-core/src/type_.rs
··· 664 664 pub type_: Arc<Type>, 665 665 pub shared_accessors: HashMap<EcoString, RecordAccessor>, 666 666 pub variant_specific_accessors: Vec<HashMap<EcoString, RecordAccessor>>, 667 + pub variant_positional_accessors: Vec<Vec<Arc<Type>>>, 667 668 } 668 669 669 670 impl AccessorsMap { ··· 674 675 inferred_variant 675 676 .and_then(|index| self.variant_specific_accessors.get(index as usize)) 676 677 .unwrap_or(&self.shared_accessors) 678 + } 679 + 680 + pub fn positional_accessors(&self, inferred_variant: u16) -> Option<&Vec<Arc<Type>>> { 681 + self.variant_positional_accessors 682 + .get(inferred_variant as usize) 677 683 } 678 684 } 679 685
+7 -1
compiler-core/src/type_/error.rs
··· 1477 1477 record_variant: Arc<Type>, 1478 1478 expected_field_type: Arc<Type>, 1479 1479 record_field_type: Arc<Type>, 1480 - field_name: EcoString, 1480 + field: RecordField, 1481 1481 }, 1482 + } 1483 + 1484 + #[derive(Debug, Eq, PartialEq, Clone)] 1485 + pub enum RecordField { 1486 + Labelled(EcoString), 1487 + Unlabelled(u32), 1482 1488 } 1483 1489 1484 1490 #[derive(Clone, Debug, PartialEq, Eq)]
+118 -23
compiler-core/src/type_/expression.rs
··· 5 5 ast::{ 6 6 Arg, Assert, Assignment, AssignmentKind, BinOp, BitArrayOption, BitArraySegment, 7 7 CAPTURE_VARIABLE, CallArg, Clause, ClauseGuard, Constant, FunctionLiteralKind, HasLocation, 8 - ImplicitCallArgOrigin, InvalidExpression, Layer, RECORD_UPDATE_VARIABLE, 8 + ImplicitCallArgOrigin, InvalidExpression, Layer, RECORD_UPDATE_VARIABLE, RecordAccessKind, 9 9 RecordBeingUpdated, SrcSpan, Statement, TodoKind, TypeAst, TypedArg, TypedAssert, 10 10 TypedAssignment, TypedClause, TypedClauseGuard, TypedConstant, TypedExpr, 11 11 TypedMultiPattern, TypedStatement, USE_ASSIGNMENT_VARIABLE, UntypedArg, UntypedAssert, ··· 1476 1476 index: u64::MAX, 1477 1477 record: Box::new(record), 1478 1478 documentation: None, 1479 + kind: RecordAccessKind::Labelled, 1479 1480 }, 1480 1481 Err(_) => TypedExpr::Invalid { 1481 1482 location, ··· 3075 3076 location, 3076 3077 type_, 3077 3078 documentation, 3079 + kind: RecordAccessKind::Labelled, 3078 3080 }) 3079 3081 } 3080 3082 ··· 3262 3264 3263 3265 Ok(TypedExpr::RecordUpdate { 3264 3266 location, 3265 - type_: variant.retn, 3267 + type_: variant.return_type, 3266 3268 record_assignment, 3267 3269 constructor: Box::new(typed_constructor), 3268 3270 arguments, ··· 3278 3280 ) -> Result<Vec<TypedCallArg>, Error> { 3279 3281 let record_location = record.location(); 3280 3282 let record_type = record.type_(); 3281 - let return_type = variant.retn.clone(); 3283 + let return_type = variant.return_type.clone(); 3282 3284 3283 3285 // We clone the fields to remove all explicitly mentioned fields in the record update. 3284 - let mut fields = variant.fields.clone(); 3286 + let mut fields = variant.field_map.fields.clone(); 3285 3287 3286 3288 // collect explicit arguments given in the record update 3287 3289 let explicit_arguments = arguments ··· 3335 3337 .collect::<Result<Vec<_>, _>>()?; 3336 3338 3337 3339 // Generate the remaining copied arguments, making sure they unify with our return type. 3338 - let convert_incompatible_fields_error = |e: UnifyError, label: EcoString| match e { 3340 + let convert_incompatible_fields_error = |e: UnifyError, field: RecordField| match e { 3339 3341 UnifyError::CouldNotUnify { 3340 3342 expected, given, .. 3341 3343 } => Error::UnsafeRecordUpdate { ··· 3345 3347 record_variant: record_type.clone(), 3346 3348 expected_field_type: expected, 3347 3349 record_field_type: given, 3348 - field_name: label, 3350 + field, 3349 3351 }, 3350 3352 }, 3351 3353 _ => convert_unify_error(e, record_location), 3352 3354 }; 3353 3355 3354 - let implicit_arguments = fields 3355 - .into_iter() 3356 - .map(|(label, index)| { 3356 + let indices_to_labels = variant.field_map.indices_to_labels(); 3357 + let mut implicit_arguments = Vec::new(); 3358 + 3359 + for index in 0..variant.field_map.arity { 3360 + if let Some(&label) = indices_to_labels.get(&index) { 3361 + if !fields.contains_key(label) { 3362 + continue; 3363 + } 3364 + 3357 3365 let record_access = self.infer_known_record_expression_access( 3358 3366 record.clone(), 3359 3367 label.clone(), ··· 3363 3371 FieldAccessUsage::RecordUpdate, 3364 3372 )?; 3365 3373 3366 - unify(variant.arg_type(index), record_access.type_()) 3367 - .map_err(|e| convert_incompatible_fields_error(e, label.clone()))?; 3374 + unify(variant.arg_type(index), record_access.type_()).map_err(|e| { 3375 + convert_incompatible_fields_error(e, RecordField::Labelled(label.clone())) 3376 + })?; 3377 + 3378 + implicit_arguments.push(( 3379 + index, 3380 + CallArg { 3381 + location: record_location, 3382 + label: Some(label.clone()), 3383 + value: record_access, 3384 + implicit: Some(ImplicitCallArgOrigin::RecordUpdate), 3385 + }, 3386 + )) 3387 + } else { 3388 + let (accessor_type, positional_fields) = 3389 + match collapse_links(record.type_()).as_ref() { 3390 + // A type in the current module 3391 + Type::Named { 3392 + module, 3393 + name, 3394 + inferred_variant, 3395 + .. 3396 + } if module == &self.environment.current_module => { 3397 + self.environment 3398 + .accessors 3399 + .get(name) 3400 + .and_then(|accessors_map| { 3401 + Some(( 3402 + accessors_map.type_.clone(), 3403 + // For record updates we must know the variant of the record, so if the 3404 + // variant has not been inferred, that means there must only be one. 3405 + accessors_map 3406 + .positional_accessors(inferred_variant.unwrap_or(0))?, 3407 + )) 3408 + }) 3409 + } 3410 + 3411 + // A type in another module 3412 + Type::Named { 3413 + module, 3414 + name, 3415 + inferred_variant, 3416 + .. 3417 + } => self 3418 + .environment 3419 + .importable_modules 3420 + .get(module) 3421 + .and_then(|module| module.accessors.get(name)) 3422 + .filter(|a| { 3423 + a.publicity.is_importable() 3424 + || module == &self.environment.current_module 3425 + }) 3426 + .and_then(|accessors_map| { 3427 + Some(( 3428 + accessors_map.type_.clone(), 3429 + accessors_map 3430 + .positional_accessors(inferred_variant.unwrap_or(0))?, 3431 + )) 3432 + }), 3433 + 3434 + _ => panic!("Type has already checked to be valid"), 3435 + } 3436 + .expect("Variant has already checked to be valid"); 3368 3437 3369 - Ok(( 3438 + let type_ = positional_fields 3439 + .get(index as usize) 3440 + .expect("Field exists") 3441 + .clone(); 3442 + let mut type_vars = im::HashMap::new(); 3443 + let accessor_type = self.instantiate(accessor_type, &mut type_vars); 3444 + let type_ = self.instantiate(type_, &mut type_vars); 3445 + unify(accessor_type, record_type.clone()).map_err(|e| { 3446 + convert_incompatible_fields_error(e, RecordField::Unlabelled(index)) 3447 + })?; 3448 + 3449 + let record_access = TypedExpr::RecordAccess { 3450 + record: Box::new(record.clone()), 3451 + label: "".into(), 3452 + field_start: record_location.start, 3453 + index: index as u64, 3454 + location: record_location, 3455 + type_: type_.clone(), 3456 + documentation: None, 3457 + kind: RecordAccessKind::Positional, 3458 + }; 3459 + 3460 + unify(variant.arg_type(index), type_.clone()).map_err(|e| { 3461 + convert_incompatible_fields_error(e, RecordField::Unlabelled(index)) 3462 + })?; 3463 + 3464 + implicit_arguments.push(( 3370 3465 index, 3371 3466 CallArg { 3372 3467 location: record_location, 3373 - label: Some(label), 3468 + label: None, 3374 3469 value: record_access, 3375 3470 implicit: Some(ImplicitCallArgOrigin::RecordUpdate), 3376 3471 }, 3377 3472 )) 3378 - }) 3379 - .collect::<Result<Vec<_>, _>>()?; 3473 + } 3474 + } 3380 3475 3381 3476 if explicit_arguments.is_empty() { 3382 3477 self.problems ··· 3458 3553 if variants_count == 1 { 3459 3554 return Ok(RecordUpdateVariant { 3460 3555 arguments: arguments_types, 3461 - retn: return_type, 3462 - fields: &field_map.fields, 3556 + return_type, 3557 + field_map, 3463 3558 }); 3464 3559 } 3465 3560 ··· 3469 3564 self.track_feature_usage(FeatureKind::RecordUpdateVariantInference, record.location()); 3470 3565 return Ok(RecordUpdateVariant { 3471 3566 arguments: arguments_types, 3472 - retn: return_type, 3473 - fields: &field_map.fields, 3567 + return_type, 3568 + field_map, 3474 3569 }); 3475 3570 } 3476 3571 ··· 5529 5624 #[derive(Debug)] 5530 5625 struct RecordUpdateVariant<'a> { 5531 5626 arguments: Vec<Arc<Type>>, 5532 - retn: Arc<Type>, 5533 - fields: &'a HashMap<EcoString, u32>, 5627 + return_type: Arc<Type>, 5628 + field_map: &'a FieldMap, 5534 5629 } 5535 5630 5536 5631 impl RecordUpdateVariant<'_> { ··· 5542 5637 } 5543 5638 5544 5639 fn has_field(&self, str: &EcoString) -> bool { 5545 - self.fields.contains_key(str) 5640 + self.field_map.fields.contains_key(str) 5546 5641 } 5547 5642 5548 5643 fn field_names(&self) -> Vec<EcoString> { 5549 - self.fields.keys().cloned().collect() 5644 + self.field_map.fields.keys().cloned().collect() 5550 5645 } 5551 5646 } 5552 5647
+2
compiler-core/src/type_/fields.rs
··· 9 9 10 10 #[derive(Debug, Clone, PartialEq, Eq)] 11 11 pub struct FieldMap { 12 + /// Number of accepted arguments, including unlabelled fields. 12 13 pub arity: u32, 14 + /// Map of labels to argument indices 13 15 pub fields: HashMap<EcoString, u32>, 14 16 } 15 17
+16
compiler-core/src/type_/tests/errors.rs
··· 3383 3383 "# 3384 3384 ); 3385 3385 } 3386 + 3387 + #[test] 3388 + fn generic_unlabelled_field_in_updated_record_wrong_type() { 3389 + assert_module_error!( 3390 + " 3391 + pub type Wibble(a) { 3392 + Wibble(a, b: Int, c: a) 3393 + } 3394 + 3395 + pub fn main() { 3396 + let w = Wibble(1, 2, 3) 3397 + Wibble(..w, c: False) 3398 + } 3399 + " 3400 + ); 3401 + }
+28
compiler-core/src/type_/tests/snapshots/gleam_core__type___tests__errors__generic_unlabelled_field_in_updated_record_wrong_type.snap
··· 1 + --- 2 + source: compiler-core/src/type_/tests/errors.rs 3 + expression: "\npub type Wibble(a) {\n Wibble(a, b: Int, c: a)\n}\n\npub fn main() {\n let w = Wibble(1, 2, 3)\n Wibble(..w, c: False)\n}\n" 4 + --- 5 + ----- SOURCE CODE 6 + 7 + pub type Wibble(a) { 8 + Wibble(a, b: Int, c: a) 9 + } 10 + 11 + pub fn main() { 12 + let w = Wibble(1, 2, 3) 13 + Wibble(..w, c: False) 14 + } 15 + 16 + 17 + ----- ERROR 18 + error: Incomplete record update 19 + ┌─ /src/one/two.gleam:8:12 20 + 21 + 8 │ Wibble(..w, c: False) 22 + │ ^ This is a `Wibble(Int)` 23 + 24 + The 1st field of this value is a `Int`, but the arguments given to the 25 + record update indicate that it should be a `Bool`. 26 + 27 + Note: Unlabelled fields cannot be updated in a record update, so either add 28 + a label or use a record constructor.
+11
test/language/test/language_test.gleam
··· 1942 1942 Person(name: String, age: Int, country: String) 1943 1943 } 1944 1944 1945 + type MixedRecord { 1946 + MixedRecord(Int, Float, labelled_1: Int, labelled_2: String) 1947 + } 1948 + 1945 1949 fn record_update_tests() { 1946 1950 [ 1947 1951 "unqualified record update" ··· 1967 1971 |> id, 1968 1972 ) 1969 1973 assert_equal(record_update.Box("a", 6), updated) 1974 + }), 1975 + "unlabelled field in record update" 1976 + |> example(fn() { 1977 + let record = 1978 + MixedRecord(1, 3.14, labelled_1: 3982, labelled_2: "Something") 1979 + let updated = MixedRecord(..record, labelled_1: 12) 1980 + assert_equal(MixedRecord(1, 3.14, 12, "Something"), updated) 1970 1981 }), 1971 1982 ] 1972 1983 }