Commit Graph

182 Commits

Author SHA1 Message Date
7478c8a0d3 Initial implementation of 'instanceof'
Works like an assignability check for now / does not yet honor nullables.
2018-06-07 17:04:41 +02:00
cea69a6de1 Unify operator overloading and reuse arguments where possible; Update Binaryen; Update dist files 2018-06-05 23:09:08 +02:00
567a5fb064 Implement unary operator overloads (#124) 2018-06-04 17:23:09 +02:00
f69bccfe09 Add @operator.binary, @operator.prefix, @operator.postfix decorators for #124 2018-06-01 14:17:27 +02:00
9d25f78fc1 Implement 'this' context parsing and serialization; Other minor improvements 2018-05-30 16:22:56 +02:00
d0244a9b0f Add an error for missing initializers on default params, fixes #121; Fix detection of terminated switch cases and improve tests, fixes #122 2018-05-27 12:24:16 +02:00
7ad13f9d65 Add a 'call_indirect' builtin to emit arbitrary calls (might trap at runtime); Optimize 'for' loop compilation a bit 2018-05-25 15:59:17 +02:00
829af2285c Fix continue labels in 'for' loops skipping the incrementor 2018-05-23 11:32:12 +02:00
6c0a5c47d9 Update Binaryen and take care of WebAssembly/binaryen#1547 2018-05-14 16:55:55 +02:00
e415377cda Avoid trampolines where optional arguments are constant literals, see #102; Fix temporary local flags not being cleared; Fix inlined temporary locals not being free'd; Fix inlined flows not breaking after returns; Allow changetype of u32s, i.e. function pointers 2018-05-11 16:31:56 +02:00
ef9b43740d Eliminate leftover temporary function types using latest Binaryen 2018-05-09 16:33:42 +02:00
1f3bb61fae Fix issues with more than 64 locals, see #99 2018-05-08 22:16:12 +02:00
27f0621ee9 Add support for the 'mutable-global' proposal behind a feature flag 2018-05-08 09:27:56 +02:00
1bf0ca6525 Add a mechanism to enable additional (experimental) features and start with sign extension operations; Hashing experimentation 2018-05-08 00:36:19 +02:00
25a1f6230a Suppress some unnecessary blocks and nops; Fix compilation of always 'break'ing 'do's 2018-05-06 05:46:35 +02:00
50f6c1c460 Update internal ABI to zero/sign-extend where necessary only (#87) 2018-05-06 00:00:54 +02:00
ce2bf00d62 Fix crash when assigning to bool class fields (#95)
With `Type.bool`, size is 1, so dividing by 8 isn't the right way to convert to byteSize. Instead, we need to use the `byteSize` property that does the proper ceiling division.
2018-05-05 23:54:39 +02:00
8b5d1d7f74 Minor refactoring; Fix n-body TS build 2018-04-28 18:07:20 +02:00
6d6d1dddcf Improve inlining where locals can be aliased; Add a crude mechanism for explicit unchecked array accesses
The `unchecked` builtin should be handled with ultimate care and it would be a lot better if there'd be a mechanism doing this automatically.
2018-04-25 05:04:35 +02:00
391db28fe2 Always try to eliminate branches if tree-shaking is enabled 2018-04-24 23:11:11 +02:00
de98a19eb8 Implement dynamic array literals 2018-04-23 22:49:04 +02:00
88b00c1689 Use the element type annotated on the setter when doing indexed sets 2018-04-23 16:17:33 +02:00
05117f9ee3 Make sure that contextual type arguments are passed when resolving the target of a new expression; Fix decoding of UTF8 strings with more than two code units in the Binaryen interface 2018-04-22 00:17:14 +02:00
350befee9b Also compile the constructor if a class is exported 2018-04-19 02:58:04 +02:00
5a2f834c0d Fix game-of-life example inconsistencies; Fix ternary expression issues in void contexts and variable statements; Simplify HEAP_BASE handling 2018-04-18 15:12:33 +02:00
4026c087fd Export the trampoline and provide a helper for functions that take optional arguments 2018-04-17 16:04:29 +02:00
4929fca363 Move some numeric builtins to stdlib; Minor refactoring 2018-04-17 02:50:38 +02:00
81223977d0 Fix external names of class exports and similar; Support a few more kinds in TSDBuilder, see #74 2018-04-15 00:34:19 +02:00
ee73a4d28f Initial type parameter inference, see #61
This catches the most common cases but doesn't yet implement inference involving the return type because some prequesites are not yet in place (see test case).
2018-04-13 12:25:27 +02:00
623597c23a Make the transition to ArrayBuffer backed Arrays (#70)
* Traverse base classes when resolving overloads
* Implement preliminary TypedArray accessors
* Extract decorator flags from common flags to make space
* Add '**' overload
* Implement basic explicit inlining
* Support inlining of instance methods
* Reduce number of required locals when inlining
* Implement inlining of operator overloads
* Fix issues when inlining generic functions
2018-04-11 23:35:19 +02:00
8770f7b548 New ArrayBuffer/TypedArray; Stdlib restructure; Fix importing stdlib in stdlib; Traverse constructors; Allow initialization of readonly instance fields in constructors 2018-04-07 03:27:22 +02:00
26601dcfb1 Make '===' and '!==' ignore operator overloads
While not semantically equivalent with JS semantics, this appears to be the right thing to do in AS. Also avoids using changetype just for this purpose, which will eventually become considered unsafe.
2018-04-05 02:42:12 +02:00
7e90ab161d Simplify resolve infrastructure; Fix handling of nested element and property accesses 2018-04-05 02:23:03 +02:00
37825fc84d Implement comparision operator overloads (#63) 2018-04-04 00:01:59 +02:00
5823e35f37 Progress and a tiny WASM binary parser 2018-04-03 23:56:48 +02:00
06198a3723 Rename lib prefix to '~lib' (parens aren't valid); Add built-in alignof<T>; Prepare for ArrayBufferView 2018-04-02 19:05:26 +02:00
6ff69394f0 Minor cleanup 2018-03-31 18:18:55 +02:00
164f134053 Even more math (#56)
Remaining implementations of JavaScript's Math functions (except sin/cos/tan), both double (Math) and single (Mathf) precision, ported from musl incl. tests from libc-test, plus some changes to match JS semantics. Also binds fmod to `%` and pow to `**`.
2018-03-30 17:25:54 +02:00
792202ac5a Add an option to alias global objects
This for example allows to switch the default 'Math' implementation a program will use. Uses 'NativeMath' by default.
2018-03-26 16:54:25 +02:00
e75d006d26 Implement Math/Mathf.pow 2018-03-26 03:50:06 +02:00
70d2a0a425 Add more operator overloads + tests (#55)
* operator '-'
* operator '*'
* operator '/'
* operator '%'
* operator '&'
* operator '|'
* operator '^'
2018-03-25 13:14:53 +02:00
38a025950e Support parameter properties; Minor formatting 2018-03-25 00:21:58 +01:00
c80bf35747 Move fmod/fmodf to builtins and bind them to the '%' operator 2018-03-24 18:39:20 +01:00
721d77012b Math scaffolding 2018-03-24 17:18:15 +01:00
19a616dd96 Support indirect calls with omitted arguments 2018-03-24 09:46:22 +01:00
664f2a1c0d Add offsetof<T> builtin; Put a function's trampoline into the function table if a it has optional parameters; TypedArray scaffolding 2018-03-24 00:38:49 +01:00
ec5bb7ad51 Export function table by default and add an option to import it 2018-03-23 15:12:03 +01:00
2738eee9cd Call trampolines with the actual number of provided operands
When calling indirectly, the number of required operands might not be known at compile time and providing the actual number of operands instead solves this.
2018-03-23 15:00:09 +01:00
4adb69f73a Binary expression operator overloads for +/==; Check allocation flow in ternary expressions; Cache empty array buffers; Sealed decorator for non-derivable internals 2018-03-23 12:45:29 +01:00
9cc0fcd611 Initial ArrayBuffer implementation; Conditional allocation within constructors; Explicit constructor return values 2018-03-23 01:47:01 +01:00