Commit Graph

381 Commits

Author SHA1 Message Date
0f5badf95e Merge pull request #299 from jonathan-s/number
Adds valueOf and toString to Number
2018-06-23 16:04:35 -07:00
9e07c4935c bindings for Function.length and Function.name 2018-06-23 23:41:28 +03:00
6b5974d1bd Add toLocaleString to Number 2018-06-23 19:03:55 +02:00
f636f7b28d Add toPrecision to Number 2018-06-23 18:18:58 +02:00
bf56d5815b Add the binding of to_string to Number 2018-06-23 17:38:13 +02:00
a7f8e071fe Add the binding valueOf to number 2018-06-23 14:43:43 +02:00
e255925292 implements Object.prototype.valueOf() binding 2018-06-23 12:11:46 +02:00
d79f982a01 Merge pull request #295 from kzvi/js-class-attr
add js_class attribute for defining what class an imported method is for
2018-06-22 21:38:14 -07:00
5ae6ee7aec add JsString binding to src/js.rs and tests 2018-06-22 17:51:44 -07:00
c63d57f6d7 Add some more doc comments 2018-06-22 11:10:37 -07:00
99ee74d153 Add binding for concat 2018-06-22 10:55:50 -07:00
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
ce14de21c3 Merge branch 'array-method' of https://github.com/jonathan-s/wasm-bindgen into rollup 2018-06-22 10:45:33 -07:00
39465c896c implements Object.prototype.toLocaleString() binding 2018-06-22 13:36:44 +02:00
a7bb555944 Add Sort to Array 2018-06-22 09:01:41 +02:00
de4eea119d Make array methods in alphabetical order 2018-06-22 08:59:11 +02:00
a9ca64b689 Implement Array.length binding 2018-06-21 21:30:57 -07:00
9e01e67aa3 Merge pull request #289 from wismer/array-iterator-method-bindings
Array iterator method bindings
2018-06-21 15:24:25 -07:00
a95476a8ee add binding for entries method 2018-06-21 17:21:35 -04:00
4cc73877a6 add binding for keys method 2018-06-21 17:00:02 -04:00
dd3740e2fb allows using &JsValue as an arg to Object's has_own_property 2018-06-21 22:51:30 +02:00
1e1276410a implements Object.prototype.isPrototypeOf() binding 2018-06-21 13:56:24 +02:00
77ad68673c implements Object.isPrototypeOf binding 2018-06-21 07:36:24 +02:00
a8cd428850 add binding for includes 2018-06-20 18:36:10 -04:00
eb6c2a239c add binding for toString 2018-06-20 18:23:26 -04:00
3cf522d2df add bindings for unshift 2018-06-20 18:07:30 -04:00
68acbeab25 add binding for shift 2018-06-20 18:03:26 -04:00
d705cd8bbf add binding for reverse 2018-06-20 18:00:58 -04:00
4611d7bdba add binding for push 2018-06-20 17:58:15 -04:00
73081180cd add binding for pop 2018-06-20 17:55:25 -04:00
2f6f734216 add binding for copyWithin 2018-06-20 17:51:02 -04:00
d155136f0e add binding for fill 2018-06-20 17:49:34 -04:00
e8bb0c2f98 add binding for slice 2018-06-20 17:46:10 -04:00
0b80888c0d add binding for join 2018-06-20 17:38:47 -04:00
667733e929 add binding for lastIndexOf 2018-06-20 17:36:35 -04:00
4a96ba3c72 add binding for indexOf 2018-06-20 17:23:38 -04:00
d89c7958eb Js binding for to_string 2018-06-20 21:55:41 +02:00
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
e4dcb8f85e Add associated constants for common JS values 2018-06-18 16:41:01 -07:00
659583b40d Implement PartialEq for JsValue (#217)
Dispatch to JS's `===` operator internally
2018-06-01 16:47:45 -05:00
cb1e5cf136 Optimize JsValue::{from_bool, undefined, null} constructors (#220)
This commit optimizes constructing an instance of `JsValue` which is one of
`null`, `undefined`, `true`, or `false`. These are commonly created on the Rust
side of things and since there's only a limited set of values we can easily
prepopulate the global slab with a few entries and use hardcoded indices to
refer to these constants. This should avoid the need to travel into JS to insert
a `null` or and `undefined` into the global slab.
2018-06-01 16:46:42 -05:00
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
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
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
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
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
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
65acc3b692 Tighten up codegen with JsStatic a bit
This requires some `unsafe` as we have knowledge that LLVM doesn't, but
shouldn't be too harmful.
2018-04-21 13:52:28 -07:00
4436c0eae6 Avoid invoking a function pointer with JsStatic
The previous codegen wasn't enough to convince LLVM that the function pointer
was a constant value and could be aggressively inlined, so this updates the
`JsStatic` internals slightly to guarantee to LLVM that the function pointer is
constant and no dynamic dispatch is needed after all
2018-04-21 13:14:33 -07:00
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