TEST: test for global variable initialization added

This commit is contained in:
Konstantin Anisimov
2016-12-16 09:56:55 +03:00
committed by vvlevchenko
parent 86bb5477c5
commit 5f097350ac
4 changed files with 35 additions and 3 deletions
+5 -1
View File
@@ -826,6 +826,10 @@ task lambda13(type: RunKonanTest) {
}
task initializers2(type: RunKonanTest) {
goldValue = "1\nA\nB\n"
goldValue = "init globalValue2\n" +
"init globalValue3\n" +
"1\n" +
"globalValue2\n" +
"globalValue3\n"
source = "runtime/basic/initializers2.kt"
}
+5
View File
@@ -19,7 +19,12 @@ void * resolve_symbol(char *name) {
return symbol;
}
extern void InitMemory();
extern void InitGlobalVariables();
int
main() {
InitMemory();
InitGlobalVariables();
exit(run_test());
}
@@ -0,0 +1,17 @@
class A(val msg: String) {
init {
println("init $msg")
}
override fun toString(): String = msg
}
val globalValue1 = 1
val globalValue2 = A("globalValue2")
val globalValue3 = A("globalValue3")
fun main(args: Array<String>) {
println(globalValue1.toString())
println(globalValue2.toString())
println(globalValue3.toString())
}
+8 -2
View File
@@ -13,8 +13,9 @@ struct InitNode {
struct InitNode* next;
};
struct InitNode initHeadNode;
struct InitNode* initTailNode = &initHeadNode;
static struct InitNode initHeadNode;
static struct InitNode* initTailNode = &initHeadNode;
void InitGlobalVariables() {
struct InitNode *currNode = initHeadNode.next;
@@ -24,6 +25,11 @@ void InitGlobalVariables() {
}
}
extern "C" void appendToInitializersTail(struct InitNode *next) {
initTailNode->next = next;
initTailNode = next;
}
//--- Setup args --------------------------------------------------------------//
ObjHeader* setupArgs(int argc, char** argv) {