Commit Graph

303 Commits

Author SHA1 Message Date
Jonathan Sundqvist
5eb744c7d6 Add atanh to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
3223a9af75 Add atan2 to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
7e514b939f Add atan to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
4b812ee47d Add asinh to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
94255c1ba9 Add asin to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
d40a314a91 Add acosh to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
230650055c Add acos to Math 2018-06-25 22:52:04 +02:00
Jonathan Sundqvist
9633642e6e Add abs to Math 2018-06-25 22:52:04 +02:00
Lachezar Lechev
44444920a4 Merge branch 'master' into string-support 2018-06-25 22:20:38 +02:00
Lachezar Lechev
36e79d23c4 String - startsWith/substring/indexOf 2018-06-25 21:30:04 +02:00
Nick Fitzgerald
7a688d6967
Merge branch 'master' into string-substr 2018-06-25 11:31:42 -07:00
Lachezar Lechev
d28d81f38d Add basic support for String.prototype.charAt() (#306)
* String - charAt() implementation

* String - charAt() - add js_class
2018-06-25 11:24:44 -07:00
Nick Fitzgerald
eb04d15a65 js: Add bindings to Object.keys 2018-06-25 10:45:53 -07:00
Lachezar Lechev
b81dc46220 String - substr() support 2018-06-24 23:03:39 +02:00
Sendil Kumar
32bc9f271c rebase to handle JsString 2018-06-24 20:48:37 +02:00
Sendil Kumar
233b35254f Merge branch 'master' into number-fixed-exponential 2018-06-24 20:46:53 +02:00
R. Andrew Ohana
21f49d0302 reenable part of js_globals::Number::to_locale_string 2018-06-24 10:43:24 -07:00
Sendil Kumar
0f57398917 Add to_fixed and to_exponential function 2018-06-24 10:08:23 +02:00
R. Andrew Ohana
8abecba983 fix and disable test js_globals::Number::to_locale_string 2018-06-23 18:25:47 -07:00
R. Andrew Ohana
35c5dafdd2 js globals: return JsString rather than String 2018-06-23 17:15:13 -07:00
Nick Fitzgerald
b1cbb56224
Merge branch 'master' into master 2018-06-23 16:19:08 -07:00
Nick Fitzgerald
0f5badf95e
Merge pull request #299 from jonathan-s/number
Adds valueOf and toString to Number
2018-06-23 16:04:35 -07:00
Alexander Kryvomaz
9e07c4935c bindings for Function.length and Function.name 2018-06-23 23:41:28 +03:00
Jonathan Sundqvist
6b5974d1bd Add toLocaleString to Number 2018-06-23 19:03:55 +02:00
Jonathan Sundqvist
f636f7b28d Add toPrecision to Number 2018-06-23 18:18:58 +02:00
Jonathan Sundqvist
bf56d5815b Add the binding of to_string to Number 2018-06-23 17:38:13 +02:00
Jonathan Sundqvist
a7f8e071fe Add the binding valueOf to number 2018-06-23 14:43:43 +02:00
belfz
e255925292 implements Object.prototype.valueOf() binding 2018-06-23 12:11:46 +02:00
kzvi
5ae6ee7aec add JsString binding to src/js.rs and tests 2018-06-22 17:51:44 -07:00
Jonathan Sundqvist
99ee74d153 Add binding for concat 2018-06-22 10:55:50 -07:00
Nick Fitzgerald
7825122feb Merge branch 'expose-bindings/object-to-locale-string' of https://github.com/belfz/wasm-bindgen into rollup 2018-06-22 10:51:17 -07:00
Nick Fitzgerald
ce14de21c3 Merge branch 'array-method' of https://github.com/jonathan-s/wasm-bindgen into rollup 2018-06-22 10:45:33 -07:00
belfz
39465c896c implements Object.prototype.toLocaleString() binding 2018-06-22 13:36:44 +02:00
Jonathan Sundqvist
a7bb555944 Add Sort to Array 2018-06-22 09:01:41 +02:00
robertdurst
a9ca64b689 Implement Array.length binding 2018-06-21 21:30:57 -07:00
Nick Fitzgerald
9e01e67aa3
Merge pull request #289 from wismer/array-iterator-method-bindings
Array iterator method bindings
2018-06-21 15:24:25 -07:00
Matt Long
a95476a8ee add binding for entries method 2018-06-21 17:21:35 -04:00
Matt Long
4cc73877a6 add binding for keys method 2018-06-21 17:00:02 -04:00
belfz
dd3740e2fb allows using &JsValue as an arg to Object's has_own_property 2018-06-21 22:51:30 +02:00
belfz
420eaffcb3 adds missing unit tests for property_is_enumerable 2018-06-21 21:32:03 +02:00
belfz
1e1276410a implements Object.prototype.isPrototypeOf() binding 2018-06-21 13:56:24 +02:00
belfz
77ad68673c implements Object.isPrototypeOf binding 2018-06-21 07:36:24 +02:00
Matt Long
a8cd428850 add binding for includes 2018-06-20 18:36:10 -04:00
Matt Long
eb6c2a239c add binding for toString 2018-06-20 18:23:26 -04:00
Matt Long
3cf522d2df add bindings for unshift 2018-06-20 18:07:30 -04:00
Matt Long
68acbeab25 add binding for shift 2018-06-20 18:03:26 -04:00
Matt Long
d705cd8bbf add binding for reverse 2018-06-20 18:00:58 -04:00
Matt Long
4611d7bdba add binding for push 2018-06-20 17:58:15 -04:00
Matt Long
73081180cd add binding for pop 2018-06-20 17:55:25 -04:00
Matt Long
2f6f734216 add binding for copyWithin 2018-06-20 17:51:02 -04:00
Matt Long
d155136f0e add binding for fill 2018-06-20 17:49:34 -04:00
Matt Long
e8bb0c2f98 add binding for slice 2018-06-20 17:46:10 -04:00
Matt Long
0b80888c0d add binding for join 2018-06-20 17:38:47 -04:00
Matt Long
667733e929 add binding for lastIndexOf 2018-06-20 17:36:35 -04:00
Matt Long
4a96ba3c72 add binding for indexOf 2018-06-20 17:23:38 -04:00
Jonathan Sundqvist
d89c7958eb Js binding for to_string 2018-06-20 21:55:41 +02:00
Nick Fitzgerald
5eda5504e9
Merge pull request #273 from FreeMasen/validate-ptr
Validate ptr
2018-06-19 16:45:31 -07:00
Nick Fitzgerald
224d20337f
Merge pull request #274 from fitzgen/js-sys
Expose objects and functions from the JavaScript global scope
2018-06-19 10:42:04 -07:00
Nick Fitzgerald
7b0e779ffd test: remove unnecessary test.ts files
The testing infrastructure will add exactly this default `test.ts` when it isn't
explicitly specified.
2018-06-19 10:17:42 -07:00
Nick Fitzgerald
a201cafdea test: Move Object-related js_globals tests to submodule file 2018-06-19 10:15:09 -07:00
Nick Fitzgerald
161fce9d50 Expose objects and functions from the JavaScript global scope
These are bindings to JavaScript's standard, built-in objects and their methods
and properties.

This does *not* include any Web, Node, or any other JS environment APIs. Only
the things that are guaranteed to exist in the global scope by the ECMAScript
standard.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
2018-06-18 16:41:01 -07:00
Robert Masen
e9ea2dabc1 add Validate ptr test 2018-06-18 15:34:48 -05:00
R. Andrew Ohana
d123bedc20 change some asserts to assert_(eq|ne)s 2018-06-18 13:10:07 -07:00
R. Andrew Ohana
0938858aa8 webidl: add support for static attributes 2018-06-15 12:22:14 -07:00
R. Andrew Ohana
fe5cde8636 webidl: add support for static methods 2018-06-15 12:09:42 -07:00
Nick Fitzgerald
639ccd53ce
Merge pull request #269 from ohanar/webidl_constructor
webidl: add support for (named) constructors
2018-06-15 11:35:29 -07:00
Robert Masen
19d6cf1488 Copy doc comments from Rust to JS (#265)
* backend comments complete

* better matching

* gen comments

* Add example

* Move test bindings gen to own fn

* move build step into build fn

* add fn to read js, refactor gen_bindings/test to allow for this

* Add comments test

* Update readmes

* add comments to travis

* fix broken tests

* +x on build.sh

* fix wbg cmd in build.sh

* Address fitzgen's comments
2018-06-15 09:20:56 -07:00
R. Andrew Ohana
cbec42e86c webidl: add support for named constructors 2018-06-14 16:20:20 -07:00
R. Andrew Ohana
c65cb51fba webidl: add support for constructors 2018-06-14 16:15:25 -07:00
R. Andrew Ohana
9b8c0b8fb9 small cleanup in testing framework 2018-06-11 18:00:33 -07:00
R. Andrew Ohana
077f50c6f2 webidl: add initial support for integration tests 2018-06-10 23:04:17 -07:00
Alex Crichton
659583b40d
Implement PartialEq for JsValue (#217)
Dispatch to JS's `===` operator internally
2018-06-01 16:47:45 -05:00
Alex Crichton
ad89d8457e
Fix tests by pinning versions of webpack (#219)
Looks like a newer version of webpack has broken tests, so let's use
package-lock.json to pin to an older version while we wait for a fix.
2018-06-01 13:42:59 -05:00
Nick Fitzgerald
daabbbd06e Add a stub test module for when we have webidl tests 2018-05-29 14:20:15 -07:00
Robert Masen
4ddd93d75d add char support (#206)
* add char support

* add char test

* remove __wbindgen_char fns

* re-order travis script

* update serve script

* remove binds to unused char functions

* add more wide character items to chars list

* remove unused code

* add char to readme

* remove built file
2018-05-22 12:34:41 -05:00
Alex Crichton
dd76707ea1 Prevent use-after-free with vectors
Awhile back slices switched to being raw views into wasm memory, but this
doens't work if we free the underlying memory unconditionally! Moving around a
`Vec` is already moving a lot of data, so let's copy it onto the JS heap instead
of leaving it in the wasm heap.
2018-05-21 11:23:46 -07:00
Alex Crichton
ca8809b4e9 Don't try to codegen static into an impl
Closes #194
2018-05-11 08:28:09 -07:00
Alex Crichton
06664b34ce Fix parsing some Rust keywords in attributes
Closes #193
2018-05-09 08:01:57 -07:00
Alex Crichton
237fff0698 Map u64/i64 to BigInt in JS
This commit is an implementation of mapping u64/i64 to `BigInt` in JS through
the unstable BigInt APIs. The BigInt type will ship soon in Chrome and so this
commit builds out the necessary support for wasm-bindgen to use it!
2018-05-05 18:51:20 -07:00
Alex Crichton
48a823c685 Remove slice logic of "commit to wasm"
When adding support for mutable slices I was under the impression that if the
wasm memory was reallocated while we were using it then we'd have to commit the
changes from the original buffer back to the new buffer. What I didn't know,
however, is that once the wasm memory is reallocated then all views into it are
supposed to be defunkt.

It looks like node 9 didn't have this implementation quite right and it appears
fixed in node 10, causing the deleted test here to fail. While this commit does
raise the question of whether this is the right approach to interact with slices
in JS I think the answer is still "yes". The user can always initiate the copy
if need be and that seems strictly better than copying 100% of the time.
2018-05-05 14:52:22 -07:00
Alex Crichton
139b7a1aae Don't use the global stack for string lengths
This commit updates the `Abi` associated type for all slice types to a
`WasmSlice` type, an aggregate of two `u32` integers. This translates to an ABI
where when passed as a function argument it expands to two integer arguments,
and when passed as a return value it passes a return pointer as the first
argument to get filled in.

This is hopefully more forwards-compatible with the host bindings proposal which
uses this strategy for passing string arguments at least. It's a little sketchy
what we're doing as there's not really a stable ABI yet, but hopefully this'll
all be relatively stable for awhile!
2018-05-02 21:03:50 -07:00
Alex Crichton
4304a262c6 Fix enums defined in submodules 2018-05-02 10:17:16 -07:00
Alex Crichton
0566a97485 Add support for mutable slices
This commit adds support for mutable slices to pass the boundary between JS and
Rust. While mutable slices cannot be used as return values they can be listed as
arguments to both exported functions as well as imported functions.

When passing a mutable slice into a Rust function (aka having it as an argument
to an exported Rust function) then like before with a normal slice it's copied
into the wasm memory. Afterwards, however, the updates in the wasm memory will
be reflected back into the original slice. This does require a lot of copying
and probably isn't the most efficient, but it should at least work for the time
being.

The real nifty part happens when Rust passes a mutable slice out to JS. When
doing this it's a very cheap operation that just gets a subarray of the main
wasm memory. Now the wasm memory's buffer can change over time which can produce
surprising results where memory is modified in JS but it may not be reflected
back into Rust. To accomodate this when a JS imported function returns any
updates to the buffer are copied back to Rust if Rust's memory buffer has
changed in the meantime.

Along the way this fixes usage of `slice` to instead use `subarray` as that's
what we really want, no copying. All methods have been updated to use `subarray`
accessors instead of `slice` or constructing new arrays.

Closes #53
2018-05-01 10:06:35 -07:00
Alex Crichton
4a873af8d1 Enable cargo test where possible
Currently `#[wasm_bindgen]` generates a bunch of references to symbols that
don't actually exist on non-wasm targets, making it more difficult to get a
crate working across multiple platforms. This commit updates the symbol
references to be dummy ones that panic on non-wasm targets to allow simple
testing/benchmarking to work on native targets.

While this isn't a perfect solution for #114 it's probably as good as we can do
for now pending upstream Cargo features, so I'm gonna say that it...

Closes #114
2018-04-27 15:01:35 -07:00
Alex Crichton
b8895b3a95 Add JsValue::{from_serde, into_serde}
These functions are activated with the `serde-serialization` feature of the
`wasm-bindgen` crate. When activated they will allow passing any arbitrary value
into JS that implements the `Serialize` trait and receiving any value from JS
using the `Deserialize` trait. The interchange between JS and Rust is JSON.

Closes #96
2018-04-26 20:45:22 -07:00
Alex Crichton
412bebca72 Add support for version specifications
This commit adds a `#[wasm_bindgen(version = "...")]` attribute support. This
information is eventually written into a `__wasm_pack_unstable` section.
Currently this is a strawman for the proposal in ashleygwilliams/wasm-pack#101
2018-04-25 22:23:02 -07:00
Alex Crichton
d9a71b43db Assert empty JS heap/stack in tests
Turns out there was a bug when passing a vector of `JsValue` instances back to
JS all objects were leaked rather than correctly removed from the global slab.
2018-04-25 22:15:28 -07:00
Alex Crichton
faed98b843 Correct how slices are iterated over
This commit fixes how the `getArrayJsValueFromWasm` function is defined to
correctly iterate over the slice by looking at the values rather than the
indices.

Closes #169
2018-04-25 21:58:49 -07:00
Alex Crichton
7108206835 Implement readonly struct fields
Add support for `#[wasm_bindgen(readonly)]` which indicates that an exported
struct field is readonly and attempting to set it in JS will throw an exception.

Closes #151
2018-04-20 10:56:10 -07:00
Alex Crichton
c6f7d3dfd5 Fix methods returning Self
Rewrite any instance of `Self` to the name of the class

Closes #137
2018-04-19 18:43:37 -07:00
Alex Crichton
ce31859590 Generate accessors for public struct fields
Automatically infer public struct fields as "JS wants to access this" and
generate appropriate getters/setters for the field. At this time the field is
required to implement `Copy`, but we will probably want to relax that in the
future to at least encompass `JsValue` and maybe other `Clone` values as well.

Closes #121
2018-04-19 16:49:46 -07:00
Alex Crichton
212703671a No need to expose ptr in TypeScript
This was needed long ago but is no longer needed!

Closes #147
2018-04-19 13:28:50 -07:00
Alex Crichton
748184ae66 Work with #![no_std] contexts
This commit adds support for both `#![no_std]` in the wasm-bindgen runtime
support (disabled by default with an on-by-default `std` feature). This also
adds support to work and compile in the context of `#![no_std]` crates.

Closes #146
2018-04-19 13:24:30 -07:00
Alex Crichton
792a8e132e Fix unused variables in generated code
Also deny all warnings in tests to prevent this creeping back in.

Closes #141
2018-04-19 13:16:59 -07:00
Alex Crichton
0e032955fb Use a length accessor instead of byteLength
This way we should be naturally compatible with normal JS arrays that get passed
in as well!

Closes #133
2018-04-16 13:50:21 -07:00
Alex Crichton
5efde3abe9 Be sure to generate classes for empty structs
Closes #131
2018-04-16 08:05:18 -07:00
Alex Crichton
c64f178543 Support closures with "rich" arguments
This commit adds support for closures with arguments like strings and such. In
other words, closures passed to JS can now have the same suite of arguments as
all functions that can be exported from Rust, as one might expect!

At this time due to the way trait objects work closures still cannot use types
with references like `&str`, but bare values like `String` or `ImportedType`
should work just fine.

Closes #104
2018-04-16 07:51:51 -07:00
konstin
3999642f66 Merge remote-tracking branch 'upstream/master' into new 2018-04-15 01:50:23 +02:00
konstin
f45ce1f239 Do only use ConstructorToken when needed
Also removing some effectively dead code
2018-04-15 01:29:09 +02:00
konstin
e87b32fb22 Allow arbitratry constructor names 2018-04-14 11:19:17 -07:00
konstin
32ab5a5644 Suppport for javascript constructors
This is a conservative version where the function used for the constructor must be called `new`
2018-04-14 11:19:17 -07:00
Alex Crichton
a8d6ca3d62 Add support for mutable stack closures
This commit adds support for passing `&mut FnMut(..)` to JS via imports. These
closures cannot be invoked recursively in JS (they invalidate themselves while
they're being invoked) and otherwise work the same as `&Fn(..)` closures.

Closes #123
2018-04-14 11:16:16 -07:00
Alex Crichton
656d69816d Move all tests to the same suite
Nowadays the compile times are mitigated with incremental compilation and
otherwise it's much more ergonomic to run only one test if they're all in the
same suite.
2018-04-09 15:32:06 -07:00