@@ -1236,8 +1236,6 @@ impl<'a> Context<'a> {
1236
1236
return Ok ( ( ) ) ;
1237
1237
}
1238
1238
self . require_internal_export ( "__wbindgen_malloc" ) ?;
1239
- self . expose_text_encoder ( ) ;
1240
- self . expose_uint8_memory ( ) ;
1241
1239
self . expose_wasm_vector_len ( ) ;
1242
1240
let debug = if self . config . debug {
1243
1241
"
@@ -1247,6 +1245,33 @@ impl<'a> Context<'a> {
1247
1245
""
1248
1246
} ;
1249
1247
1248
+ // If we are targeting Node.js, it doesn't have `encodeInto` yet
1249
+ // but it does have `Buffer::write` which has similar semantics but
1250
+ // doesn't require creating intermediate view using `subarray`
1251
+ // and also has `Buffer::byteLength` to calculate size upfront.
1252
+ if self . config . mode . nodejs ( ) {
1253
+ self . expose_node_buffer_memory ( ) ;
1254
+
1255
+ self . global ( & format ! (
1256
+ "
1257
+ function passStringToWasm(arg) {{
1258
+ {}
1259
+ const size = Buffer.byteLength(arg);
1260
+ const ptr = wasm.__wbindgen_malloc(size);
1261
+ getNodeBufferMemory().write(arg, ptr, size);
1262
+ WASM_VECTOR_LEN = size;
1263
+ return ptr;
1264
+ }}
1265
+ " ,
1266
+ debug,
1267
+ ) ) ;
1268
+
1269
+ return Ok ( ( ) ) ;
1270
+ }
1271
+
1272
+ self . expose_text_encoder ( ) ;
1273
+ self . expose_uint8_memory ( ) ;
1274
+
1250
1275
// The first implementation we have for this is to use
1251
1276
// `TextEncoder#encode` which has been around for quite some time.
1252
1277
let use_encode = format ! (
@@ -1600,48 +1625,52 @@ impl<'a> Context<'a> {
1600
1625
) ) ;
1601
1626
}
1602
1627
1628
+ fn expose_node_buffer_memory ( & mut self ) {
1629
+ self . memview ( "getNodeBufferMemory" , "Buffer.from" ) ;
1630
+ }
1631
+
1603
1632
fn expose_int8_memory ( & mut self ) {
1604
- self . memview ( "getInt8Memory" , "Int8Array" ) ;
1633
+ self . memview ( "getInt8Memory" , "new Int8Array" ) ;
1605
1634
}
1606
1635
1607
1636
fn expose_uint8_memory ( & mut self ) {
1608
- self . memview ( "getUint8Memory" , "Uint8Array" ) ;
1637
+ self . memview ( "getUint8Memory" , "new Uint8Array" ) ;
1609
1638
}
1610
1639
1611
1640
fn expose_clamped_uint8_memory ( & mut self ) {
1612
- self . memview ( "getUint8ClampedMemory" , "Uint8ClampedArray" ) ;
1641
+ self . memview ( "getUint8ClampedMemory" , "new Uint8ClampedArray" ) ;
1613
1642
}
1614
1643
1615
1644
fn expose_int16_memory ( & mut self ) {
1616
- self . memview ( "getInt16Memory" , "Int16Array" ) ;
1645
+ self . memview ( "getInt16Memory" , "new Int16Array" ) ;
1617
1646
}
1618
1647
1619
1648
fn expose_uint16_memory ( & mut self ) {
1620
- self . memview ( "getUint16Memory" , "Uint16Array" ) ;
1649
+ self . memview ( "getUint16Memory" , "new Uint16Array" ) ;
1621
1650
}
1622
1651
1623
1652
fn expose_int32_memory ( & mut self ) {
1624
- self . memview ( "getInt32Memory" , "Int32Array" ) ;
1653
+ self . memview ( "getInt32Memory" , "new Int32Array" ) ;
1625
1654
}
1626
1655
1627
1656
fn expose_uint32_memory ( & mut self ) {
1628
- self . memview ( "getUint32Memory" , "Uint32Array" ) ;
1657
+ self . memview ( "getUint32Memory" , "new Uint32Array" ) ;
1629
1658
}
1630
1659
1631
1660
fn expose_int64_memory ( & mut self ) {
1632
- self . memview ( "getInt64Memory" , "BigInt64Array" ) ;
1661
+ self . memview ( "getInt64Memory" , "new BigInt64Array" ) ;
1633
1662
}
1634
1663
1635
1664
fn expose_uint64_memory ( & mut self ) {
1636
- self . memview ( "getUint64Memory" , "BigUint64Array" ) ;
1665
+ self . memview ( "getUint64Memory" , "new BigUint64Array" ) ;
1637
1666
}
1638
1667
1639
1668
fn expose_f32_memory ( & mut self ) {
1640
- self . memview ( "getFloat32Memory" , "Float32Array" ) ;
1669
+ self . memview ( "getFloat32Memory" , "new Float32Array" ) ;
1641
1670
}
1642
1671
1643
1672
fn expose_f64_memory ( & mut self ) {
1644
- self . memview ( "getFloat64Memory" , "Float64Array" ) ;
1673
+ self . memview ( "getFloat64Memory" , "new Float64Array" ) ;
1645
1674
}
1646
1675
1647
1676
fn memview_function ( & mut self , t : VectorKind ) -> & ' static str {
@@ -1711,7 +1740,7 @@ impl<'a> Context<'a> {
1711
1740
let cache{name} = null;
1712
1741
function {name}() {{
1713
1742
if (cache{name} === null || cache{name}.buffer !== {mem}.buffer) {{
1714
- cache{name} = new {js}({mem}.buffer);
1743
+ cache{name} = {js}({mem}.buffer);
1715
1744
}}
1716
1745
return cache{name};
1717
1746
}}
0 commit comments