mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-04 09:00:33 +03:00
54 lines
1 KiB
D
54 lines
1 KiB
D
|
|
// RUN: %ldc -enable-dynamic-compile -run %s
|
|
|
|
import ldc.attributes;
|
|
import ldc.dynamic_compile;
|
|
|
|
@dynamicCompile int foo()
|
|
{
|
|
return 5;
|
|
}
|
|
|
|
@dynamicCompile int bar(int i = 5)
|
|
{
|
|
if(i > 0)
|
|
{
|
|
return bar(i - 1) + 1;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
@dynamicCompile int baz()
|
|
{
|
|
int i = 0;
|
|
foreach(j;1..4)
|
|
{
|
|
i += j * j;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
void main(string[] args)
|
|
{
|
|
bool[4] dumpHandlerCalled = false;
|
|
bool progressHandlerCalled = false;
|
|
CompilerSettings settings;
|
|
|
|
settings.dumpHandler = (DumpStage stage, in char[] str)
|
|
{
|
|
dumpHandlerCalled[stage] = true;
|
|
};
|
|
settings.progressHandler = (in char[] desc, in char[] object)
|
|
{
|
|
progressHandlerCalled = true;
|
|
};
|
|
compileDynamicCode(settings);
|
|
assert(5 == foo());
|
|
assert(6 == bar());
|
|
assert(14 == baz());
|
|
assert(dumpHandlerCalled[DumpStage.OriginalModule]);
|
|
assert(dumpHandlerCalled[DumpStage.MergedModule]);
|
|
assert(dumpHandlerCalled[DumpStage.OptimizedModule]);
|
|
assert(dumpHandlerCalled[DumpStage.FinalAsm]);
|
|
assert(progressHandlerCalled);
|
|
}
|