Skip to content

Commit 6897d96

Browse files
Support rest spread & fix #8 (#10)
1 parent 7296294 commit 6897d96

File tree

6 files changed

+47
-8
lines changed

6 files changed

+47
-8
lines changed

lib/transform.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var StringDecoder = require('string_decoder').StringDecoder
22
var mapLimit = require('map-limit')
33
var through = require('through2')
4+
var acorn = require('acorn-node')
45
var falafel = require('falafel')
56
var mkdirp = require('mkdirp')
67
var path = require('path')
@@ -43,8 +44,8 @@ function transform (filename, opts) {
4344
try {
4445
// We need to acquire the module name first, before we can proceed to
4546
// parse all the things.
46-
var ast = falafel(src, { ecmaVersion: 8 }, identifyModuleName)
47-
ast = falafel(ast.toString(), { ecmaVersion: 8 }, extractNodes)
47+
var ast = falafel(src, { parser: acorn }, identifyModuleName)
48+
ast = falafel(ast.toString(), { parser: acorn }, extractNodes)
4849
} catch (err) {
4950
return self.emit('error', err)
5051
}
@@ -78,12 +79,7 @@ function transform (filename, opts) {
7879
buf.forEach((c) => center.push(c))
7980
var str = `new Uint8Array(${JSON.stringify(center)})`
8081

81-
var parentNodeType = val.node.parent.type
82-
var lolSemicolon = parentNodeType === 'VariableDeclarator' ||
83-
parentNodeType === 'AssignmentExpression'
84-
? ''
85-
: ';'
86-
val.node.update(lolSemicolon + str)
82+
val.node.update(str)
8783
done()
8884
})
8985
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"test": "standard && node test/index.js"
1212
},
1313
"dependencies": {
14+
"acorn-node": "^1.3.0",
1415
"falafel": "^2.1.0",
1516
"map-limit": "0.0.1",
1617
"mkdirp": "^0.5.1",

test/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
require('./rust')
22
require('./external')
3+
require('./syntax')

test/syntax.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var test = require('tape')
2+
var path = require('path')
3+
var vm = require('vm')
4+
var browserify = require('browserify')
5+
var rustify = require('../')
6+
7+
test('syntax', function (t) {
8+
t.plan(3)
9+
browserify(path.join(__dirname, 'syntax/main.js'))
10+
.transform(rustify)
11+
.bundle(function (err, src) {
12+
t.ifError(err)
13+
vm.runInNewContext(src, { T: t })
14+
})
15+
})

test/syntax/extern.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#[no_mangle]
2+
pub fn multiple() -> i32 { 20 }

test/syntax/main.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var rust = require('rustify')
2+
3+
var obj = { ...null }
4+
var wasm = rust`
5+
#[no_mangle]
6+
pub fn with_semi() -> i32 { 10 }
7+
`;
8+
9+
console.log
10+
rust`#[no_mangle] pub fn should_not_call_console_log() -> () {}`
11+
12+
instantiate(rust('./extern.rs'))
13+
14+
WebAssembly.instantiate(wasm, {}).then(function (res) {
15+
var exports = res.instance.exports
16+
T.equal(exports.with_semi(), 10)
17+
}).catch(T.fail)
18+
19+
function instantiate (bin) {
20+
WebAssembly.instantiate(bin, {}).then(function (res) {
21+
var exports = res.instance.exports
22+
T.equal(exports.multiple(), 20)
23+
}).catch(T.fail)
24+
}

0 commit comments

Comments
 (0)