@@ -94,28 +94,110 @@ module 0x1::string_utils {
9494 }
9595}
9696module 0x42::M {
97- fun foo1<T: drop>(left: T, right: T) {
97+ fun foo1<T: copy + drop>(left: T, right: T) {
9898 let (_left,_right) = (left, right);
9999 if (_left == _right) () else abort 0x1::string::into_bytes(0x1::string_utils::format2<T,T>(&vector[97u8, 115u8, 115u8, 101u8, 114u8, 116u8, 105u8, 111u8, 110u8, 32u8, 96u8, 108u8, 101u8, 102u8, 116u8, 32u8, 61u8, 61u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 96u8, 32u8, 102u8, 97u8, 105u8, 108u8, 101u8, 100u8, 10u8, 32u8, 32u8, 108u8, 101u8, 102u8, 116u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 58u8, 32u8, 123u8, 125u8], _left, _right))
100100 }
101- fun foo2<T: drop>(left: T, right: T, message: vector<u8>) {
101+ fun foo2<T: copy + drop>(left: T, right: T, message: vector<u8>) {
102102 let (_left,_right) = (left, right);
103103 if (_left == _right) () else abort 0x1::string::into_bytes(0x1::string_utils::format3<0x1::string::String,T,T>(&vector[97u8, 115u8, 115u8, 101u8, 114u8, 116u8, 105u8, 111u8, 110u8, 32u8, 96u8, 108u8, 101u8, 102u8, 116u8, 32u8, 61u8, 61u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 96u8, 32u8, 102u8, 97u8, 105u8, 108u8, 101u8, 100u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 32u8, 108u8, 101u8, 102u8, 116u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 58u8, 32u8, 123u8, 125u8], 0x1::string::utf8(message), _left, _right))
104104 }
105- fun foo3<T: drop, T0: drop>(left: T, right: T, a: T0) {
105+ fun foo3<T: copy + drop, T0: drop>(left: T, right: T, a: T0) {
106106 let (_left,_right) = (left, right);
107107 if (_left == _right) () else abort 0x1::string::into_bytes(0x1::string_utils::format3<0x1::string::String,T,T>(&vector[97u8, 115u8, 115u8, 101u8, 114u8, 116u8, 105u8, 111u8, 110u8, 32u8, 96u8, 108u8, 101u8, 102u8, 116u8, 32u8, 61u8, 61u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 96u8, 32u8, 102u8, 97u8, 105u8, 108u8, 101u8, 100u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 32u8, 108u8, 101u8, 102u8, 116u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 58u8, 32u8, 123u8, 125u8], 0x1::string_utils::format1<T0>(&vector[97u8, 32u8, 61u8, 32u8, 123u8, 125u8], a), _left, _right))
108108 }
109- fun foo4<T: drop, T0: drop, T1: drop>(left: T, right: T, a: T0, b: T1) {
109+ fun foo4<T: copy + drop, T0: drop, T1: drop>(left: T, right: T, a: T0, b: T1) {
110110 let (_left,_right) = (left, right);
111111 if (_left == _right) () else abort 0x1::string::into_bytes(0x1::string_utils::format3<0x1::string::String,T,T>(&vector[97u8, 115u8, 115u8, 101u8, 114u8, 116u8, 105u8, 111u8, 110u8, 32u8, 96u8, 108u8, 101u8, 102u8, 116u8, 32u8, 61u8, 61u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 96u8, 32u8, 102u8, 97u8, 105u8, 108u8, 101u8, 100u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 32u8, 108u8, 101u8, 102u8, 116u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 58u8, 32u8, 123u8, 125u8], 0x1::string_utils::format2<T0,T1>(&vector[97u8, 32u8, 61u8, 32u8, 123u8, 125u8, 44u8, 32u8, 98u8, 32u8, 61u8, 32u8, 123u8, 125u8], a, b), _left, _right))
112112 }
113- fun foo5<T: drop, T0: drop, T1: drop, T2: drop>(left: T, right: T, a: T0, b: T1, c: T2) {
113+ fun foo5<T: copy + drop, T0: drop, T1: drop, T2: drop>(left: T, right: T, a: T0, b: T1, c: T2) {
114114 let (_left,_right) = (left, right);
115115 if (_left == _right) () else abort 0x1::string::into_bytes(0x1::string_utils::format3<0x1::string::String,T,T>(&vector[97u8, 115u8, 115u8, 101u8, 114u8, 116u8, 105u8, 111u8, 110u8, 32u8, 96u8, 108u8, 101u8, 102u8, 116u8, 32u8, 61u8, 61u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 96u8, 32u8, 102u8, 97u8, 105u8, 108u8, 101u8, 100u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 32u8, 108u8, 101u8, 102u8, 116u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 58u8, 32u8, 123u8, 125u8], 0x1::string_utils::format3<T0,T1,T2>(&vector[97u8, 32u8, 61u8, 32u8, 123u8, 125u8, 44u8, 32u8, 98u8, 32u8, 61u8, 32u8, 123u8, 125u8, 44u8, 32u8, 99u8, 32u8, 61u8, 32u8, 123u8, 125u8], a, b, c), _left, _right))
116116 }
117- fun foo6<T: drop, T0: drop, T1: drop, T2: drop, T3: drop>(left: T, right: T, a: T0, b: T1, c: T2, d: T3) {
117+ fun foo6<T: copy + drop, T0: drop, T1: drop, T2: drop, T3: drop>(left: T, right: T, a: T0, b: T1, c: T2, d: T3) {
118118 let (_left,_right) = (left, right);
119119 if (_left == _right) () else abort 0x1::string::into_bytes(0x1::string_utils::format3<0x1::string::String,T,T>(&vector[97u8, 115u8, 115u8, 101u8, 114u8, 116u8, 105u8, 111u8, 110u8, 32u8, 96u8, 108u8, 101u8, 102u8, 116u8, 32u8, 61u8, 61u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 96u8, 32u8, 102u8, 97u8, 105u8, 108u8, 101u8, 100u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 32u8, 108u8, 101u8, 102u8, 116u8, 58u8, 32u8, 123u8, 125u8, 10u8, 32u8, 114u8, 105u8, 103u8, 104u8, 116u8, 58u8, 32u8, 123u8, 125u8], 0x1::string_utils::format4<T0,T1,T2,T3>(&vector[97u8, 32u8, 61u8, 32u8, 123u8, 125u8, 44u8, 32u8, 98u8, 32u8, 61u8, 32u8, 123u8, 125u8, 44u8, 32u8, 99u8, 32u8, 61u8, 32u8, 123u8, 125u8, 44u8, 32u8, 100u8, 32u8, 61u8, 32u8, 123u8, 125u8], a, b, c, d), _left, _right))
120120 }
121121}
122+
123+ // -- Model dump before second bytecode pipeline
124+ module 0x1::string_utils {
125+ use std::string::{String};
126+ public fun format1<T0>(_fmt: &vector<u8>,_a: T0): string::String {
127+ Abort(0)
128+ }
129+ public fun format2<T0,T1>(_fmt: &vector<u8>,_a: T0,_b: T1): string::String {
130+ Abort(0)
131+ }
132+ public fun format3<T0,T1,T2>(_fmt: &vector<u8>,_a: T0,_b: T1,_c: T2): string::String {
133+ Abort(0)
134+ }
135+ public fun format4<T0,T1,T2,T3>(_fmt: &vector<u8>,_a: T0,_b: T1,_c: T2,_d: T3): string::String {
136+ Abort(0)
137+ }
138+ } // end 0x1::string_utils
139+ module 0x42::M {
140+ private fun foo1<T>(left: T,right: T) {
141+ {
142+ let ($left: T, $right: T): (T, T) = Tuple(left, right);
143+ if Eq<T>($left, $right) {
144+ Tuple()
145+ } else {
146+ Abort(14566554180833181696, string::into_bytes(string_utils::format2<T, T>(Borrow(Immutable)([97, 115, 115, 101, 114, 116, 105, 111, 110, 32, 96, 108, 101, 102, 116, 32, 61, 61, 32, 114, 105, 103, 104, 116, 96, 32, 102, 97, 105, 108, 101, 100, 10, 32, 32, 108, 101, 102, 116, 58, 32, 123, 125, 10, 32, 114, 105, 103, 104, 116, 58, 32, 123, 125]), $left, $right)))
147+ }
148+ }
149+ }
150+ private fun foo2<T>(left: T,right: T,message: vector<u8>) {
151+ {
152+ let ($left: T, $right: T): (T, T) = Tuple(left, right);
153+ if Eq<T>($left, $right) {
154+ Tuple()
155+ } else {
156+ Abort(14566554180833181696, string::into_bytes(string_utils::format3<0x1::string::String, T, T>(Borrow(Immutable)([97, 115, 115, 101, 114, 116, 105, 111, 110, 32, 96, 108, 101, 102, 116, 32, 61, 61, 32, 114, 105, 103, 104, 116, 96, 32, 102, 97, 105, 108, 101, 100, 58, 32, 123, 125, 10, 32, 32, 108, 101, 102, 116, 58, 32, 123, 125, 10, 32, 114, 105, 103, 104, 116, 58, 32, 123, 125]), string::utf8(message), $left, $right)))
157+ }
158+ }
159+ }
160+ private fun foo3<T,T0>(left: T,right: T,a: T0) {
161+ {
162+ let ($left: T, $right: T): (T, T) = Tuple(left, right);
163+ if Eq<T>($left, $right) {
164+ Tuple()
165+ } else {
166+ Abort(14566554180833181696, string::into_bytes(string_utils::format3<0x1::string::String, T, T>(Borrow(Immutable)([97, 115, 115, 101, 114, 116, 105, 111, 110, 32, 96, 108, 101, 102, 116, 32, 61, 61, 32, 114, 105, 103, 104, 116, 96, 32, 102, 97, 105, 108, 101, 100, 58, 32, 123, 125, 10, 32, 32, 108, 101, 102, 116, 58, 32, 123, 125, 10, 32, 114, 105, 103, 104, 116, 58, 32, 123, 125]), string_utils::format1<T0>(Borrow(Immutable)([97, 32, 61, 32, 123, 125]), a), $left, $right)))
167+ }
168+ }
169+ }
170+ private fun foo4<T,T0,T1>(left: T,right: T,a: T0,b: T1) {
171+ {
172+ let ($left: T, $right: T): (T, T) = Tuple(left, right);
173+ if Eq<T>($left, $right) {
174+ Tuple()
175+ } else {
176+ Abort(14566554180833181696, string::into_bytes(string_utils::format3<0x1::string::String, T, T>(Borrow(Immutable)([97, 115, 115, 101, 114, 116, 105, 111, 110, 32, 96, 108, 101, 102, 116, 32, 61, 61, 32, 114, 105, 103, 104, 116, 96, 32, 102, 97, 105, 108, 101, 100, 58, 32, 123, 125, 10, 32, 32, 108, 101, 102, 116, 58, 32, 123, 125, 10, 32, 114, 105, 103, 104, 116, 58, 32, 123, 125]), string_utils::format2<T0, T1>(Borrow(Immutable)([97, 32, 61, 32, 123, 125, 44, 32, 98, 32, 61, 32, 123, 125]), a, b), $left, $right)))
177+ }
178+ }
179+ }
180+ private fun foo5<T,T0,T1,T2>(left: T,right: T,a: T0,b: T1,c: T2) {
181+ {
182+ let ($left: T, $right: T): (T, T) = Tuple(left, right);
183+ if Eq<T>($left, $right) {
184+ Tuple()
185+ } else {
186+ Abort(14566554180833181696, string::into_bytes(string_utils::format3<0x1::string::String, T, T>(Borrow(Immutable)([97, 115, 115, 101, 114, 116, 105, 111, 110, 32, 96, 108, 101, 102, 116, 32, 61, 61, 32, 114, 105, 103, 104, 116, 96, 32, 102, 97, 105, 108, 101, 100, 58, 32, 123, 125, 10, 32, 32, 108, 101, 102, 116, 58, 32, 123, 125, 10, 32, 114, 105, 103, 104, 116, 58, 32, 123, 125]), string_utils::format3<T0, T1, T2>(Borrow(Immutable)([97, 32, 61, 32, 123, 125, 44, 32, 98, 32, 61, 32, 123, 125, 44, 32, 99, 32, 61, 32, 123, 125]), a, b, c), $left, $right)))
187+ }
188+ }
189+ }
190+ private fun foo6<T,T0,T1,T2,T3>(left: T,right: T,a: T0,b: T1,c: T2,d: T3) {
191+ {
192+ let ($left: T, $right: T): (T, T) = Tuple(left, right);
193+ if Eq<T>($left, $right) {
194+ Tuple()
195+ } else {
196+ Abort(14566554180833181696, string::into_bytes(string_utils::format3<0x1::string::String, T, T>(Borrow(Immutable)([97, 115, 115, 101, 114, 116, 105, 111, 110, 32, 96, 108, 101, 102, 116, 32, 61, 61, 32, 114, 105, 103, 104, 116, 96, 32, 102, 97, 105, 108, 101, 100, 58, 32, 123, 125, 10, 32, 32, 108, 101, 102, 116, 58, 32, 123, 125, 10, 32, 114, 105, 103, 104, 116, 58, 32, 123, 125]), string_utils::format4<T0, T1, T2, T3>(Borrow(Immutable)([97, 32, 61, 32, 123, 125, 44, 32, 98, 32, 61, 32, 123, 125, 44, 32, 99, 32, 61, 32, 123, 125, 44, 32, 100, 32, 61, 32, 123, 125]), a, b, c, d), $left, $right)))
197+ }
198+ }
199+ }
200+ } // end 0x42::M
201+
202+
203+ ============ bytecode verification succeeded ========
0 commit comments