Commit Graph

1098 Commits

Author SHA1 Message Date
Alexey Andreev
16cd0aaab2 JS: introduce JS template engine to write runtime, rewrite several functions using this engine 2023-10-24 21:20:27 +02:00
Alexey Andreev
7acc81ce4d JS: remove lazy creation of primitive classes 2023-10-21 20:07:49 +02:00
Alexey Andreev
60d0b07f83 JS: refactor array implementation in native JS 2023-10-21 19:42:55 +02:00
Alexey Andreev
bb0d4a4fc6 JS: remove old polyfill 2023-10-21 19:30:16 +02:00
Alexey Andreev
02b3c92912 JS: use native string to represent internals of java.lang.String 2023-10-21 19:30:16 +02:00
Alexey Andreev
0e2052d91c C: fix compiler warning 2023-10-21 19:28:42 +02:00
Alexey Andreev
8b1732d442 JS: fix issue in minified mode 2023-10-17 19:13:14 +02:00
Alexey Andreev
a78eec93d6 metaprogramming: use unprocessed class source to get program templates
This should prevent class transformations from applying twice, which can cause some errors.
2023-10-17 07:55:01 +02:00
Alexey Andreev
cd9db17d73 JS: improve performance float<->int reinterpretation conversion, improve performance of Double.equals. 2023-10-16 17:27:12 +02:00
Alexey Andreev
5bc398415d classlib: implement Atomic*FieldUpdater classes
Fix #750
2023-10-15 19:51:44 +02:00
Alexey Andreev
70540b2df0 JS: fix UMD wrapper for case when 'exports' exists, but is null 2023-10-11 14:01:24 +02:00
Alexey Andreev
d33c491a33 Gradle: report build progress from build tasks 2023-10-10 19:01:24 +02:00
Alexey Andreev
3d65d38375 Massive refactoring around Wasm support
1. Get rid of old exception handling IR transformer in favor of generation of EH code inside BE
2. Get rid of no-setjmp/longjmp support in C BE
3. Fix various bugs in WebAssembly BE
4. Suppress remaining failing tests for Wasm
5. Enable running Wasm tests by default
2023-10-08 10:36:03 +02:00
Alexey Andreev
2c00df288f wasm: fix ServiceLoader 2023-10-02 14:05:25 +02:00
Alexey Andreev
7806a699c5 wasm: fixing debug C generator 2023-09-30 20:19:22 +02:00
Alexey Andreev
47973face1 Simplify test runner, remove parallel run, remove HtmlUnit runner, fix Wasm tests 2023-09-29 21:11:23 +02:00
Alexey Andreev
d4113a6744 classlib: improve Math min/max implementations in C and Wasm
Follow-up to ihromant's "fix Math min/max functions in JS"
2023-09-28 17:02:18 +02:00
Alexey Andreev
ab507bb22b wasm: fix bugs in coroutine support 2023-09-27 20:28:09 +02:00
Alexey Andreev
219de85e24 Improve performance of PhiUpdater 2023-09-27 19:36:02 +02:00
Alexey Andreev
7fd3166f9b wasm: support Date.toString 2023-09-27 14:30:20 +02:00
Alexey Andreev
348b71685d js: fix object id generator 2023-09-27 13:51:37 +02:00
Alexey Andreev
9c0e3b5e59 Remove unnecessary test file 2023-09-26 23:02:34 +02:00
Alexey Andreev
b7cf7b593c wasm: when building tests, resolve absolute paths to source files in DWARF 2023-09-26 23:02:16 +02:00
Alexey Andreev
e84a1a8531 wasm: fix raw conversion of float and double to int and long 2023-09-25 20:25:49 +02:00
Alexey Andreev
c2c1d78f13 wasm: fix issue in exception handling transformer 2023-09-25 20:25:49 +02:00
Alexey Andreev
fa2e003dd6 classlib: fix crash in WeakReference constructor
It occurred when ReferenceQueue.remove method was never used

Fix #756
2023-09-24 13:47:15 +02:00
Alexey Andreev
390861f835 wasm: fix producing programs with detached basic blocks 2023-09-22 21:26:34 +02:00
Alexey Andreev
98ec4597d6 Fix dominator tree algorithm 2023-09-22 21:26:34 +02:00
Alexey Andreev
1cd635afa5 Fix node splitting in irreducible CFG 2023-09-22 07:51:49 +02:00
Ivan Hetman
8277671376
classlib: make difference between raw and normal floating points to int conversion 2023-09-20 23:51:55 +03:00
Alexey Andreev
edf2d33f84 js: optimize long operations 2023-09-20 19:28:01 +02:00
Alexey Andreev
2e7e11292b C: implement Long.compareUnsigned 2023-09-19 11:34:50 +02:00
Alexey Andreev
e2ee9f1dbb classlib: improve precision of float/double parsing and formatting 2023-09-13 19:40:00 +02:00
Alexey Andreev
401fcabeae wasm: support ServiceLoader 2023-08-28 19:32:22 +02:00
Alexey Andreev
70d0658b47 wasm/c: fix bugs in coroutine transformation 2023-08-28 17:16:31 +02:00
Alexey Andreev
40c4f03e3b Coroutine transformation: minor improvements 2023-08-28 14:10:34 +02:00
Alexey Andreev
bd2d2cb49b wasm: fix exceptions in DWARF generator 2023-08-28 13:18:26 +02:00
Alexey Andreev
36060b37e3 wasm: another attempt to make class reference visible in chrome dev tools 2023-08-27 00:26:03 +02:00
Alexey Andreev
cacf09dca8 wasm: generate field description in DWARF 2023-08-26 20:48:29 +02:00
Alexey Andreev
fed6a2d0ef wasm: change language in DWARF from Java to C++
This is due to weird issue in lldb (from which Chrome dev tools
are derived), which does not parse DWARF functions if there's
no support for language "type system"
2023-08-25 20:43:34 +02:00
Alexey Andreev
e576a985dd wasm: don't generate separate declarations for methods in DWARF 2023-08-24 06:45:41 +02:00
Alexey Andreev
49485efdff wasm: fix line section in DWARF 2023-08-23 21:10:42 +02:00
Alexey Andreev
e3bbf12f49 wasm: use bulk memory operations when necessary 2023-08-22 17:13:06 +02:00
Alexey Andreev
e291128948 wasm: support Long.compareUnsigned 2023-08-22 17:11:26 +02:00
Alexey Andreev
f6131a8248 wasm: fix Array.get with enabled inlining 2023-08-22 17:11:04 +02:00
Alexey Andreev
9ecb3ad817 classlib: support ReferenceQueue.remove 2023-08-21 20:13:06 +02:00
Alexey Andreev
e9d206eed0 wasm: fix NPE 2023-08-19 17:10:53 +02:00
Alexey Andreev
0e7d6b65b4 wasm: add stats generator 2023-08-19 16:59:49 +02:00
Alexey Andreev
a7f115a541 classlib: implement Integer.compareUnsigned in Wasm and C 2023-08-18 17:55:01 +02:00
Alexey Andreev
22864c88f2 js: support WeakReference 2023-08-10 20:47:01 +02:00
Alexey Andreev
b9f5e9be1c JS: optimize case when JS method returns java.lang.Object and then treated as JS object 2023-08-04 20:40:57 +02:00
Alexey Andreev
334e2829b3 JS: supports module imports in JSBody 2023-08-03 15:42:15 +02:00
Alexey Andreev
a97e0ef45c JS: generate code in UMD wrapper (to be compatible with node.js, webpack, etc). 2023-08-01 20:11:32 +02:00
Alexey Andreev
059281a25c Fix issue in optimization 2023-07-31 19:29:41 +02:00
Alexey Andreev
ef2e887d06 Avoid duplicate application of class transformations 2023-07-31 13:21:33 +02:00
Alexey Andreev
948244cbf4 JS: marshall JS object to Java in a wrapper 2023-07-29 18:54:23 +02:00
Alexey Andreev
61eb666503 classlib: faster implementation of System.arraycopy 2023-07-19 21:11:27 +02:00
Alexey Andreev
b1ddf163d7 Don't crash when reporting some cases of missing standard APIs 2023-07-17 18:41:28 +02:00
Alexey Andreev
c39efdc6d7 classlib: fix issue with integer unsigned right shift 2023-05-16 09:56:24 +02:00
Alexey Andreev
b927b28e7d js: fix extracting exception message from Java 2023-04-11 13:42:28 +02:00
Alexey Andreev
79df39fca0 minor: remove unused fields 2023-04-03 17:19:13 +02:00
Alexey Andreev
a70251fe83 classlib: add Integer/Long.compareUnsigned 2023-03-25 09:37:44 +01:00
Alexey Andreev
ca76ea45cf Get rid of Gson library 2023-03-10 21:19:30 +01:00
Alexey Andreev
0f8d36a080 JS: display Java exception message in uncaught exceptions in console 2023-03-02 20:22:33 +01:00
Alexey Andreev
971fa9a1f3 Bump versions of dependencies 2023-02-24 19:55:35 +01:00
Alexey Andreev
4fdb05905d js: increase default top level name limit, since browsers now fixed issues in their dev tools 2023-02-18 08:14:28 +01:00
Alexey Andreev
f2ae748705 wasm: display inherited fields in debugger 2023-02-17 21:04:51 +01:00
Alexey Andreev
df7b3957e9 Fix issue in graph splitter
Fix #657
2023-02-17 20:42:27 +01:00
Alexey Andreev
900f95c1ed js: make names of variables in minified mode never interfering with JS keywords 2023-02-17 19:36:33 +01:00
Ivan Hetman
fdfd923ac6
Add info about Java 14 record to IR. Add support to Metaprogramming API 2023-02-11 23:05:07 +03:00
Alexey Andreev
8014c038c0 Migrate to gradle 2023-01-23 17:16:07 +01:00
Alexey Andreev
2a0f6f206e New IDEA module kind based on Gradle 2022-12-20 20:48:16 +01:00
Alexey Andreev
013ba237b0 Wasm: fix issues when building with debugging information and optimizations enabled 2022-12-20 18:01:38 +01:00
Alexey Andreev
9a9e7561b7 Wasm: support displaying objects in debugger 2022-12-20 10:01:47 +01:00
Alexey Andreev
7b3905246b Wasm: support class layout in debug information 2022-12-18 17:45:35 +01:00
Alexey Andreev
506a9bd8c5 Wasm: fix bugs in debugger 2022-12-15 17:27:14 +01:00
Alexey Andreev
6c91192794 Wasm: fix issues in debugger 2022-12-14 16:50:18 +01:00
Alexey Andreev
6808d9e517 Wasm: support local variables in debugger 2022-12-13 21:18:41 +01:00
Alexey Andreev
313e4ed87f Wasm: fix issues with debugger 2022-12-13 18:51:19 +01:00
Alexey Andreev
a6add26aaa Wasm: working on step-in and step-over in debugger 2022-12-09 19:13:20 +01:00
Alexey Andreev
87d63168d2 Wasm: working on control flow analyzer for debugger 2022-12-05 20:03:57 +01:00
Alexey Andreev
44204b952d Wasm: working on binary parser 2022-12-04 20:43:32 +01:00
Alexey Andreev
53dbb72c53 Wasm: working on binary parser 2022-12-02 21:35:07 +01:00
Alexey Andreev
aaed8e312a Wasm: working on parser 2022-12-02 18:07:56 +01:00
Alexey Andreev
b58dd1a37b Wasm: refactor debug info parser and fix debugger errors 2022-12-02 17:15:38 +01:00
Alexey Andreev
548ded7c75 Wasm: fix debug info generation 2022-12-02 07:49:07 +01:00
Alexey Andreev
57e0227a02 Wasm: trying to improve debug information emitter 2022-12-01 17:33:35 +01:00
Alexey Andreev
930a57fdd6 Wasm: fix compiler crash when compiling without debug info 2022-11-30 14:01:46 +01:00
Alexey Andreev
4453bba33b Wasm: fix issues in debugger 2022-11-30 13:38:34 +01:00
Alexey Andreev
a2715f2c79 Wasm: working on Chrome RDP debugger 2022-11-29 21:30:41 +01:00
Alexey Andreev
9d3927e196 Wasm: working on Chrome RDP debugger 2022-11-29 18:14:13 +01:00
Alexey Andreev
d1feec7ae6 Wasm: add parser for own debug information 2022-11-28 17:30:34 +01:00
Alexey Andreev
56929b2085 Wasm: generate debugging information for own debugger 2022-11-25 17:50:39 +01:00
Alexey Andreev
7e95e935d1 Wasm: write more info about classes in DWARF 2022-11-23 22:04:26 +01:00
Alexey Andreev
646c8ec488 Wasm: fix issue with forward references in DWARF, generate class references as pointer types 2022-11-23 11:20:07 +01:00
Alexey Andreev
f938db798b Wasm: add information about parameters and local variables to DWARF 2022-11-22 17:53:12 +01:00
Alexey Andreev
13cc56feb5 Wasm: split declarations and specifications of methods in DWARF 2022-11-21 16:00:27 +01:00
Alexey Andreev
8fac3237ba Wasm: generate nested DIEs for namespaces/classes/methods 2022-11-20 16:12:00 +01:00
Alexey Andreev
6222241651 Wasm: update loader to use instantiateStreaming method 2022-11-20 14:05:35 +01:00
Alexey Andreev
1399045ff6 Wasm: fix issues in DWARF generator 2022-11-20 08:42:32 +01:00
Alexey Andreev
7f38697d50 Wasm: don't emit DW_LNE_end_sequence when there were no previous command emitted 2022-11-19 20:15:54 +01:00
Alexey Andreev
f7768efd51 Wasm: fix bugs in DWARF generator, emit DW_LNE_end_sequence after each function 2022-11-19 15:14:21 +01:00
Alexey Andreev
06bcaec1e5 Wasm: emit simple DW_TAG_subprogram DIEs (however, no success with debuggers). 2022-11-19 13:00:52 +01:00
Alexey Andreev
f06ba832d7 Wasm: generate DWARF line numbers
Despite generated DWARF sections pass different verifications, they don't work in chrome or wasmtime.
2022-11-19 11:52:43 +01:00
Alexey Andreev
c5011ebf69 Wasm: initial skeleton implementation of DWARF generator 2022-11-18 22:07:23 +01:00
Alexey Andreev
a543b91b84 Wasm: fix error when parsing command line args 2022-11-17 16:35:28 +01:00
Alexey Andreev
238873cbe7 Apply Java 11 syntax 2022-11-17 14:36:55 +01:00
Alexey Andreev
06748fa12b Fix class initializer optimization.
Assume that class initializer is dynamic if it initializes another class with dynamic initializer
2022-11-17 14:35:37 +01:00
Alexey Andreev
df98b411d0 Wasm: fix issue with attempt to shrink heap after GC 2022-11-17 12:02:46 +01:00
Alexey Andreev
64ae44ee01 JS: store global object in a variable to avoid name clashes between generated declarations (in minified mode) and global declarations 2022-11-17 12:02:46 +01:00
Alexey Andreev
70e37dfed9 Wasi: fix bugs in IO implementation 2022-11-12 21:52:29 +01:00
Alexey Andreev
d9fb2bc159 Fix bugs in Wasi support. Fix GC issue in Wasm 2022-11-11 21:01:22 +01:00
Alexey Andreev
1b6acc9eb1 Update Java version to 11 2022-11-11 14:37:12 +01:00
Alexey Andreev
4a025f2605 Wasm: trying to revive GC debugger in wasm2c generator and implement emulation for WASI 2022-11-11 14:04:56 +01:00
Alexey Andreev
1fb70b0903 Fix private method call resolution in Java 11 2022-11-11 10:56:20 +01:00
Alexey Andreev
5fb83ca2ac Remove unnecessary Wasm runtime imports, implement isFinite method 2022-11-11 09:38:21 +01:00
Alexey Andreev
485f8ac902 Wasi: fix file system issues, add support for Math.pow 2022-11-10 17:08:58 +01:00
Alexey Andreev
224810d0ab Wasm: support file IO and random generator in WASI 2022-11-08 19:44:56 +01:00
Alexey Andreev
e428e2ac7a Wasm: implement file IO in WASI 2022-11-08 17:24:58 +01:00
Alexey Andreev
3eb4b742ea Move FS support to teavm-core module 2022-11-07 09:53:46 +01:00
Alexey Andreev
8f4e4e811f Wasm: don't emit wasm-runtime.js file in WASI mode 2022-11-06 21:41:09 +01:00
Alexey Andreev
34eb06f5f0 Wasm: support command line args in WASI 2022-11-06 21:21:49 +01:00
Alexey Andreev
1ca2c75e1c Wasm: initial WASI support 2022-11-06 11:53:52 +01:00
Alexey Andreev
d5cdd740f5 Fix incorrect behaviour of Class.getInterfaces
fix #635
2022-11-04 16:15:30 +01:00
Alexey Andreev
752ec040b0 Wasm: fix resource files getting into garbage collection metadata 2022-11-04 14:48:53 +01:00
Alexey Andreev
6c6d440ebb С/wasm: don't include references metadata resource into GC stack roots and into class layout for GC. 2022-11-01 09:38:10 +01:00
Alexey Andreev
d097350787 Bump ASM version, use common ASM API version everywhere, bump ASM API version to 9 2022-10-05 11:09:53 +02:00
Alexey Andreev
2b671b8088 Fix issue with precedence of % operator 2022-08-25 12:48:59 +02:00
Alexey Andreev
ddddfcf217 Add option to disable assertions 2022-07-15 19:51:47 +03:00
Alexey Andreev
f0d805fda8 Support Java 17 records 2022-07-10 20:40:24 +03:00
Alexey Andreev
29fd95be95 Fix bugs related to MULTINEWARRAY in various backends 2022-07-10 18:16:16 +03:00
Alexey Andreev
b03518c493 Remove unnecessary hppc artifact versions from pom.xml 2022-06-01 17:25:33 +03:00
Alexey Andreev
98490e92f6 JS: fix strict mode null pointer check with inlining 2022-05-19 12:24:02 +03:00
Alexey Andreev
be259f1667 Fix false negatives when checking missing methods 2022-05-19 10:25:40 +03:00
Alexey Andreev
31f91bc63c C: fix overlapping file names 2022-05-16 11:59:25 +03:00
Alexey Andreev
5e37e2a45b Fix reporting missing static field if containing class is never referenced directly 2022-03-25 10:27:15 +03:00
Alexey Andreev
ce5e3bfeb7 C/Wasm: fix issue in GC 2021-12-16 18:39:26 +03:00
Alexey Andreev
15466bad93 C: fix heap dump generator 2021-12-16 14:54:23 +03:00
Alexey Andreev
1fa48560c6 C: add option to generate shorter output file names to workaround msvc bug 2021-12-10 18:51:12 +03:00
Alexey Andreev
08aa642fe5 C: prevent from casting to native function type 2021-08-31 15:11:17 +03:00
Alexey Andreev
c2f90d3cfc fix ClassInference for arrays 2021-08-30 17:53:14 +03:00
Alexey Andreev
c65a9e1c97 Fix bug in irreducible graph splitting algorithm 2021-07-15 19:17:11 +03:00
Alexey Andreev
220537d984 C: fix behaviour of nested try/catch statements 2021-04-15 20:55:52 +03:00
Alexey Andreev
73bd139b7e C: implement ServiceLoader 2021-04-14 23:02:09 +03:00
Alexey Andreev
4a62b58f82 Bug fixes in optimizer 2021-04-02 19:54:38 +03:00
Alexey Andreev
7058a195b7 JS: fix class of object created by multianewarray instruction 2021-04-01 12:05:18 +03:00
Alexey Andreev
c89bc11d02 Fix dominator tree builder, make it possible to choose starting node 2021-04-01 09:29:18 +03:00
Alexey Andreev
d710870c65 Fix possible NPE 2021-03-31 12:53:12 +03:00
Alexey Andreev
9972fe0c29 Rewrite node splitting algorithm 2021-03-30 12:07:14 +03:00
Alexey Andreev
b34e25414e C: fix support for resources 2021-03-24 18:52:54 +03:00
Alexey Andreev
00fba54d7b C: fix exception handling semantics with longjmp 2021-03-24 17:30:49 +03:00
Alexey Andreev
bb4315e486 C: fix missing files when casting to arrays 2021-03-24 16:09:01 +03:00
Alexey Andreev
6de830d5bd wasm: fix initialization order of system classes 2021-03-22 23:22:34 +03:00
Alexey Andreev
f2bac088f1 Fix more complex cases of irreducible CFGs during coroutine transformation 2021-03-22 22:09:41 +03:00
Alexey Andreev
9df897d298 Fix coroutine transformation. Make emulated threads work in Wasm 2021-03-22 21:28:50 +03:00
Alexey Andreev
eb495182d2 JS: fix runtime for Safari 2021-03-22 15:13:40 +03:00
Alexey Andreev
38cbd7e80b JS: fix async methods 2021-03-22 14:17:50 +03:00
Alexey Andreev
d6780ea637 Fix bug in global value numbering optimization 2021-03-22 14:17:50 +03:00
Alexey Andreev
bd53c1a5a2 wasm: trying to implement coroutines 2021-03-21 22:13:09 +03:00
Alexey Andreev
c4c1408160 wasm: fix running tests, add in-browser test runners 2021-03-20 19:52:45 +03:00
Alexey Andreev
b2b7a603b4 JS: fix array optimization 2021-03-19 14:16:29 +03:00
Alexey Andreev
75d06bebbf JS: fix bug in compilation of monitorenter instruction 2021-03-18 14:20:29 +03:00
JohannesS
f97484365c JS: fix overrides with default methods 2021-03-18 12:26:33 +03:00
Alexey Andreev
81bfe3f6e2 Improve pom.xml configuration 2021-03-18 11:16:41 +03:00
Alexey Andreev
2c7b5be62e JS: fix long emulation in JS engines that don't support BigInt 2021-03-18 10:14:18 +03:00
Alexey Andreev
3779520389 C: fix after introducing CCE support 2021-03-18 01:03:01 +03:00
Alexey Andreev
67c639b875 JS: fix stack trace decoder with new CCE support 2021-03-17 21:49:06 +03:00
Alexey Andreev
4c0c7872a1 JS: add support for CCE in strict mode 2021-03-17 21:11:18 +03:00
Alexey Andreev
02e8955abc JS: fix overflow behaviour of unary minus 2021-03-17 10:16:07 +03:00
Alexey Andreev
71f87d79a5 JUnit: add support for TestNG annotations 2021-03-16 21:47:05 +03:00
Alexey Andreev
40ecb0938d Fix issue with BigInt64Array in Safari 2021-03-12 19:13:29 +03:00
Alexey Andreev
35f025d7da JS: fix bug in fallback long implementation 2021-03-10 16:22:19 +03:00
Alexey Andreev
ca23da939a JS: represent long as BigInt if available 2021-03-08 22:59:45 +03:00
Alexey Andreev
e4c808c324 Add switch to log devirtualization process 2021-02-26 12:26:13 +03:00
Alexey Andreev
0eca9d95e1 Fix missing virtual call detector 2021-02-26 11:52:10 +03:00
Alexey Andreev
d1fa57210e Copy parameter annotations when renaming a class 2021-02-01 14:41:18 +03:00
Alexey Andreev
969ad17b6a C: workaround for regression in MSVC compiler 2020-11-27 18:54:24 +03:00
Octavia Togami
a8641de39b
Correct problem severity for warning 2020-11-26 14:59:13 +03:00
Alexey Andreev
306c78459c JS: use symbol instead of string property to represent Java exception wrapper 2020-09-09 19:28:32 +03:00
Alexey Andreev
17098495f2 JS: fix compilation of class files that contain methods and field names containing non-identifier characters 2020-07-06 12:11:17 +03:00
Alexey Andreev
9cf21825fc Fix wrong evaluation when optimizer sees array initialization that looks like array initializer expression, but has access to array variable on its elements, i.e. on a case like this:
Object[] array = new Object[1];
array[0] = array;

That can't be optimized to

Object[] array = new Object[] { array };
2020-06-16 19:24:45 +03:00
Alexey Andreev
5ee332c771 Fix crash when lambda is not used. Fix #500 2020-06-01 12:19:37 +03:00
Alexey Andreev
6f7c2dff2b Fix copying source files in simple optimization mode. Fix #501 2020-06-01 12:07:42 +03:00
Alexey Andreev
ecc4be2d25 Fix class initialization optimization 2020-05-19 13:27:26 +03:00
Alexey Andreev
eebe16157b C: further workaround for msvc bug 2020-05-19 09:56:47 +03:00
Alexey Andreev
8f68c64193 Fix bug in repeated field read elimination.
There's a case that was missing in this optimization. We install invalidation
points on a block's dominance frontiers when the block contains som
invalidation instructions. However, if a block is an entry to exception
handler, state is always invalidated. This should be done
since exception handler may recover and proceed with some code that
follows try/catch block. Without this change code after try/catch inherits
state of `try` block, which is invalid, since `catch` is another
source from where we can get there. We can't rely on regular instruction
analysis in `catch` blocks, since we get into `catch` from an unpredictable
point.
2020-05-18 17:24:21 +03:00
Alexey Andreev
333ee95604 C: in addition to deece78dec
Fix generation of heap dump metadata
2020-05-15 18:05:50 +03:00
Alexey Andreev
deece78dec C: workaround msvc C1054 error while compiling virtual table initializers of classes with deep inheritance hierarchy 2020-05-15 17:55:26 +03:00
Alexey Andreev
862e9b846f Exclude all classes from underlying JDK 2020-05-14 16:59:21 +03:00
Alexey Andreev
6a4da94f2e Get rid of irreducible CFGs in input bytecode 2020-05-14 16:18:33 +03:00
Alexey Andreev
4284bb2a6c C: fix naming when bytecode contains method names with special characters 2020-05-14 14:31:48 +03:00
Alexey Andreev
7313b2bb62 Don't fail on environments that miss console object in global scope 2020-04-30 16:06:54 +03:00
Alexey Andreev
1232f20ae4 Add protection against exception fall though one Java machine running another Java machine.
When one TeaVM program calls `eval` and code passed to eval is itself generated
with TeaVM, the inner code can throw uncaught Java exception. The outer code could
try to catch this exception as a native JavaScript exception, but this is not possible,
since the exception is marked as Java exception, and inner scripts's Java class
does not inherit java.lang.Throwable of outer script. The solution for each script
to generate own tag (Symbol) and only treat JS exception as Java exception when
this exception has this tag.
2020-04-30 16:05:24 +03:00
Alexey Andreev
a9e7e51c51 Properly support non-ASCII characters in System.out and System.err 2020-04-30 14:49:33 +03:00
Adam J Ryan
e0fc5d834b Add ability to fine tune transpiler class substitutions. 2020-04-01 19:32:34 +03:00
Alexey Andreev
a152a28a2d C: fix bug in array initializers 2020-03-04 11:37:04 +03:00
Alexey Andreev
37f07b80c3 JS: generate shorter names for Long operations and array creation in minified mode 2020-03-04 13:23:19 +03:00
Alexey Andreev
3ff05d1c5d Eliminate redundant try/catches in generated bytecode for enums 2020-03-04 12:14:25 +03:00
Alexey Andreev
37e6ca3e17 Recognize array initialization pattern in bytecode and translate it to array initializer in target platform 2020-03-03 18:34:48 +03:00
Alexey Andreev
2ad5baaccc JS: don't write single return statement 2020-03-03 15:01:33 +03:00
Alexey Andreev
eb3490dba0 Improve inlining 2020-03-03 14:34:27 +03:00
Alexey Andreev
146776ff55 JS: reduce size of declaration of classes without fields 2020-03-03 12:47:06 +03:00
Alexey Andreev
c1891a1908 Further work on decreasing generated code size 2020-03-03 12:17:39 +03:00
Alexey Andreev
ea1134d66b Trying to reduce number of classes for which name is provided in their metadata 2020-03-02 16:36:09 +03:00
Alexey Andreev
81235ac714 JS: reduce size of wrapped virtual methods 2020-03-02 11:50:45 +03:00
Alexey Andreev
8d1eb3fcc6 Better optimization of <clinit> when reading other's class static final fields 2020-03-02 11:23:58 +03:00
Alexey Andreev
2f95045345 Improve optimization of unused methods that were inlined on every usage 2020-02-28 14:42:51 +03:00
Alexey Andreev
150a613709 C/Wasm: trying to fix GC (again) 2020-02-26 14:51:40 +03:00
Alexey Andreev
84aa50e7eb C/Wasm: trying to fix GC 2020-02-26 14:38:01 +03:00
Alexey Andreev
0e7c1e5ef9 Wasm: don't generate class metadata if it's not used. Don't generate names and call site metadata in minified mode 2020-02-21 17:29:31 +03:00
Alexey Andreev
3f2c52000f Wasm: support null checks and array bound checks 2020-02-21 16:32:45 +03:00
Alexey Andreev
c35861610f Wasm: support null checks and array bound checks 2020-02-21 16:32:00 +03:00
Alexey Andreev
7d95c0fb04 Wasm: fix GC 2020-02-21 16:22:25 +03:00
Alexey Andreev
d76eeb9be3 Improve <clinit> elimination. Improve inlining in ADVANCED optimization mode 2020-02-14 12:46:57 +03:00
Alexey Andreev
fecdd6613a Use tab character to indent stack traces 2020-02-14 10:39:50 +03:00
Alexey Andreev
289bfc9488 C: fix Function.get when getting function from different class 2020-02-10 19:52:17 +03:00
Alexey Andreev
a414a7979c Fix NPE 2020-02-10 17:08:25 +03:00
Alexey Andreev
3b1dae4412 Fix <clinit> elimination in case of native methods 2020-02-10 16:37:32 +03:00
Alexey Andreev
8cba925a89 C: fix bug in deobfuscator 2020-02-04 17:37:00 +03:00
Alexey Andreev
f4ec4872c5 C: fix crash when creating stack trace triggers GC 2020-02-04 14:25:22 +03:00
Alexey Andreev
45d36eac83 C: fix crash on GC when there are queued WeakReference instances in the heap
When performing young GC, we can encounter some WeakReferences which get into
corresponding ReferenceQueue. In this case queue internal state will be updated.
After it defragmentation phase runs which updates references to relocated objects.
For performance reason, defragmentation phase scans only regions either
marked with write barriers or regions that contain surviving objects in
young generation. However, sometimes a queue can be in neither of these sets,
so we additionally mark regions containing all affected queues.
2020-01-31 18:23:50 +03:00
Alexey Andreev
374f7c6634 C: allow to define custom logging functions. Use unified logging function within VM 2020-01-30 18:18:16 +03:00
Alexey Andreev
f13a7e6375 C: fix Strings.fromC/fromC16 methods 2020-01-30 15:41:37 +03:00
Alexey Andreev
7a2cd6ae4f Fix more bugs in devirtualization 2020-01-24 16:23:28 +03:00
Alexey Andreev
2d2ef642a3 Fix virtual method resolution in code server mode 2020-01-23 19:03:47 +03:00
Alexey Andreev
c53a563e96 Fix bug in devirtualization while inlining 2020-01-23 15:53:11 +03:00
Alexey Andreev
4776bebe8e C/Wasm: fix incorrect removal of GC root in optimizer 2020-01-22 17:16:44 +03:00
Alexey Andreev
a35a10bbc6 Reduce GC region size 2020-01-22 13:15:57 +03:00
Alexey Andreev
1ac0f7156c C/Wasm: fix OOME from compiled application 2020-01-22 13:15:57 +03:00
adamjryan
34aed76714 Add write replace method to lambdas that implement java.io.Serializable (#453)
Add write replace method to lambdas that implement java.io.Serializable

* Peripheral java library classes added as part of the toString method
of SerializedLambda to align functionality with the standard library.
* Test added that checks the SerializedLambda can be returned and that
it is populated with the correct values including it's toString method.
2020-01-15 11:11:48 +03:00
Alexey Andreev
9d0a53175a Do not insert GC write barriers when value assigned to field is known to be null or constant literal 2019-12-05 15:36:32 +03:00
Alexey Andreev
72fc62f082 Fix bug that causes heap to grow without need 2019-12-05 15:07:18 +03:00
Alexey Andreev
a7df41d41d Fix debugging when script is included with additional query string 2019-12-04 15:28:40 +03:00
Alexey Andreev
e147a998e5 Remove performance optimization that causes bug when modifying class hierarchy within class transformers 2019-12-04 12:41:41 +03:00
Alexey Andreev
16f4d2571b Support generations in GC 2019-12-03 12:10:55 +03:00
Alexey Andreev
d71aec7c40 Fix bug when boxing primitive value inside lambda to supertype (e.g. java.lang.Object) of corresponding wrapper type 2019-11-18 12:34:55 +03:00
Alexey Andreev
631111bdb3 Fix potential NPEs in compiler and native runtime 2019-11-18 11:24:47 +03:00
Alexey Andreev
099b9c5827 C: add stack trace deobfuscation tool 2019-11-06 14:02:56 +03:00
Alexey Andreev
e164015bfa C: another fix for GC when passing strings from native to Java 2019-11-06 11:19:02 +03:00
Alexey Andreev
3335b86619 C: fix exception when marshalling string from native code to Java and GC is triggered 2019-11-05 18:14:09 +03:00
Alexey Andreev
c05f40cc6a C: improve performance of heap dump to hprof converter 2019-11-05 14:01:56 +03:00
Alexey Andreev
9bdec1fdb2 C: fix the way how UWP env is detected in preprocessor 2019-10-31 14:37:49 +03:00
Alexey Andreev
fb78377db8 Fix various issues reported by PVS Studio and LGTM 2019-10-31 14:36:37 +03:00
Alexey Andreev
beef9e09ca C: fix bug in exception handling 2019-10-31 14:18:29 +03:00
Alexey Andreev
81cc3c156e Add optimization that eliminates repeated access to fields 2019-10-30 16:09:17 +03:00
Alexey Andreev
511160935f C: add missing include 2019-10-30 16:08:11 +03:00
Alexey Andreev
2bfc5b5305 JS: fix error in strict mode when NPE is never instantiated directly 2019-10-30 15:40:28 +03:00
Alexey Andreev
6bfbd38e22 Fix bug in decompiler that causes expression statement containing || or && with side effects to be removed 2019-10-30 13:38:47 +03:00
Alexey Andreev
15be89a758 JS: fix source map generation in some cases 2019-10-28 14:33:53 +03:00
Alexey Andreev
6ed00f1af2 C/Wasm: fix heap corruption when GC hits on initializing stack trace of exception 2019-10-28 13:59:03 +03:00