Ivan Kylchik
f2045b857b
Add fix for interpretation const val
...
After FIR2IR processing getter doesn't has body, but has initializer.
On the other hand common IR has body for const val getter
2020-06-24 16:12:59 +03:00
Ivan Kylchik
af6ed5ca43
Change toIrConst extension function logic
...
For now this function check not value, but type. By ir type it create
right ir const
2020-06-24 16:12:59 +03:00
Ivan Kylchik
3155f56d8a
Change the way of receiving fields
...
Before that, interpreted values for fields were taken by backing
field's symbol. For now, they will be taken by property's symbol.
It was done because not all properties contain backing field. For
example, Throwable class in FIR2IR.
2020-06-24 16:12:58 +03:00
Ivan Kylchik
8644c48b28
Prevent interpretation of call expression with continue/break statement
...
Example: foo("" + continue)
2020-06-24 16:12:58 +03:00
Ivan Kylchik
d90aba60cc
Implement correct type checks and casts taking into account erased types
2020-06-24 16:12:58 +03:00
Ivan Kylchik
7a19906705
Change all usages of descriptors in interpreter to usages of ir symbols
2020-06-24 16:12:58 +03:00
Ivan Kylchik
db5046af85
Add support in interpreter for jvm static fields in primitive classes
2020-06-24 16:12:58 +03:00
Ivan Kylchik
a3c77eca08
Make interpreter maps of enum and object declarations non static
...
Instead of this just create interpreter once per module handling
2020-06-24 16:12:58 +03:00
Ivan Kylchik
ff830cc744
Make state property mutable in Variable class
...
This change allow to remove copy method from State interface
2020-06-24 16:12:57 +03:00
Ivan Kylchik
848ca70de1
Change keys in static maps of enums and objects from String to IrSymbol
2020-06-24 16:12:57 +03:00
Ivan Kylchik
224d56ec15
Allow compile time calculations inside object declaration
2020-06-24 16:12:57 +03:00
Ivan Kylchik
1c498660dc
Create ir compile time checker
...
This checker is suppose to return true if ir node can be computed
in compile time
2020-06-24 16:12:57 +03:00
Ivan Kylchik
19495e40f7
Remove unnecessary getAllTypeArguments method from Stack class
2020-06-24 16:12:57 +03:00
Ivan Kylchik
99d823da8a
Remove unnecessary getThisAsReceiver function from Utils.kt file
2020-06-24 16:12:57 +03:00
Ivan Kylchik
c6240face0
Add test for generation builtins map for interpreter
2020-06-24 16:12:57 +03:00
Ivan Kylchik
1103de4bd5
Prepare ir interpreter for receiving ir bodies in separate map
...
This change will be useful when starts work with jvm klib
2020-06-24 16:12:56 +03:00
Ivan Kylchik
9542eb36ec
Support interpretation of String's plus method and its extension version
2020-06-24 16:12:56 +03:00
Ivan Kylchik
94e36411fa
Support interpretation for inner class
2020-06-24 16:12:56 +03:00
Ivan Kylchik
0c1f2edbf2
Get rid of abstract and fake override checks in ir call interpretation
...
For now interpreter will find necessary method for interpretation in
one step instead of checking is this method abstract or fake override
2020-06-24 16:12:56 +03:00
Ivan Kylchik
80d83f8703
Change check for Wrapper method
...
For now method is wrapper if its receiver is Wrapper and
method itself isn't inline only
2020-06-24 16:12:56 +03:00
Ivan Kylchik
38822c3bf8
Implement correct interpretation of toList function
2020-06-24 16:12:56 +03:00
Ivan Kylchik
ba8147cd47
Allow lambda to be used in built in calculation
...
Primary use case to allow lambda null check
2020-06-24 16:12:55 +03:00
Ivan Kylchik
5f61f6f3a5
Simplify interpretation for java methods with names other in kotlin
2020-06-24 16:12:55 +03:00
Ivan Kylchik
2e0d4c9af1
Add correct interpretation for unsigned arrays in vararg method handler
2020-06-24 16:12:55 +03:00
Ivan Kylchik
30f2affb93
Add support for local function that are declared and called immediately
2020-06-24 16:12:55 +03:00
Ivan Kylchik
296f343cab
Change conditions for saving type arguments into stack
...
For now all type arguments are saved. This is necessary for several
reason:
1. ir type operator call need to get right type argument class
2. if class is local then information about type argument cannot be lost
2020-06-24 16:12:55 +03:00
Ivan Kylchik
a095309e10
Allow local declaration interpretation
...
By local declaration is meant local functions and local objects
2020-06-24 16:12:55 +03:00
Ivan Kylchik
2c93c46b84
Implement do while loop
2020-06-24 16:12:55 +03:00
Ivan Kylchik
1e82975a7c
Replace explicit returnLabel call to check call inside try interpreter
2020-06-24 16:12:54 +03:00
Ivan Kylchik
a14e8e4c28
Implement cache for enum entries and objects
2020-06-24 16:12:54 +03:00
Ivan Kylchik
0b0550f562
Remove useless Intrinsic interface
...
Moved all its methods inside sealed class
2020-06-24 16:12:54 +03:00
Ivan Kylchik
eb3ac74c3f
Move out intrinsic evaluation from interpreter class
2020-06-24 16:12:54 +03:00
Ivan Kylchik
6eae77572a
Move stack trace inside Stack class
2020-06-24 16:12:54 +03:00
Ivan Kylchik
e00dc76645
Simplify constructor interpretation
...
Unified case with secondary and primary constructors
2020-06-24 16:12:53 +03:00
Ivan Kylchik
cf63a5f52b
Replace some casts to Primitive with corresponding extension calls
2020-06-24 16:12:53 +03:00
Ivan Kylchik
5791ecd4f7
Remove redundant suspend modifiers
2020-06-24 16:12:53 +03:00
Ivan Kylchik
cb0eb008f8
Implement correct access to stack
...
Rewrote work with data and implement Stack class that work over Frame
2020-06-24 16:12:53 +03:00
Ivan Kylchik
06e6c7cdf5
Implement interpretation for object with overridden methods
2020-06-24 16:12:53 +03:00
Ivan Kylchik
fe7abb7132
Remove unnecessary code about handling KotlinNullPointerException
...
This part of code was necessary because jvm threw
KotlinNullPointerException, but js expected NullPointerException.
2020-06-24 16:12:53 +03:00
Ivan Kylchik
2f41eef797
Replace throw of interpreter errors by throw of InterpreterException
2020-06-24 16:12:53 +03:00
Ivan Kylchik
aed78f3c9b
Bound commands limit and throw interpreter exception upon exceeding
2020-06-24 16:12:52 +03:00
Ivan Kylchik
be42ae470d
Simplify extraction logic of receiver in ir call interpreter
2020-06-24 16:12:52 +03:00
Ivan Kylchik
2189fe5796
Add suspend modifier to getNextLabel method in Label interface
2020-06-24 16:12:52 +03:00
Ivan Kylchik
fd51a9a085
Change signature in getArgsForMethodInvocation method
2020-06-24 16:12:52 +03:00
Ivan Kylchik
30e352ea27
Move Variable data class to separate file
2020-06-24 16:12:52 +03:00
Ivan Kylchik
ef4e4881b7
Implement spread operator interpretation
2020-06-24 16:12:52 +03:00
Ivan Kylchik
c9e5b6a234
Unify value arguments interpretation
2020-06-24 16:12:52 +03:00
Ivan Kylchik
520f2455b3
Create and implement ExecutionResult interface to use as return status
...
This is replacement for Code enum class that was returned from
methods of interpreter earlier
2020-06-24 16:12:51 +03:00
Ivan Kylchik
77978637a8
Move all classes from State.kt into separate files
2020-06-24 16:12:51 +03:00
Ivan Kylchik
530252eea8
Move State.kt in separate package
2020-06-24 16:12:51 +03:00