Commit Graph

3043 Commits

Author SHA1 Message Date
Dmitry Petrov 5709826096 Refactoring.
'if' expressions (represented as 'when' without subject).
2016-10-18 09:08:16 +03:00
Dmitry Petrov 1ddf889d8a Comparisons:
- for primitive types and kotlin.String, use IrBinaryOperatorExpression
- for others, use call to 'compareTo'
2016-10-18 09:08:16 +03:00
Dmitry Petrov ace98b91cc Handle infix function calls in binary expressions. 2016-10-18 09:08:16 +03:00
Dmitry Petrov 3614b0a06c Generate IMPLICIT_NOTNULL for (nullability flexible type) -> (non-null type) implicit conversion. 2016-10-18 09:08:15 +03:00
Dmitry Petrov 2b6171057e Fix type of increment/decrement for array element.
Minor cleanup.
2016-10-18 09:08:15 +03:00
Dmitry Petrov 64d630faa3 Detailed "operator" convention information (for JS). 2016-10-18 09:08:14 +03:00
Dmitry Petrov 4a62a6b7c3 Prefix increment / decrement.
Refactor IrLValue.
2016-10-18 09:08:14 +03:00
Dmitry Petrov 68cdcfa853 Minor: assertion in IrSingleExpressionValue to ensure that corresponding expression is detached and instantiated once. 2016-10-18 09:08:13 +03:00
Dmitry Petrov 8de21aadfa '?:' (currently represented as binary expression with operator ELVIS) 2016-10-18 09:08:13 +03:00
Dmitry Petrov 0d94c3aeb4 'in' and '!in' operators. 2016-10-18 09:08:12 +03:00
Dmitry Petrov 96e3c52878 Equality and identity operators. 2016-10-18 09:08:12 +03:00
Dmitry Petrov db5843adc8 Desugar comparison operators as IrBinaryOperatorExpression.
They are not exactly 'compareTo' calls (although annotated with a related 'compareTo' function),
and require special treatment in BEs.
2016-10-18 09:08:11 +03:00
Dmitry Petrov 1b018a6ead Desugar basic binary operators (+, -, *, /, %, ..).
Fold String.plus calls to IrStringConcatenationExpression.
2016-10-18 09:08:11 +03:00
Dmitry Petrov 287d804131 Rematerialize simple expressions (local variables, literals, $this, $receiver) when generating calls. 2016-10-18 09:08:11 +03:00
Dmitry Petrov c1583c4368 Complex augmented assignment test.
Fix string literal creation for empty string template.
2016-10-18 09:08:10 +03:00
Dmitry Petrov 64d7a97145 IR, testing framework: if no tree labels were provided in source file, use default golden file. 2016-10-18 09:08:10 +03:00
Dmitry Petrov aee83f5a77 Minor: IrIndexedLValue can use IrExpression's, since its subexpressions should be evaluated once. 2016-10-18 09:08:09 +03:00
Dmitry Petrov 888b1685ed Introduce name hints for temporary variables.
Split IrValue.kt into a subpackage.
2016-10-18 09:08:09 +03:00
Dmitry Petrov 177acaabf5 Refactor top-down generation. 2016-10-18 09:08:08 +03:00
Dmitry Petrov 278dc14124 IrSingleExpressionValue 2016-10-18 09:08:08 +03:00
Dmitry Petrov d7412c449e IR: augmented assignment for array access expressions 2016-10-18 09:08:07 +03:00
Dmitry Petrov 0a57eb8ea4 IR:
- smart casts handling separated from expression generation
- improved infrastructure for desugaring
2016-10-18 09:08:07 +03:00
Dmitry Petrov ecf6ab9e25 IR:
- Redo smart casts handling (yet again).
Front-end typing information can't be used for expressions in IR,
since it provides inferred type for PSI expressions for the last corresponding resoled call.

- Assignments handling, initial implementation.
2016-10-18 09:08:07 +03:00
Dmitry Petrov c4bbcadb34 IR: Collapse desugared blocks as a postprocessing pass. 2016-10-18 09:08:06 +03:00
Dmitry Petrov aa7bf4637b IR:
- function with expression bodies are desugared to blocks with return statement;
- property initializers are generated as regular expression bodies.
2016-10-18 09:08:06 +03:00
Dmitry Petrov 2707d33ca7 IR: dummy declarations for class/object and typealias 2016-10-18 09:08:05 +03:00
Dmitry Petrov f903fb8ad3 IR: destructuring declarations in regular statements 2016-10-18 09:08:05 +03:00
Dmitry Petrov 37cce98d19 Simplify IrElement hierarchy.
IrDeclaration can be now hosted under IrExpression (as IrStatement).
2016-10-18 09:08:04 +03:00
Dmitry Petrov 55eb79febf Make IrExpression.type nullable. 2016-10-18 09:08:04 +03:00
Dmitry Petrov 030111b130 IrBody is no longer a declaration owner.
Local declarations in expression tree.
Call generator supports argument reordering.
2016-10-18 09:08:03 +03:00
Dmitry Petrov b1af1af8a4 IR test tests: use that magical '<<<' everywhere. No need for 'IR_FILE_TXT'. 2016-10-18 09:08:03 +03:00
Dmitry Petrov 4ccf3c3590 Refactor calls and related expressions 2016-10-18 09:08:02 +03:00
Dmitry Petrov 3e11f35918 Qualified expressions and safe calls 2016-10-18 09:08:02 +03:00
Dmitry Petrov b80782c295 Testing framework: allow comparing subtrees starting at a given line with expected dump text. 2016-10-18 09:08:02 +03:00
Dmitry Petrov c93666f6f1 - IR expressions for calls & references
- first calls "parsed"
2016-10-18 09:08:01 +03:00
Dmitry Petrov dc7a90a081 Minor: IrFileElementFactory -> IrDeclarationFactory 2016-10-18 09:06:57 +03:00
Dmitry Petrov 7b3ae8ffec Use source offset ranges instead of source locations. 2016-10-18 09:06:56 +03:00
Dmitry Petrov 5e609c7de4 Declaration IR refactoring. 2016-10-18 09:06:56 +03:00
Dmitry Petrov 4f469c798c Mutable expressions IR. 2016-10-18 09:06:55 +03:00
Dmitry Petrov cb79f377f0 Mutable declarations IR. 2016-10-18 09:06:55 +03:00
Dmitry Petrov 64abecf996 IR elements fixes & refactorings 2016-10-18 09:06:55 +03:00
Dmitry Petrov 7879fb7084 IR: first somewhat meaningful expression IR generation 2016-10-18 09:06:54 +03:00
Dmitry Petrov ad405f26fd IR: first smoke test 2016-10-18 09:06:54 +03:00