Mercurial > projects > ldc
diff tools/binding/llvmsample3.d @ 1273:1ba61de8796b
Committing LLVM binding for D as it currently exists in the SVN repository.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 27 Apr 2009 22:33:17 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/binding/llvmsample3.d Mon Apr 27 22:33:17 2009 +0200 @@ -0,0 +1,35 @@ +// simple example that shows off getting D wrappers from C values. +module llvmsample3; + +import llvm.c.Core; +import llvm.llvm; + +void main() +{ + auto m = new Module("sample3"); + + // global int32 + auto gi = m.addGlobal(Type.Int32, "myint"); + gi.initializer = ConstantInt.GetU(Type.Int32, 42); + + // this is not a cached value, it's recreated dynamically + auto _i = gi.initializer; + auto ci = cast(ConstantInt)_i; + assert(ci !is null); + ci.dump; + + // global struct + auto st = StructType.Get([Type.Double,Type.Double,Type.Double]); + auto gs = m.addGlobal(st, "mystruct"); + auto elems = new Constant[3]; + foreach(i,ref e; elems) + e = ConstantReal.Get(Type.Double, i+1); + gs.initializer = ConstantStruct.Get(elems); + + // again this is not a cached value. + auto s = gs.initializer; + auto cs = cast(ConstantStruct)s; + assert(cs !is null); + + cs.dump; +}