Commit Graph

112 Commits

Author SHA1 Message Date
Leonardo Yvens 75406dd8ff Use transmute instead of casts In RuntimeValue conversion. (#102)
Casts have arithmetic semantics, and under some build configurations
Rust will panic when encountering an arithmetic overflow.
Use a transmute instead since it's what we mean.
The previous code worked, but still I added a test for good measure.
2018-06-21 15:47:49 +03:00
Sergey Pepyakin 724a32ad60
Provide direct access to the underlying buffer (#91)
This allows zero-copy access to the linear memory.
2018-05-31 16:01:15 +02:00
Jef 3890dd379f Preserve signalling bit in NaNs (#87)
* Preserve signalling bit in NaNs

* Fix warnings
2018-04-25 10:18:14 +03:00
Sergey Pepyakin 730c918a80
Don't expand locals. (#86) 2018-04-20 17:55:07 +03:00
Sergey Pepyakin 5cda9a05da Check the signature of host function. (#84) 2018-04-18 17:44:10 +03:00
Jef 22b260a3b9 Optionally deny floating point operations (#83)
* Optionally deny floating point operations

* Deny floating-point parameters and fix docs/indentation

* Test denial of floating-point parameters
2018-04-18 15:09:09 +03:00
Pierre Krieger 4c2995ca98 Fix the name of the 32bits feature (#82)
So that it matches the Cargo.toml
2018-04-04 18:14:43 +03:00
Sergey Pepyakin d12a04f8ff
Publish with externvals (#81)
* Publish with_externvals constructor.
* Add examples to Signature::new.
* Use Iterators for ExternVal imports
2018-03-29 18:43:44 +03:00
Sergey Pepyakin 86bbd96a33
Require func_type (not func) for func import. (#79) 2018-03-22 17:49:30 +03:00
Sergey Pepyakin 522fa20983
Fix br_if and then tee_local validation. (#76) 2018-03-20 13:09:51 +03:00
Sergey Pepyakin 6253dd6fdf Args refactor (#71)
* Refactor TryInto → FromRuntimeValue.

Replace `TryInto<T, E>` with `FromRuntimeValue`.

The main difference is that `FromRuntimeValue` is implemented for the concrete type of the value we create, rather than on `RuntimeValue`. This makes more sense to me and seems more clear.

The `try_into` method is now implemented on `RuntimeValue` itself.

And finally, `FromRuntimeValue` has been made public.

* Impl AsRef<[RuntimeValue]> for RuntimeArgs

This impl can be used as an escape hatch if the user wants to use the inner slice.

* Little doc fixes for RuntimeArgs.
2018-03-14 01:23:12 +03:00
Sergey Pepyakin 9fa933ccd6
Use f32/f64::from_bits. (#72)
And also enable:

- "conversions",
- "float_exprs",
- "float_literals",
- "float_memory",

tests.
2018-03-12 12:37:43 +01:00
Sergey Pepyakin 0c277abacb
Implement Error for Trap (#73) 2018-03-12 12:37:12 +01:00
Sergey Pepyakin 7c88c6ad65
Fix br_table validation (#67)
Fixes #63

Fix is simple: all labels refered by the br_table instruction must have same value type (or NoResult in case if they don't have result). So we just take the default label and check other labels against it.
2018-02-23 18:00:16 +03:00
Nikolay Volf f1a3f06d5e
remove stray println (#66) 2018-02-21 23:00:31 +03:00
Sergey Pepyakin 9140e869e2 Update spec testsuite; Fix instantiation bug (#61)
The bug was about instantiating a module with elements segment being out-of-bounds, however, it was with zero length. E.g.:

```
(module
  (table 0 anyfunc)
  (elem (i32.const 1))
)
```

In our impl there was no out-of-bounds, because there was no attempt to set any table entry.

This change adds early check for specifically this case.
2018-02-19 18:59:18 +03:00
Sergey Pepyakin 6cf6a31970
Merge signature mismatch traps (#57) 2018-02-14 18:27:22 +03:00
Sergey Pepyakin 07fbe31ec2
Add `instantiate` bin (#53)
This change adds a handy utility to test whether the given module deserializes, validates and instantiates successfully.
2018-02-14 13:36:27 +03:00
Sergey Pepyakin 435bae5898
Use wasmi ValueType for RuntimeValue instead pwasm (#52)
`RuntimeValue::default` takes `parity_wasm::elements::ValueType` as an input parameter. 

This change fixes it to be wasmi's `ValueType`.
2018-02-14 13:36:17 +03:00
Sergey Pepyakin 4e8d113f84
Remove old fixtures. (#54)
Remove all old test fixtures that migrated in this repo from the parity-wasm.

Also, use .wast files instead of compiled .wasm. I believe this is more convenient than testing a .wasm file and having a corresponding .wast file, which might go out of sync.
2018-02-14 13:33:24 +03:00
Sergey Pepyakin e5056e7871 Add newline in compile_error!
This doesn't change the actual message.
2018-02-13 18:17:38 +03:00
Sergey Pepyakin e273b9e40a Just bump framestack limits. (#50)
These limits seems to be picked arbitrary, and I just made it arbitrary larger.

We need to reconsider these limits, ideally providing to user a way to customize the limits.

FWIW, When the last time I've tried to run gcc's torture testsuite with wasmi it also bumped into this limit.

Fixes #41.
2018-02-13 09:29:04 +03:00
Sergey Pepyakin 483736b1bd
Memory units (#42)
* Initial implementation

* Not use grow as it is makes debug builds very slow

* Use Pages::BYTE_SIZE for LINEAR_MEMORY_PAGE_SIZE

* Tidy docs.

* Use memory_units from git.
2018-02-09 16:45:21 +03:00
Sergey Pepyakin a3ad4b0e49
Remove NATURAL_ALIGNMENT (#46) 2018-02-09 16:00:19 +03:00
Sergey Pepyakin 6e4bbb7490 Opt in for 32bit platforms (#44) 2018-02-09 11:20:21 +03:00
Sergey Pepyakin c0ed715b37
Update testsuite (#39)
* ok_or_else in stack + top_mut.

* Model polymorphic stack explicitly

* Upgrade wasm testsuite.

* Update fixtures.

* Validate duplicate exports.

* Fix and clean spec runner.

* with_capcity for HashSet
2018-02-08 17:52:16 +03:00
Sergey Pepyakin 528f468ef2 Minor fixes in docs (#38)
* Run nightly only if NIGHTLY_TOOLCHAIN is defined

* Minor fixes in docs.
2018-02-06 23:10:58 +03:00
Sergey Pepyakin 367f17989b Refine errors (#36)
* Get rid of Stack error

* Add UnexpectedSignature error and remove Value err

* Publish FuncInstance::invoke

* Rename Trap to TrapKind

* Replace Trap with struct. Enum is now TrapKind

* Fixes

* Update value.rs

* Avoid reversing parameter types iter.

* Add impl From<TrapKind> for Trap

* Remove redundant clone in prepare_function_args.

* Use .into() to convert TrapKind into Trap
2018-02-06 14:14:57 +03:00
Sergey Pepyakin 106ac7afdb Fix memory max pages (#33)
* Fix memory max pages

* Get rid of calculate_memory_size.
2018-02-02 00:44:06 +03:00
Sergey Pepyakin fa82dee676 Add docs (#32) 2018-02-01 19:46:33 +03:00
Sergey Pepyakin c96735d6d6 Wasm function can only trap (#29)
* Introduce Trap struct.

* get_local can't fail.

* Add MemoryOutOfBounds trap.

* from_little_endian use slice instead of vec.

* MemoryAccessOutOfBounds for mem get and set.

* from_little_endian conversion can't fail.

* call_indirect traps.

* DivisionByZero and InvalidConversionToInt

* Use traps in value to convey an error

* select: int condition on stack top

* if: int condition on stack top

* Assert pops.

* Another protions of assert pops

* Introduce ValueStack

Also, hide FunctionContext and remove some stale code

* Traps in execution

* Make it compile.

* Check args before invoke.

* Document RuntimeArgs.

* Update host.rs

* Add rustdoc for Trap.
2018-02-01 14:59:21 +03:00
Sergey Pepyakin 1d87fb09dc
Publish LINEAR_MEMORY_PAGE_SIZE constant (#31) 2018-02-01 14:46:49 +03:00
Sergey Pepyakin 551c992730
4th iteration on documentation (#22)
* Rename LoadedModule to Module

* Hide TryInto

* Fix rustdoc tests.

* Rename from_parity_wasm_module and doc it.

* Document `Module::from_buffer`

* Tidy Module docs

* Some rustdoc headers.

* Document FuncInstance::{alloc_host, signature}

* Document descriptors.

* Doc NotStartedModuleRef

* Fix cargo-deadlinks
2018-01-26 19:24:40 +03:00
Nikolay Volf aa4c8fe3bb Update to most recent parity-wasm (#21)
* Update to most recent parity-wasm

* fix validation
2018-01-26 18:35:12 +03:00
Sergey Pepyakin cc24d8a77a Fix idents 2018-01-25 19:56:52 +03:00
Sergey Pepyakin bc89a20b96 Third iteration on documenation. 2018-01-25 18:17:25 +03:00
Sergey Pepyakin 230abc6a91 Second iteration on documenation. 2018-01-24 18:58:22 +03:00
NikVolf 65f08eb44c allow static signatures 2018-01-24 14:14:24 +03:00
Nikolay Volf 429aaa2a4e
Merge pull request #11 from pepyakin/docs-1
First iteration on documentation.
2018-01-23 20:00:29 +03:00
Nikolay Volf 273eba2c45
Merge pull request #10 from pepyakin/couple-of-fixes
Couple of fixes
2018-01-23 19:42:17 +03:00
Nikolay Volf 7828d8cc56
Merge pull request #8 from pepyakin/error-sync-and-send
Make Error: Sync + Send
2018-01-23 19:40:39 +03:00
Sergey Pepyakin 41983cff0a First iteration on documentation. 2018-01-23 19:38:49 +03:00
Sergey Pepyakin a98852e62a Couple of fixes 2018-01-23 18:12:52 +03:00
Sergey Pepyakin c274459bab Make Error: Sync + Send 2018-01-23 16:57:09 +03:00
NikVolf 6b7144133f fix examples/tests with proper addressing 2018-01-23 16:40:34 +03:00
NikVolf 2133f782a4 fix doc comment 2018-01-23 14:43:09 +03:00
NikVolf d340b99016 fix build and address comments 2018-01-23 14:42:20 +03:00
NikVolf 4eb8608c1e rewire everything 2018-01-23 14:26:45 +03:00
NikVolf 559d529ece initial layout 2018-01-23 14:05:31 +03:00
Sergey Pepyakin 791292cd19 TODO about docs 2018-01-22 20:22:22 +03:00
Sergey Pepyakin bf2b2acbc5 Reintroduce FuncInstance; Hide internals 2018-01-22 20:07:30 +03:00
Sergey Pepyakin 730ff68599 FuncInstances hold WeakRef 2018-01-22 19:57:00 +03:00
Sergey Pepyakin 44f61251c1 Hide FuncInstance 2018-01-22 19:38:57 +03:00
Sergey Pepyakin e26ddb6d12 Hide MemoryType. 2018-01-22 16:34:32 +03:00
Sergey Pepyakin 973d58a643 Hide TableType. 2018-01-22 16:30:13 +03:00
Sergey Pepyakin b323d004fe Hide GlobalType 2018-01-22 16:23:07 +03:00
Sergey Pepyakin aae9a3c129 Hide validation stuff. 2018-01-22 16:11:20 +03:00
Sergey Pepyakin 469e9ef6b1 Get rid of invoke_index. 2018-01-18 17:15:11 +03:00
Sergey Pepyakin ca6299ba53 Hide ValueType. 2018-01-18 17:13:56 +03:00
Sergey Pepyakin 1bf3702440 Move Signature into types module. 2018-01-18 15:54:31 +03:00
Sergey Pepyakin e9470373f7 Migrate on Signature type. 2018-01-18 15:48:43 +03:00
Sergey Pepyakin 49347a63ee Initial commit 2018-01-17 19:54:06 +03:00