@@ -167,6 +167,10 @@ impl Generator for RustWasm {
167
167
) ) ;
168
168
}
169
169
170
+ self . src . push_str ( "#[allow(unused_imports)]" ) ;
171
+ self . src
172
+ . push_str ( "use wit_bindgen_guest_rust::{alloc, vec::Vec, string::String};" ) ;
173
+
170
174
self . sizes . fill ( iface) ;
171
175
}
172
176
@@ -510,9 +514,7 @@ impl Generator for RustWasm {
510
514
} = f;
511
515
512
516
if needs_cleanup_list {
513
- self . src . push_str ( "extern crate alloc;\n " ) ;
514
- self . src
515
- . push_str ( "let mut cleanup_list = alloc::vec::Vec::new();\n " ) ;
517
+ self . src . push_str ( "let mut cleanup_list = Vec::new();\n " ) ;
516
518
}
517
519
self . src . push_str ( & String :: from ( src) ) ;
518
520
@@ -760,15 +762,14 @@ impl FunctionBindgen<'_> {
760
762
fn emit_cleanup ( & mut self ) {
761
763
for ( ptr, layout) in mem:: take ( & mut self . cleanup ) {
762
764
self . push_str ( & format ! (
763
- "if {layout}.size() != 0 {{\n extern crate alloc; \ n alloc::alloc ::dealloc({ptr}, {layout});\n }}\n "
765
+ "if {layout}.size() != 0 {{\n alloc::dealloc({ptr}, {layout});\n }}\n "
764
766
) ) ;
765
767
}
766
768
if self . needs_cleanup_list {
767
769
self . push_str (
768
770
"for (ptr, layout) in cleanup_list {\n
769
771
if layout.size() != 0 {\n
770
- extern crate alloc;\n
771
- alloc::alloc::dealloc(ptr, layout);\n
772
+ alloc::dealloc(ptr, layout);\n
772
773
}\n
773
774
}\n " ,
774
775
) ;
@@ -1346,9 +1347,8 @@ impl Bindgen for FunctionBindgen<'_> {
1346
1347
let tmp = self . tmp ( ) ;
1347
1348
let len = format ! ( "len{}" , tmp) ;
1348
1349
self . push_str ( & format ! ( "let {} = {} as usize;\n " , len, operands[ 1 ] ) ) ;
1349
- self . push_str ( "extern crate alloc;\n " ) ;
1350
1350
let result = format ! (
1351
- "alloc::vec:: Vec::from_raw_parts({} as *mut _, {1}, {1})" ,
1351
+ "Vec::from_raw_parts({} as *mut _, {1}, {1})" ,
1352
1352
operands[ 0 ] , len
1353
1353
) ;
1354
1354
results. push ( result) ;
@@ -1378,21 +1378,14 @@ impl Bindgen for FunctionBindgen<'_> {
1378
1378
let tmp = self . tmp ( ) ;
1379
1379
let len = format ! ( "len{}" , tmp) ;
1380
1380
self . push_str ( & format ! ( "let {} = {} as usize;\n " , len, operands[ 1 ] ) ) ;
1381
- self . push_str ( "extern crate alloc;\n " ) ;
1382
1381
let result = format ! (
1383
- "alloc::vec:: Vec::from_raw_parts({} as *mut _, {1}, {1})" ,
1382
+ "Vec::from_raw_parts({} as *mut _, {1}, {1})" ,
1384
1383
operands[ 0 ] , len
1385
1384
) ;
1386
1385
if unchecked {
1387
- results. push ( format ! (
1388
- "alloc::string::String::from_utf8_unchecked({})" ,
1389
- result
1390
- ) ) ;
1386
+ results. push ( format ! ( "String::from_utf8_unchecked({})" , result) ) ;
1391
1387
} else {
1392
- results. push ( format ! (
1393
- "alloc::string::String::from_utf8({}).unwrap()" ,
1394
- result
1395
- ) ) ;
1388
+ results. push ( format ! ( "String::from_utf8({}).unwrap()" , result) ) ;
1396
1389
}
1397
1390
}
1398
1391
@@ -1411,13 +1404,13 @@ impl Bindgen for FunctionBindgen<'_> {
1411
1404
let size = self . gen . sizes . size ( element) ;
1412
1405
let align = self . gen . sizes . align ( element) ;
1413
1406
self . push_str ( & format ! (
1414
- "let {layout} = core:: alloc::Layout::from_size_align_unchecked({vec}.len() * {size}, {align});\n " ,
1407
+ "let {layout} = alloc::Layout::from_size_align_unchecked({vec}.len() * {size}, {align});\n " ,
1415
1408
) ) ;
1416
1409
self . push_str ( & format ! (
1417
- "let {result} = if {layout}.size() != 0\n {{\n extern crate alloc; \ n let ptr = alloc:: alloc::alloc({layout});\n " ,
1410
+ "let {result} = if {layout}.size() != 0\n {{\n let ptr = alloc::alloc({layout});\n " ,
1418
1411
) ) ;
1419
1412
self . push_str ( & format ! (
1420
- "if ptr.is_null()\n {{\n extern crate alloc; \ n alloc::alloc ::handle_alloc_error({layout});\n }}\n ptr\n }}" ,
1413
+ "if ptr.is_null()\n {{\n alloc::handle_alloc_error({layout});\n }}\n ptr\n }}" ,
1421
1414
) ) ;
1422
1415
self . push_str ( & format ! ( "else {{\n core::ptr::null_mut()\n }};\n " , ) ) ;
1423
1416
self . push_str ( & format ! ( "for (i, e) in {vec}.into_iter().enumerate() {{\n " , ) ) ;
@@ -1453,9 +1446,8 @@ impl Bindgen for FunctionBindgen<'_> {
1453
1446
"let {len} = {operand1};\n " ,
1454
1447
operand1 = operands[ 1 ]
1455
1448
) ) ;
1456
- self . push_str ( "extern crate alloc;\n " ) ;
1457
1449
self . push_str ( & format ! (
1458
- "let mut {result} = alloc::vec:: Vec::with_capacity({len} as usize);\n " ,
1450
+ "let mut {result} = Vec::with_capacity({len} as usize);\n " ,
1459
1451
) ) ;
1460
1452
1461
1453
self . push_str ( "for i in 0.." ) ;
0 commit comments