Ivan Kylchik
38f4e6e8bf
Implement interpretation of assert method
2021-06-07 15:34:42 +03:00
Ivan Kylchik
8617809528
Rename expression value parameter to declaration
2021-06-07 15:34:40 +03:00
Alexander Udalov
e6254b51e1
Rewrite generator for IrBuiltInsMapGenerated
...
Similarly to 742fef9042 with OperationsMapGenerated, use optimized
`when` over strings instead of lambdas because lambdas lead to a lot of
bytecode.
The change in `IrConst.toPrimitive` is needed because for operations
like `Byte.plus(Int)` the IrConst instance would have the IR type for
kotlin.Byte, but the actual runtime value of type Int
(java.lang.Integer), which would lead to CCE from
`interpretBinaryFunction`. Previously it didn't fail because of
unchecked cast before calling the lambda, which allowed a value of
runtime type java.lang.Integer to sneak through to the lambda parameter
and be "unboxed" to the correct type via the `(... as Number).toByte()`
conversion which backend generates.
The main benefit of this change is that it reduces the size of the
proguarded compiler jar by ~0.69%.
2021-06-07 15:34:39 +03:00
Ivan Kylchik
ac7a1c7762
Add new intrinsic handler for sourceLocation function
2021-06-07 15:34:38 +03:00
Ivan Kylchik
7fe776fe10
Simplify work with stack by adding additional newFrame method
2021-06-07 15:34:37 +03:00
Ivan Kylchik
d578aa0ec5
Pass irFile in interpreter method in IrConstTransformer
2021-06-07 15:34:35 +03:00
Ivan Kylchik
ec16c40bf4
Save right entry point for expression
2021-06-07 15:34:34 +03:00
Ivan Kylchik
9d9ab498aa
Remove typeArguments field in State interface
2021-06-07 15:34:33 +03:00
Ivan Kylchik
a10d88924f
Simplify getIrFunctionByIrCall method in KFunctionState
...
Removed check of invoke symbols equality. Without this check it is
possible to store init functions in KFunctionState
2021-06-07 15:34:32 +03:00
Ivan Kylchik
3d1d86e9cb
Change call method of KProperty1Proxy to invoke corresponding accessors
2021-06-07 15:34:30 +03:00
Ivan Kylchik
64d5cea337
Implement getter and setter for KPropertyProxy
2021-06-07 15:34:29 +03:00
Ivan Kylchik
f89b75e387
Implement interpretation of KParameter interface
2021-06-07 15:34:28 +03:00
Ivan Kylchik
a4edddaa6e
Extract all reflection state classes into separate files
2021-06-07 15:34:26 +03:00
Ivan Kylchik
aa321f2333
Move ReflectionState.kt into separate package "reflection"
2021-06-07 15:34:25 +03:00
Ivan Kylchik
5a95e5b45f
Implement interpretation for KType and KTypeParameter
2021-06-07 15:34:24 +03:00
Ivan Kylchik
88b5b5f702
Implement interpretation of KVisibility class
...
For now it is interpreted as Wrapper, but maybe further it will be
converted to Common
2021-06-07 15:34:23 +03:00
Ivan Kylchik
40bf4fafc9
Implement basic interpretation of IrClassReference
2021-06-07 15:34:22 +03:00
Ivan Kylchik
002804941f
Replace Lambda state with KFunctionState
2021-06-07 15:34:21 +03:00
Ivan Kylchik
749200d518
Fix constructor call checker
...
Forget to check constructor for availability of compile time annotation
2021-06-07 15:34:19 +03:00
Ivan Kylchik
41ea1525d1
Implement basic interpretation for KProperty
2021-06-07 15:34:18 +03:00
Ivan Kylchik
c3d0438405
Allow to interpret property reference
2021-06-07 15:34:16 +03:00
Ivan Kylchik
ac858f760a
Forbid vararg flattening in place there array was expected
2021-06-07 15:34:15 +03:00
Ivan Kylchik
8b2706aaee
Change interpretConstructor method to be able to init object single time
2021-06-07 15:34:13 +03:00
Ivan Kylchik
903e883809
Add additional type arguments to stack from super types
2021-06-07 15:34:12 +03:00
Ivan Kylchik
a9d686b9f9
Add outer object to stack when interpreting constructor of inner class
2021-06-07 15:34:11 +03:00
Ivan Kylchik
b570d3f7fd
Fix interpreter error related to recreating Unit object
2021-06-07 15:34:09 +03:00
Ivan Kylchik
b98f680d65
Fix interpreter error related to incorrect work of get value for objects
2021-06-07 15:34:08 +03:00
Ivan Kylchik
d931e2eead
Implement simple proxy for non interface structures like kotlin.Pair
2021-06-07 15:34:07 +03:00
Ivan Kylchik
1e5096294e
Implement proxy for custom interfaces
2021-06-07 15:34:06 +03:00
Ivan Kylchik
96a090f2ab
Implement LambdaProxy class
2021-06-07 15:34:04 +03:00
Ivan Kylchik
1d0acedc48
Rewrite Complex class as interface
...
This change allow ExceptionState to be both: State and Throwable
2021-06-07 15:34:03 +03:00
Ivan Kylchik
6808151af7
Remove method getOriginal from Complex class
...
Common class no longer contains Common super classes,
all fields are now inside one single object.
2021-06-07 15:34:02 +03:00
Ivan Kylchik
4c75576414
Implement basic proxy for Common state
...
For now proxy works only for Any class methods and only for Common
state.
2021-06-07 15:34:01 +03:00
Ivan Kylchik
3c0c8d97cc
Add possibility to interpret spread operator on unsigned arrays
2021-06-07 15:33:59 +03:00
Ivan Kylchik
ca231ccc53
Rethrow InterpreterTimeOutError as UserException
2021-06-07 15:33:58 +03:00
Ivan Kylchik
c23e8517b3
Fix type arguments saving for arrays
2021-06-07 15:33:57 +03:00
Ivan Kylchik
7ecf4b17b6
Change evaluation function for arrayOf
...
For now it will get only elements variable from stack instead of all
2021-06-07 15:33:56 +03:00
Ivan Kylchik
4010eb11bd
Implement method to calculate EQEQ ir builtin function
2021-06-07 15:33:54 +03:00
Ivan Kylchik
9b1f11b22b
Extend compile time checker to check constructors body
2021-06-07 15:33:53 +03:00
Ivan Kylchik
cc0bbac354
Support isSubtypeOf check for functional type
2021-06-07 15:33:52 +03:00
Ivan Kylchik
c1aa39065f
Add handler for setters in getIrFunction method
2021-06-07 15:33:49 +03:00
Ivan Kylchik
6a483a8464
Add simple handler for StackOverflowError in ir interpreter
2021-06-07 15:33:48 +03:00
Ivan Kylchik
f3d7dc5f22
Rewrite exceptions handler in ir interpreter
...
For now there are 2 types of exceptions:
1. UserExceptions - express user and jvm like exceptions
2. InterpreterError - thrown only if something is wrong with interpreter
2021-06-07 15:33:47 +03:00
Ivan Kylchik
c3b0c9c6b2
Support multiple nested try blocks
2021-06-07 15:33:46 +03:00
Ivan Kylchik
ad6ba0cf11
Support lateinit var interpretation
2021-06-07 15:33:45 +03:00
Ivan Kylchik
b45df06680
Forbid to interpret non const top level properties
2021-06-07 15:33:43 +03:00
Ivan Kylchik
393ad9ae9b
Fix compile time checker for get and set field expressions
2021-06-07 15:33:42 +03:00
Ivan Kylchik
a084dabdde
Return Unit value from block if statements count is equal to zero
2021-06-07 15:33:41 +03:00
Ivan Kylchik
13ab7eafca
Move out compile time function checker logic to EvaluationMode.kt
2021-06-07 15:33:40 +03:00
Ivan Kylchik
84e6e1e305
Add WITH_ANNOTATIONS evaluation mode
...
This mode means that function can be executed if it has
CompileTimeCalculation annotation. FULL mode for now will mean deep
check without annotation help
2021-06-07 15:33:39 +03:00