TempleOSTS_130315.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:37 +02:00
1 parent e57428affb
commit 17b71f1a2d
958 files changed
+26043 -15907

No files matched your search

+94
View File
@@ -0,0 +1,94 @@
/*
This demonstrates dynamic initialization of
vars. It even works for AOT modules
because code is generated which runs at
$LK,"Load","MN:Load"$() time to initialize them.
This file is dual use -- you can JIT compile
it or AOT compile it. If you AOT compile
then override the filename extension warning.
Static vars are, essentually, global var.
*/
#ifaot
#include "::/TempleOS/Kernel/AOTAdam.HPP"
#endif
class Test
{
I32 time;
U8 name[8];
};
Test g1[]={
{10,"Name1"},
{(tT%10.0)*100,"Name2"}, //Dynamic initialization
{30,"Name3"}
};
D(g1,sizeof(g1));
"Time 1:%d\n",g1[1].time;
U0 Main1()
{
static Test s1[]={
{10,"Static1"},
{(tT%10.0)*100,"Static2"}, //Dynamic initialization
{30,"Static3"}
};
D(s1,sizeof(s1));
"Time 2:%d\n",s1[1].time;
}
Main1;
/*
Now, we'll use the data heap glbl option
to force global vars onto the data heap.
You can't initialize heap glbls in a AOT
module.
You can turn the data heap flag
on and off within your programs, leaving
ones which need initialization on the code heap.
You can't dynamically initialize data heap
glbls--they are constants. This might be a silly
point, but might result in odd differences, perhaps
from the order things are evaluated.
Data heap glbls are good for AOT modules
because they don't take-up room in the .BIN.Z file.
*/
#ifjit
#exe {OptOn(OPTf_GLBLS_ON_DATA_HEAP);};
Test g2[]={
{10,"name1"},
{(tT%10.0)*100,"name2"}, //No dynamic initialization--converted to a constant
{30,"name3"}
};
D(g2,sizeof(g2));
"Time 3:%d\n",g2[1].time;
U0 Main2()
{
static Test s2[]={
{10,"static1"},
{(tT%10.0)*100,"static2"}, //No dynamic initialization--converted to a constant
{30,"static3"}
};
D(s2,sizeof(s2));
"Time 4:%d\n",s2[1].time;
}
Main2;
#exe {OptOn(OPTf_GLBLS_ON_DATA_HEAP);};
#endif
NewLine;