Commit Graph

345 Commits

Author SHA1 Message Date
eb9a6524b9 Bump to 0.2.2 2018-04-13 07:50:24 -07:00
8854936599 Tweak initialization with --no-modules
* Have the global `wasm_bindgen` variable be a function which runs
  initialization rather than exporting an `init` function.
* Save off the wasm object on `wasm_bindgen.wasm` so the memory can be accessed
* Tidy up the code slightly
2018-04-13 07:44:35 -07:00
98016324f7 Merge branch 'umd' of https://github.com/csharad/wasm-bindgen 2018-04-13 07:34:27 -07:00
85c9f2319c Expose on window.wasm_bindgen 2018-04-13 14:25:27 +05:45
ffdb8a6a32 Simplified the preamble 2018-04-12 10:31:13 +05:45
b9b8756cd0 Demangle Rust symbols by default 2018-04-11 11:43:18 -07:00
aa6487b6f1 panic when modules used 2018-04-11 14:22:20 +05:45
8c935d5d94 Change flag to --no-modules 2018-04-11 13:59:58 +05:45
0aef97215c Call fs.readFileSync with __dirname
Node's fs APIs resolve relative paths relative to the current working directory:

https://nodejs.org/api/fs.html#fs_file_paths

This creates a problem if you try to require the wasm-bindgen-generated
JavaScript from a different directory. For example, if you have

  build/foo.js
  build/foo_bg.js
  build/foo_bg.wasm

and another script, script/index.js, that requires build/foo.js. We can instead
use __dirname to get the correct path to the file.
2018-04-09 17:38:22 -07:00
60ac57331b Bump to 0.2.1 2018-04-09 15:18:39 -07:00
a3e5485b86 Add examples/documentation for closures 2018-04-09 14:34:21 -07:00
66bdd92fa2 More aggressively gc module
As soon as we've removed unneeded exports immediately run a gc pass to ensure
that we don't bind functions in JS that don't actually end up getting needed.
2018-04-09 14:34:21 -07:00
f7f0d578e7 Support long-lived closures
Docs coming soon!
2018-04-09 14:34:21 -07:00
28d6c1bc12 Support stack closures with up to 7 arguments 2018-04-09 14:34:21 -07:00
c0cad447c1 Initial support for closures
This commit starts wasm-bindgen down the path of supporting closures. We
discussed this at the recent Rust All-Hands but I ended up needing to pretty
significantly scale back the ambitions of what closures are supported. This
commit is just the initial support and provides only a small amount of support
but will hopefully provide a good basis for future implementations.

Specifically this commit adds support for passing `&Fn(...)` to an *imported
function*, but nothing elese. The `&Fn` type can have any lifetime and the JS
object is invalidated as soon as the import returns. The arguments and return
value of `Fn` must currently implement the `WasmAbi` trait, aka they can't
require any conversions like strings/types/etc.

I'd like to soon expand this to `&mut FnMut` as well as `'static` closures that
can be passed around for a long time in JS, but for now I'm putting that off
until later. I'm not currently sure how to implement richer argument types, but
hopefully that can be figured out at some point!
2018-04-09 14:34:21 -07:00
a699455f03 Walk the prototype chain looking for descriptors
Looks like this breakage may occur in some scenarios so let's try to
future-proof ourselves!

Closes #109
2018-04-09 06:16:41 -07:00
ee1e3abd45 Am an idiot 2018-04-07 13:22:03 +05:45
e8f4b7ed86 Skip window assertions 2018-04-07 13:08:57 +05:45
0bd8713bd5 Dropped node support in umd -> amd 2018-04-07 13:06:36 +05:45
2b9af53030 wasm is compiled, mod in uncompiled 2018-04-06 12:59:07 +05:45
1a428d69da {global} not referenced 2018-04-05 20:30:58 +05:45
2877d0bdb6 UMD import added 2018-04-05 19:50:26 +05:45
3a83b02de0 Added umd switch 2018-04-04 20:06:53 +05:45
9421edaab5 add missed out TextEncoder 2018-04-04 11:22:34 +02:00
6d5afbb3d2 reduce the js file generated code
remove node test for browser test

update usages

revert test-support changes
2018-04-04 11:22:32 +02:00
de3a7e3242 Remove nodejs-checking logic from math exports
Instead create a temporary vector which is used to later invoke the generic
`export` function
2018-04-03 13:29:26 -07:00
62e9f580d0 Use Context::export in write_classes
No need to doubly check for `nodejs`
2018-04-03 13:25:10 -07:00
23f6049619 Fixup various refactoring issues 2018-04-03 13:20:56 -07:00
7f614c3c3a Reduce node/browser duplication
Centralize the export of a function to one location to reduce duplication in
various other locations checking whether Node is being targeted or not.
2018-04-03 13:12:28 -07:00
455e86ef6d Merge branch 'node-math' of https://github.com/ashleygwilliams/wasm-bindgen 2018-04-03 12:53:15 -07:00
1ff9ccf072 Tighten up getStringFromWasm a bit
no need for some extra locals here
2018-04-03 12:44:35 -07:00
978b5ada63 Tighten up passStringToWasm a bit
Only emit `throw` on debug mode primarily
2018-04-03 12:44:09 -07:00
f1e8e2bee0 Remove GLOBAL_ARGUMENT_CNT JS binding
This is easier to manage statically so no need to track it dynamically
2018-04-03 12:38:33 -07:00
a805e04a81 Track next_global at codegen time
No need to track it at runtime as we should statically know its value!
2018-04-03 12:24:35 -07:00
8e5f5d20fc Remove accidental double braces 2018-04-03 12:24:19 -07:00
76cc1ca295 Fix imports of TextEncoder/TextDecoder 2018-04-03 08:09:25 -07:00
30b1964255 Bump all crates to 0.2 2018-04-03 07:10:07 -07:00
540ccfac9d Only generate JS class constructor export if import is needed 2018-04-03 11:28:25 +02:00
73619b5d15 Add support for constructing JsValue instances generically 2018-04-02 09:59:01 -07:00
7880545b3b Finish fixing fallout in all tests 2018-03-31 09:15:39 -07:00
2880247acf Get the imports test passing 2018-03-31 08:26:20 -07:00
cdbb31f3a9 Start removal of vector special-casing
This commit starts wasm-bindgen down a path of removing the special
casing it currently has around vectors, slices, and strings. This has
long been a thorn in wasm-bindgen's side as it doesn't handle other
kinds of vectors and otherwise is very inflexible with future additions.
Additionally it leads to a lot of duplicated-ish code throughout various
portions of codegen.

The fundamental reason for this was that two arguments were required to
be passed back to wasm, and I couldn't figure out a way to shove both
those arguments into a function argument. The new strategy here is that
there is one global stack well known to both JS and Rust which arguments
*may* also be transferred between.

By default all ABI arguments pass as literal function arguments, but if
two or more arguments need to be passed then the extra ones are all
passed through this global stack. The stack is effectively temporary
scratch space when crossing the JS/Rust boundary (both ways). No long
term storage is intended here.

The `simple` test is passing as a result of this commit, using strings
internally. The `Vector` type in the AST has been removed (yay!) and the
bulk of the implementation of slices and vectors now resides in the
`wasm-bindgen` crate itself, defining how to pass all these arguments
around. The JS generator, however, still needs to know about all the
sorts of vectors so it can generate appropriate code for JS.

Future commits will continue cleanup and get the rest of the tests
working.
2018-03-31 07:57:47 -07:00
13520e324b Fix import TextDecoder in output for nodejs config 2018-03-30 10:50:01 -07:00
3ed363ae39 feat(enum): object.freeze the enum 2018-03-29 17:30:28 +02:00
393841779a Rename directories to remove "wasm-bindgen-" prefix in sub-crates 2018-03-29 08:28:25 -07:00