JS: support cross-module inlining of suspend functions

See KT-18063
This commit is contained in:
Alexey Andreev
2017-09-11 15:07:58 +03:00
parent 992cc61abc
commit bad50c03a7
22 changed files with 599 additions and 47 deletions
+4
View File
@@ -435,6 +435,10 @@ enum SpecialFunction {
WRAP_FUNCTION = 2;
TO_BOXED_CHAR = 3;
UNBOX_CHAR = 4;
SUSPEND_CALL = 5;
COROUTINE_RESULT = 6;
COROUTINE_CONTROLLER = 7;
COROUTINE_RECEIVER = 8;
}
@@ -522,6 +522,10 @@ class JsAstDeserializer(program: JsProgram, private val sourceRoots: Iterable<Fi
JsAstProtoBuf.SpecialFunction.WRAP_FUNCTION -> SpecialFunction.WRAP_FUNCTION
JsAstProtoBuf.SpecialFunction.TO_BOXED_CHAR -> SpecialFunction.TO_BOXED_CHAR
JsAstProtoBuf.SpecialFunction.UNBOX_CHAR -> SpecialFunction.UNBOX_CHAR
JsAstProtoBuf.SpecialFunction.SUSPEND_CALL -> SpecialFunction.SUSPEND_CALL
JsAstProtoBuf.SpecialFunction.COROUTINE_RESULT -> SpecialFunction.COROUTINE_RESULT
JsAstProtoBuf.SpecialFunction.COROUTINE_CONTROLLER -> SpecialFunction.COROUTINE_CONTROLLER
JsAstProtoBuf.SpecialFunction.COROUTINE_RECEIVER -> SpecialFunction.COROUTINE_RECEIVER
}
private fun <T : JsNode> withLocation(fileId: Int?, location: Location?, action: () -> T): T {
@@ -159,6 +159,22 @@ public final class JsAstProtoBuf {
* <code>UNBOX_CHAR = 4;</code>
*/
UNBOX_CHAR(3, 4),
/**
* <code>SUSPEND_CALL = 5;</code>
*/
SUSPEND_CALL(4, 5),
/**
* <code>COROUTINE_RESULT = 6;</code>
*/
COROUTINE_RESULT(5, 6),
/**
* <code>COROUTINE_CONTROLLER = 7;</code>
*/
COROUTINE_CONTROLLER(6, 7),
/**
* <code>COROUTINE_RECEIVER = 8;</code>
*/
COROUTINE_RECEIVER(7, 8),
;
/**
@@ -177,6 +193,22 @@ public final class JsAstProtoBuf {
* <code>UNBOX_CHAR = 4;</code>
*/
public static final int UNBOX_CHAR_VALUE = 4;
/**
* <code>SUSPEND_CALL = 5;</code>
*/
public static final int SUSPEND_CALL_VALUE = 5;
/**
* <code>COROUTINE_RESULT = 6;</code>
*/
public static final int COROUTINE_RESULT_VALUE = 6;
/**
* <code>COROUTINE_CONTROLLER = 7;</code>
*/
public static final int COROUTINE_CONTROLLER_VALUE = 7;
/**
* <code>COROUTINE_RECEIVER = 8;</code>
*/
public static final int COROUTINE_RECEIVER_VALUE = 8;
public final int getNumber() { return value; }
@@ -187,6 +219,10 @@ public final class JsAstProtoBuf {
case 2: return WRAP_FUNCTION;
case 3: return TO_BOXED_CHAR;
case 4: return UNBOX_CHAR;
case 5: return SUSPEND_CALL;
case 6: return COROUTINE_RESULT;
case 7: return COROUTINE_CONTROLLER;
case 8: return COROUTINE_RECEIVER;
default: return null;
}
}
@@ -558,6 +558,10 @@ class JsAstSerializer(private val pathResolver: (File) -> String) {
SpecialFunction.WRAP_FUNCTION -> JsAstProtoBuf.SpecialFunction.WRAP_FUNCTION
SpecialFunction.TO_BOXED_CHAR -> JsAstProtoBuf.SpecialFunction.TO_BOXED_CHAR
SpecialFunction.UNBOX_CHAR -> JsAstProtoBuf.SpecialFunction.UNBOX_CHAR
SpecialFunction.SUSPEND_CALL -> JsAstProtoBuf.SpecialFunction.SUSPEND_CALL
SpecialFunction.COROUTINE_RESULT -> JsAstProtoBuf.SpecialFunction.COROUTINE_RESULT
SpecialFunction.COROUTINE_CONTROLLER -> JsAstProtoBuf.SpecialFunction.COROUTINE_CONTROLLER
SpecialFunction.COROUTINE_RECEIVER -> JsAstProtoBuf.SpecialFunction.COROUTINE_RECEIVER
}
private fun serialize(name: JsName): Int = nameMap.getOrPut(name) {