LLVM type system refactored to use a subclass per kind.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 14 Aug 2015 06:26:02 +0100
changeset 27 b26354bbff25
parent 26 f6379df4b5ea
child 28 97013ae2abae
LLVM type system refactored to use a subclass per kind. This models LLVM types bit more object-oriented as type-specific methods such as access to parameter/member types is implemented in specific classes only. The FFI callouts still return a generic LLVMType, which later changes its class during it's initialization (see LLVMType>>initialize). Added some tests for types.
LLVM.st
LLVMDisposableObject.st
LLVMError.st
LLVMObject.st
LLVMObjectArray.st
LLVMType.st
LLVMTypeArray.st
LLVMTypeDouble.st
LLVMTypeError.st
LLVMTypeFP128.st
LLVMTypeFloat.st
LLVMTypeFunction.st
LLVMTypeHalt.st
LLVMTypeInteger.st
LLVMTypeLabel.st
LLVMTypeMetadata.st
LLVMTypeMismatchError.st
LLVMTypePPC_FP128.st
LLVMTypePointer.st
LLVMTypeSequential.st
LLVMTypeStruct.st
LLVMTypeVector.st
LLVMTypeVoid.st
LLVMTypeX86_FP80.st
LLVMTypeX86_MMX.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jv_llvm_s.st
libInit.cc
tests/LLVMTypeTests.st
tests/Make.proto
tests/Make.spec
tests/Makefile.init
tests/abbrev.stc
tests/bc.mak
tests/bmake.bat
tests/jv_llvm_s_tests.st
tests/libInit.cc
tests/mingwmake.bat
tests/tests.rc
tests/vcmake.bat
--- a/LLVM.st	Wed Aug 12 06:45:40 2015 +0100
+++ b/LLVM.st	Fri Aug 14 06:26:02 2015 +0100
@@ -359,7 +359,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAShr" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildAShr" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -371,7 +371,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAdd" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildAdd" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -383,7 +383,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAddrSpaceCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildAddrSpaceCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -394,7 +394,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAggregateRet" ( LLVMBuilder pointer uint32 ) >
+    <cdecl: LLVMValue "LLVMBuildAggregateRet" ( LLVMIRBuilder pointer uint32 ) >
     self primitiveFailed
 !
 
@@ -405,7 +405,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAlloca" ( LLVMBuilder LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildAlloca" ( LLVMIRBuilder LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -417,7 +417,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAnd" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildAnd" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -429,7 +429,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildArrayAlloca" ( LLVMBuilder LLVMType LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildArrayAlloca" ( LLVMIRBuilder LLVMType LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -441,7 +441,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildArrayMalloc" ( LLVMBuilder LLVMType LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildArrayMalloc" ( LLVMIRBuilder LLVMType LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -455,7 +455,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildAtomicRMW" ( LLVMBuilder int32 LLVMValue LLVMValue int32 int32 ) >
+    <cdecl: LLVMValue "LLVMBuildAtomicRMW" ( LLVMIRBuilder int32 LLVMValue LLVMValue int32 int32 ) >
     self primitiveFailed
 !
 
@@ -468,7 +468,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildBinOp" ( LLVMBuilder int32 LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildBinOp" ( LLVMIRBuilder int32 LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -480,7 +480,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildBitCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildBitCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -490,7 +490,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildBr" ( LLVMBuilder LLVMBasicBlock ) >
+    <cdecl: LLVMValue "LLVMBuildBr" ( LLVMIRBuilder LLVMBasicBlock ) >
     self primitiveFailed
 !
 
@@ -503,7 +503,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildCall" ( LLVMBuilder LLVMValue pointer uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildCall" ( LLVMIRBuilder LLVMValue pointer uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -516,7 +516,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildCast" ( LLVMBuilder int32 LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildCast" ( LLVMIRBuilder int32 LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -528,7 +528,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildCondBr" ( LLVMBuilder LLVMValue LLVMBasicBlock LLVMBasicBlock ) >
+    <cdecl: LLVMValue "LLVMBuildCondBr" ( LLVMIRBuilder LLVMValue LLVMBasicBlock LLVMBasicBlock ) >
     self primitiveFailed
 !
 
@@ -540,7 +540,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildExactSDiv" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildExactSDiv" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -552,7 +552,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildExtractElement" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildExtractElement" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -564,7 +564,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildExtractValue" ( LLVMBuilder LLVMValue uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildExtractValue" ( LLVMIRBuilder LLVMValue uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -576,7 +576,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFAdd" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFAdd" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -589,7 +589,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFCmp" ( LLVMBuilder int32 LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFCmp" ( LLVMIRBuilder int32 LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -601,7 +601,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFDiv" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFDiv" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -613,7 +613,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFMul" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFMul" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -624,7 +624,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFNeg" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFNeg" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -636,7 +636,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFPCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFPCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -648,7 +648,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFPExt" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFPExt" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -660,7 +660,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFPToSI" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFPToSI" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -672,7 +672,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFPToUI" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFPToUI" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -684,7 +684,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFPTrunc" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFPTrunc" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -696,7 +696,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFRem" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFRem" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -708,7 +708,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFSub" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFSub" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -720,7 +720,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFence" ( LLVMBuilder int32 int32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildFence" ( LLVMIRBuilder int32 int32 charPointer ) >
     self primitiveFailed
 !
 
@@ -730,7 +730,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildFree" ( LLVMBuilder LLVMValue ) >
+    <cdecl: LLVMValue "LLVMBuildFree" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
@@ -743,7 +743,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildGEP" ( LLVMBuilder LLVMValue pointer uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildGEP" ( LLVMIRBuilder LLVMValue pointer uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -754,7 +754,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildGlobalString" ( LLVMBuilder charPointer charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildGlobalString" ( LLVMIRBuilder charPointer charPointer ) >
     self primitiveFailed
 !
 
@@ -765,7 +765,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildGlobalStringPtr" ( LLVMBuilder charPointer charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildGlobalStringPtr" ( LLVMIRBuilder charPointer charPointer ) >
     self primitiveFailed
 !
 
@@ -778,7 +778,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildICmp" ( LLVMBuilder int32 LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildICmp" ( LLVMIRBuilder int32 LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -791,7 +791,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildInBoundsGEP" ( LLVMBuilder LLVMValue pointer uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildInBoundsGEP" ( LLVMIRBuilder LLVMValue pointer uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -802,7 +802,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildIndirectBr" ( LLVMBuilder LLVMValue uint32 ) >
+    <cdecl: LLVMValue "LLVMBuildIndirectBr" ( LLVMIRBuilder LLVMValue uint32 ) >
     self primitiveFailed
 !
 
@@ -815,7 +815,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildInsertElement" ( LLVMBuilder LLVMValue LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildInsertElement" ( LLVMIRBuilder LLVMValue LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -828,7 +828,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildInsertValue" ( LLVMBuilder LLVMValue LLVMValue uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildInsertValue" ( LLVMIRBuilder LLVMValue LLVMValue uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -840,7 +840,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildIntCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildIntCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -852,7 +852,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildIntToPtr" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildIntToPtr" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -867,7 +867,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildInvoke" ( LLVMBuilder LLVMValue pointer uint32 LLVMBasicBlock LLVMBasicBlock charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildInvoke" ( LLVMIRBuilder LLVMValue pointer uint32 LLVMBasicBlock LLVMBasicBlock charPointer ) >
     self primitiveFailed
 !
 
@@ -878,7 +878,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildIsNotNull" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildIsNotNull" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -889,7 +889,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildIsNull" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildIsNull" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -901,7 +901,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildLShr" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildLShr" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -913,7 +913,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildLandingPad" ( LLVMBuilder LLVMType uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildLandingPad" ( LLVMIRBuilder LLVMType uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -924,7 +924,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildLoad" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildLoad" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -935,7 +935,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildMalloc" ( LLVMBuilder LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildMalloc" ( LLVMIRBuilder LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -947,7 +947,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildMul" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildMul" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -959,7 +959,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNSWAdd" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNSWAdd" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -971,7 +971,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNSWMul" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNSWMul" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -982,7 +982,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNSWNeg" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNSWNeg" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -994,7 +994,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNSWSub" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNSWSub" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1006,7 +1006,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNUWAdd" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNUWAdd" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1018,7 +1018,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNUWMul" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNUWMul" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1029,7 +1029,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNUWNeg" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNUWNeg" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1041,7 +1041,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNUWSub" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNUWSub" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1052,7 +1052,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNeg" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNeg" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1063,7 +1063,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildNot" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildNot" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1075,7 +1075,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildOr" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildOr" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1086,7 +1086,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildPhi" ( LLVMBuilder LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildPhi" ( LLVMIRBuilder LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1098,7 +1098,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildPointerCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildPointerCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1110,7 +1110,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildPtrDiff" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildPtrDiff" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1122,7 +1122,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildPtrToInt" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildPtrToInt" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1132,7 +1132,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildResume" ( LLVMBuilder LLVMValue ) >
+    <cdecl: LLVMValue "LLVMBuildResume" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
@@ -1142,7 +1142,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildRet" ( LLVMBuilder LLVMValue ) >
+    <cdecl: LLVMValue "LLVMBuildRet" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
@@ -1151,7 +1151,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildRetVoid" ( LLVMBuilder ) >
+    <cdecl: LLVMValue "LLVMBuildRetVoid" ( LLVMIRBuilder ) >
     self primitiveFailed
 !
 
@@ -1163,7 +1163,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSDiv" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSDiv" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1175,7 +1175,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSExt" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSExt" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1187,7 +1187,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSExtOrBitCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSExtOrBitCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1199,7 +1199,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSIToFP" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSIToFP" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1211,7 +1211,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSRem" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSRem" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1224,7 +1224,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSelect" ( LLVMBuilder LLVMValue LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSelect" ( LLVMIRBuilder LLVMValue LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1236,7 +1236,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildShl" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildShl" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1249,7 +1249,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildShuffleVector" ( LLVMBuilder LLVMValue LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildShuffleVector" ( LLVMIRBuilder LLVMValue LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1260,7 +1260,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildStore" ( LLVMBuilder LLVMValue LLVMValue ) >
+    <cdecl: LLVMValue "LLVMBuildStore" ( LLVMIRBuilder LLVMValue LLVMValue ) >
     self primitiveFailed
 !
 
@@ -1272,7 +1272,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildStructGEP" ( LLVMBuilder LLVMValue uint32 charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildStructGEP" ( LLVMIRBuilder LLVMValue uint32 charPointer ) >
     self primitiveFailed
 !
 
@@ -1284,7 +1284,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSub" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildSub" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1296,7 +1296,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildSwitch" ( LLVMBuilder LLVMValue LLVMBasicBlock uint32 ) >
+    <cdecl: LLVMValue "LLVMBuildSwitch" ( LLVMIRBuilder LLVMValue LLVMBasicBlock uint32 ) >
     self primitiveFailed
 !
 
@@ -1308,7 +1308,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildTrunc" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildTrunc" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1320,7 +1320,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildTruncOrBitCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildTruncOrBitCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1332,7 +1332,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildUDiv" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildUDiv" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1344,7 +1344,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildUIToFP" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildUIToFP" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1356,7 +1356,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildURem" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildURem" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1365,7 +1365,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildUnreachable" ( LLVMBuilder ) >
+    <cdecl: LLVMValue "LLVMBuildUnreachable" ( LLVMIRBuilder ) >
     self primitiveFailed
 !
 
@@ -1377,7 +1377,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildVAArg" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildVAArg" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1389,7 +1389,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildXor" ( LLVMBuilder LLVMValue LLVMValue charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildXor" ( LLVMIRBuilder LLVMValue LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -1401,7 +1401,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildZExt" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildZExt" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1413,7 +1413,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMBuildZExtOrBitCast" ( LLVMBuilder LLVMValue LLVMType charPointer ) >
+    <cdecl: LLVMValue "LLVMBuildZExtOrBitCast" ( LLVMIRBuilder LLVMValue LLVMType charPointer ) >
     self primitiveFailed
 !
 
@@ -1441,7 +1441,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMClearInsertionPosition" ( LLVMBuilder ) >
+    <cdecl: void "LLVMClearInsertionPosition" ( LLVMIRBuilder ) >
     self primitiveFailed
 !
 
@@ -2371,7 +2371,7 @@
     "@return: LLVMBuilderRef
     "
 
-    <cdecl: LLVMBuilder "LLVMCreateBuilder" ( ) >
+    <cdecl: LLVMIRBuilder "LLVMCreateBuilder" ( ) >
     self primitiveFailed
 !
 
@@ -2380,7 +2380,7 @@
      @return: LLVMBuilderRef
     "
 
-    <cdecl: LLVMBuilder "LLVMCreateBuilderInContext" ( LLVMContext ) >
+    <cdecl: LLVMIRBuilder "LLVMCreateBuilderInContext" ( LLVMContext ) >
     self primitiveFailed
 !
 
@@ -2637,7 +2637,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMDisposeBuilder" ( LLVMBuilder ) >
+    <cdecl: void "LLVMDisposeBuilder" ( LLVMIRBuilder ) >
     self primitiveFailed
 !
 
@@ -3007,7 +3007,7 @@
      @return: LLVMValueRef
     "
 
-    <cdecl: LLVMValue "LLVMGetCurrentDebugLocation" ( LLVMBuilder ) >
+    <cdecl: LLVMValue "LLVMGetCurrentDebugLocation" ( LLVMIRBuilder ) >
     self primitiveFailed
 !
 
@@ -3273,7 +3273,7 @@
      @return: LLVMBasicBlockRef
     "
 
-    <cdecl: LLVMBasicBlock "LLVMGetInsertBlock" ( LLVMBuilder ) >
+    <cdecl: LLVMBasicBlock "LLVMGetInsertBlock" ( LLVMIRBuilder ) >
     self primitiveFailed
 !
 
@@ -4056,7 +4056,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMInsertIntoBuilder" ( LLVMBuilder LLVMValue ) >
+    <cdecl: void "LLVMInsertIntoBuilder" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
@@ -4067,7 +4067,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMInsertIntoBuilderWithName" ( LLVMBuilder LLVMValue charPointer ) >
+    <cdecl: void "LLVMInsertIntoBuilderWithName" ( LLVMIRBuilder LLVMValue charPointer ) >
     self primitiveFailed
 !
 
@@ -4993,8 +4993,10 @@
      @return: LLVMBool
     "
 
-    <cdecl: int32 "LLVMIsOpaqueStruct" ( LLVMType ) >
-    self primitiveFailed
+    <cdecl: bool "LLVMIsOpaqueStruct" ( LLVMType ) >
+    self primitiveFailed
+
+    "Modified: / 14-08-2015 / 06:11:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 IsPackedStruct: StructTy 
@@ -5002,8 +5004,10 @@
      @return: LLVMBool
     "
 
-    <cdecl: int32 "LLVMIsPackedStruct" ( LLVMType ) >
-    self primitiveFailed
+    <cdecl: bool "LLVMIsPackedStruct" ( LLVMType ) >
+    self primitiveFailed
+
+    "Modified: / 14-08-2015 / 06:11:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 IsTailCall: CallInst 
@@ -5213,7 +5217,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMPositionBuilder" ( LLVMBuilder LLVMBasicBlock LLVMValue ) >
+    <cdecl: void "LLVMPositionBuilder" ( LLVMIRBuilder LLVMBasicBlock LLVMValue ) >
     self primitiveFailed
 !
 
@@ -5223,7 +5227,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMPositionBuilderAtEnd" ( LLVMBuilder LLVMBasicBlock ) >
+    <cdecl: void "LLVMPositionBuilderAtEnd" ( LLVMIRBuilder LLVMBasicBlock ) >
     self primitiveFailed
 !
 
@@ -5233,7 +5237,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMPositionBuilderBefore" ( LLVMBuilder LLVMValue ) >
+    <cdecl: void "LLVMPositionBuilderBefore" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
@@ -5492,7 +5496,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMSetCurrentDebugLocation" ( LLVMBuilder LLVMValue ) >
+    <cdecl: void "LLVMSetCurrentDebugLocation" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
@@ -5572,7 +5576,7 @@
      @return: void
     "
 
-    <cdecl: void "LLVMSetInstDebugLocation" ( LLVMBuilder LLVMValue ) >
+    <cdecl: void "LLVMSetInstDebugLocation" ( LLVMIRBuilder LLVMValue ) >
     self primitiveFailed
 !
 
--- a/LLVMDisposableObject.st	Wed Aug 12 06:45:40 2015 +0100
+++ b/LLVMDisposableObject.st	Fri Aug 14 06:26:02 2015 +0100
@@ -40,6 +40,16 @@
 "
 ! !
 
+!LLVMDisposableObject class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == LLVMDisposableObject.
+! !
+
 !LLVMDisposableObject methodsFor:'initialization & release'!
 
 dispose
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMError.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,42 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+Error subclass:#LLVMError
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Exceptions'
+!
+
+!LLVMError class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
--- a/LLVMObject.st	Wed Aug 12 06:45:40 2015 +0100
+++ b/LLVMObject.st	Fri Aug 14 06:26:02 2015 +0100
@@ -40,6 +40,16 @@
 "
 ! !
 
+!LLVMObject class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == LLVMObject.
+! !
+
 !LLVMObject methodsFor:'assertions'!
 
 assertIsBasicBlockValue:value 
@@ -68,6 +78,15 @@
     "Modified (format): / 08-08-2015 / 02:41:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+assertIsIntegerUnsigned: value
+    <resource: #skipInDebuggersWalkback>
+
+    self assert:  value isInteger message: 'value is not an integer'.
+    self assert: (value between: 0 and: 16rFFFFFFFF) message: 'value out of range'.
+
+    "Created: / 13-08-2015 / 18:57:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 assertIsString:aString 
     <resource: #skipInDebuggersWalkback>
 
--- a/LLVMObjectArray.st	Wed Aug 12 06:45:40 2015 +0100
+++ b/LLVMObjectArray.st	Fri Aug 14 06:26:02 2015 +0100
@@ -102,14 +102,15 @@
 
 at: index
     ExternalAddress pointerSize == 8 ifTrue:[ 
-        ^ LLVMType newAddress: (self longLongAt: ((index - 1) * 8) + 1).
+        ^ self longLongAt: ((index - 1) * 8) + 1.
     ].
     ExternalAddress pointerSize == 4 ifTrue:[ 
-        ^ LLVMType newAddress: (self longLongAt: ((index - 1) * 4) + 1).
+        ^ self longLongAt: ((index - 1) * 4) + 1.
     ].
     self error:'Funny pointerSize'
 
     "Created: / 07-07-2015 / 21:47:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 17:15:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 at: index put: type
--- a/LLVMType.st	Wed Aug 12 06:45:40 2015 +0100
+++ b/LLVMType.st	Fri Aug 14 06:26:02 2015 +0100
@@ -17,9 +17,10 @@
 
 LLVMObject subclass:#LLVMType
 	instanceVariableNames:''
-	classVariableNames:'Int1 Int16 Int32 Int64 IntPtr'
+	classVariableNames:'Int1 Int8 Int16 Int32 Int64 IntPtr Void Half Float Double X86FP80
+		FP128 PPCFP128 X86MMX KindToClassMapping'
 	poolDictionaries:'LLVMTypeKind'
-	category:'LLVM-S-Core'
+	category:'LLVM-S-Core-Types'
 !
 
 !LLVMType class methodsFor:'documentation'!
@@ -40,6 +41,53 @@
 "
 ! !
 
+!LLVMType class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    KindToClassMapping := Dictionary withKeysAndValues: {
+        LLVMHalfTypeKind .      LLVMTypeHalt .
+        LLVMFloatTypeKind .     LLVMTypeFloat .
+        LLVMDoubleTypeKind .    LLVMTypeDouble .
+        LLVMX86_FP80TypeKind .  LLVMTypeX86_FP80 .
+        LLVMFP128TypeKind .     LLVMTypeFP128.
+        LLVMPPC_FP128TypeKind . LLVMTypePPC_FP128 .
+        LLVMIntegerTypeKind .   LLVMTypeInteger .
+        LLVMVectorTypeKind .    LLVMTypeVector .
+        LLVMArrayTypeKind .     LLVMTypeArray .
+        LLVMStructTypeKind .    LLVMTypeStruct .
+        LLVMPointerTypeKind .   LLVMTypePointer .
+        LLVMFunctionTypeKind .  LLVMTypeFunction .
+        LLVMMetadataTypeKind .  LLVMTypeMetadata .
+        LLVMVoidTypeKind .      LLVMTypeVoid .
+        LLVMLabelTypeKind .     LLVMTypeLabel .
+        LLVMX86_MMXTypeKind .   LLVMTypeX86_MMX .
+    }
+
+    "Modified: / 13-08-2015 / 17:00:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMType class methodsFor:'instance creation'!
+
+newAddress:addr
+    ^ (super newAddress: addr)
+        initialize;
+        yourself
+
+    "Created: / 13-08-2015 / 17:14:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMType class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == LLVMType.
+! !
+
 !LLVMType class methodsFor:'types - C'!
 
 char
@@ -48,12 +96,70 @@
     "Created: / 04-08-2015 / 19:32:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+void
+    Void isNil ifTrue:[ Void := LLVM VoidType ].
+    ^ Void
+
+    "Created: / 13-08-2015 / 17:20:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 wchar
     ^ self int16
 
     "Created: / 04-08-2015 / 19:32:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!LLVMType class methodsFor:'types - floating points'!
+
+double
+    Double isNil ifTrue:[ Double := LLVM DoubleType ].
+    ^ Double
+
+    "Created: / 13-08-2015 / 17:24:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+float
+    Float isNil ifTrue:[ Float := LLVM FloatType ].
+    ^ Float
+
+    "Created: / 13-08-2015 / 17:24:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fp128
+    FP128 isNil ifTrue:[ FP128 := LLVM FP128Type ].
+    ^ FP128
+
+    "Created: / 13-08-2015 / 17:26:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+half
+    Half isNil ifTrue:[ Half := LLVM HalfType ].
+    ^ Half
+
+    "Created: / 13-08-2015 / 17:24:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+ppcfp128
+    PPCFP128 isNil ifTrue:[ PPCFP128 := LLVM PPCFP128Type ].
+    ^ PPCFP128
+
+    "Created: / 13-08-2015 / 17:26:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+x86fp80
+    X86FP80 isNil ifTrue:[ X86FP80 := LLVM X86FP80Type ].
+    ^ X86FP80
+
+    "Created: / 13-08-2015 / 17:25:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+x86mmx
+    X86MMX isNil ifTrue:[ X86MMX := LLVM X86MMXType ].
+    ^ X86MMX
+
+    "Created: / 13-08-2015 / 17:26:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !LLVMType class methodsFor:'types - functions'!
 
 function: argumentTypes returning: returnType
@@ -72,46 +178,72 @@
 !LLVMType class methodsFor:'types - integers'!
 
 int1
-    Int1 isNil ifTrue:[  
-        Int1 := LLVM Int1Type
-    ].
+    Int1 isNil ifTrue:[  Int1 := LLVM Int1Type ].
     ^ Int1
 
     "Created: / 07-07-2015 / 21:21:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 08-08-2015 / 04:23:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 13-08-2015 / 17:21:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 int16
-    ^ LLVM Int16Type
+    Int16 isNil ifTrue:[ Int16 := LLVM Int16Type ].
+    ^ Int16
 
     "Created: / 07-07-2015 / 21:21:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 18:48:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 int32
-    ^ LLVM Int32Type
+    Int32 isNil ifTrue:[ Int32 := LLVM Int32Type ].
+    ^ Int32
 
     "Created: / 07-07-2015 / 21:21:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 17:22:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 int64
-    ^ LLVM Int64Type
+    Int64 isNil ifTrue:[ Int64 := LLVM Int64Type ].
+    ^ Int64
 
     "Created: / 07-07-2015 / 21:21:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 17:22:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 int8
-    ^ LLVM Int8Type
+    Int8 isNil ifTrue:[ Int8 := LLVM Int8Type ].
+    ^ Int8
 
     "Created: / 07-07-2015 / 21:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 18:47:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 intptr
-    IntPtr isNil ifTrue:[
-        IntPtr := LLVM IntPtrType: LLVMTargetData new.  
-    ].
+    IntPtr isNil ifTrue:[ IntPtr := LLVM IntPtrType: LLVMTargetData new ].
     ^ IntPtr
 
     "Created: / 11-07-2015 / 07:05:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 13-08-2015 / 17:22:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMType class methodsFor:'types - structures'!
+
+struct: memberTypes 
+    ^ self struct: memberTypes packed: false
+
+    "Created: / 13-08-2015 / 19:15:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+struct: memberTypes packed: packed
+
+    self assert: memberTypes isSequenceable message: '`memberTypes` parameter is not an array of types'.
+    self assert: (memberTypes allSatisfy:[:e|e isLLVMType]) message: 'element of a `memberTypes` parameter is not an LLVM type'.
+    self assert: packed isBoolean message: '`packed` parameter is not a boolean'.
+
+    ^ LLVM StructType: memberTypes asLLVMObjectArray  _: memberTypes size _: (packed ifTrue:[ 1 ] ifFalse:[ 0 ])
+
+    "Created: / 13-08-2015 / 19:15:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-08-2015 / 05:49:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMType methodsFor:'accessing'!
@@ -120,6 +252,18 @@
     ^ LLVM GetTypeKind: self
 
     "Created: / 07-07-2015 / 21:59:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    LLVMTypeError new signal: 'type size not known'
+
+    "Created: / 13-08-2015 / 16:25:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMType methodsFor:'comparing'!
@@ -138,6 +282,16 @@
 
 !LLVMType methodsFor:'converting'!
 
+array: numberOfElements
+    "Create a fixed-size array whose elements are of type of receiver
+     `LLVMType int8 array: 13` returns `[ 13 x i8 ]`"
+
+    self assertIsIntegerUnsigned: numberOfElements.  
+    ^ LLVM ArrayType: self _:  numberOfElements
+
+    "Created: / 13-08-2015 / 18:57:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 pointer
     "Return a pointer to the type represented by the receiver.
      `LLVMType int32 pointer` returns int32_t*"
@@ -145,6 +299,15 @@
     ^ LLVM PointerType: self  _: "AddressSpace"0
 
     "Created: / 04-08-2015 / 19:31:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+vector: numberOfElements
+    "Create a fixed-size vector whose elements are of type of receiver."
+
+    self assertIsIntegerUnsigned: numberOfElements.  
+    ^ LLVM VectorType: self _:  numberOfElements
+
+    "Created: / 13-08-2015 / 18:59:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMType methodsFor:'debugging-dumping'!
@@ -216,12 +379,60 @@
     "Modified: / 08-08-2015 / 04:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!LLVMType methodsFor:'initialization'!
+
+initialize
+    self class == LLVMType ifTrue:[
+        self changeClassTo: (KindToClassMapping at: self kind)
+    ].
+
+    "Created: / 13-08-2015 / 16:53:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 18:43:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !LLVMType methodsFor:'testing'!
 
+isArrayType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:19:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDoubleType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:14:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isFP128Type
+    ^ false
+
+    "Created: / 13-08-2015 / 16:15:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isFloatType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:14:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isFunctionType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:16:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isHalfType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:14:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 isIntegerType
-    ^ self kind == LLVMIntegerTypeKind
+    ^ false
 
     "Created: / 11-07-2015 / 14:56:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 16:49:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 isLLVMType
@@ -232,10 +443,59 @@
     "Created: / 08-08-2015 / 02:46:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+isLabelType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:16:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isMetadataType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:20:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isPPC_FP128Type
+    ^ false
+
+    "Created: / 13-08-2015 / 16:15:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isPointerType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:19:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isStructType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:19:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 isVectorType
-    ^ self kind == LLVMVectorTypeKind
+    ^ false
 
     "Created: / 11-07-2015 / 14:56:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 13-08-2015 / 16:50:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isVoidType
+    ^false
+
+    "Created: / 13-08-2015 / 16:13:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isX86_FP80Type
+    ^ false
+
+    "Created: / 13-08-2015 / 16:14:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isX86_MMXType
+    ^ false
+
+    "Created: / 13-08-2015 / 16:20:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMType class methodsFor:'documentation'!
@@ -245,3 +505,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+LLVMType initialize!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeArray.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,59 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMTypeSequential subclass:#LLVMTypeArray
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeArray class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeArray methodsFor:'accessing'!
+
+sizeInElements
+    "Return the number of elements"
+    ^ LLVM GetArrayLength: self
+
+    "Created: / 13-08-2015 / 19:00:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeArray methodsFor:'testing'!
+
+isArrayType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:50:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeDouble.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeDouble
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeDouble class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeDouble methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    ^ 64
+
+    "Created: / 13-08-2015 / 17:02:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeDouble methodsFor:'testing'!
+
+isDoubleType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeError.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,42 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMError subclass:#LLVMTypeError
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Exceptions'
+!
+
+!LLVMTypeError class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeFP128.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeFP128
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeFP128 class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeFP128 methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    ^ 128
+
+    "Created: / 13-08-2015 / 17:02:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeFP128 methodsFor:'testing'!
+
+isFP128Type
+    ^ true
+
+    "Created: / 13-08-2015 / 16:51:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeFloat.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeFloat
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeFloat class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeFloat methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    ^ 32
+
+    "Created: / 13-08-2015 / 17:02:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeFloat methodsFor:'testing'!
+
+isFloatType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:51:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeFunction.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,113 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeFunction
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeFunction class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeFunction methodsFor:'accessing'!
+
+numArgs
+    "Return a number of arguments this function takes (excluding variadic, if any)
+
+     Same as numParams, defined here to match Smalltalk/X naming which uses #numArgs"
+
+    ^ self numArgs
+
+    "Created: / 13-08-2015 / 17:06:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+numParams
+    "Return a number of arguments this function takes (excluding variadic, if any)"
+
+    ^ LLVM CountParamTypes: self.
+
+    "Created: / 13-08-2015 / 17:07:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parameterTypeAt: index
+    | numParams parameterTypePointers |
+
+    numParams := self numParams.
+    (index between: 1 and: numParams) ifTrue:[ 
+        parameterTypePointers := LLVMObjectArray new: numParams.
+        LLVM GetParamTypes: self _: parameterTypePointers.
+        ^ (LLVMType newAddress: (parameterTypePointers at: index))
+    ].
+    LLVMTypeError new signal: 'index out of bounds'
+
+    "Created: / 13-08-2015 / 17:16:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 14-08-2015 / 06:15:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+parameterTypes
+    | numParams parameterTypePointers parameterTypes |
+
+    numParams := self numParams.
+    numParams == 0 ifTrue:[ ^ #() ].
+    parameterTypePointers := LLVMObjectArray new: numParams.
+    parameterTypes := Array new: numParams.
+    LLVM GetParamTypes: self _: parameterTypePointers.
+    1 to: numParams do:[:i | parameterTypes at: i put: (LLVMType newAddress: (parameterTypePointers at: i)) ].
+    ^ parameterTypes
+
+    "Created: / 13-08-2015 / 17:16:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+returnType
+    ^ LLVM GetReturnType: self.
+
+    "Created: / 13-08-2015 / 17:11:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeFunction methodsFor:'testing'!
+
+isFunctionType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:51:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isVarArg
+    "Return true if the function type designates a variadic function"
+
+    ^ LLVM IsFunctionVarArg: self
+
+    "Created: / 13-08-2015 / 17:05:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeHalt.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeHalt
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeHalt class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeHalt methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+   ^ 16
+
+    "Created: / 13-08-2015 / 17:02:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeHalt methodsFor:'testing'!
+
+isHalfType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeInteger.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeInteger
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeInteger class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeInteger methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    ^ LLVM GetIntTypeWidth: self
+
+    "Created: / 13-08-2015 / 17:03:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeInteger methodsFor:'testing'!
+
+isIntegerType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:51:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeLabel.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,50 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeLabel
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeLabel class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeLabel methodsFor:'testing'!
+
+isLabelType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeMetadata.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,50 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeMetadata
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeMetadata class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeMetadata methodsFor:'testing'!
+
+isMetadataType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeMismatchError.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,42 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMTypeError subclass:#LLVMTypeMismatchError
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Exceptions'
+!
+
+!LLVMTypeMismatchError class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypePPC_FP128.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypePPC_FP128
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypePPC_FP128 class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypePPC_FP128 methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    ^ 128
+
+    "Created: / 13-08-2015 / 17:03:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypePPC_FP128 methodsFor:'testing'!
+
+isPPC_FP128Type
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypePointer.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMTypeSequential subclass:#LLVMTypePointer
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypePointer class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypePointer methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+    ^ LLVM GetIntTypeWidth: self
+
+    "Created: / 13-08-2015 / 17:03:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypePointer methodsFor:'testing'!
+
+isPointerType
+    ^ true
+
+    "Created: / 13-08-2015 / 17:00:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeSequential.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,62 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeSequential
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeSequential class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeSequential class methodsFor:'queries'!
+
+isAbstract
+    "Return if this class is an abstract class.
+     True is returned here for myself only; false for subclasses.
+     Abstract subclasses must redefine again."
+
+    ^ self == LLVMTypeSequential.
+! !
+
+!LLVMTypeSequential methodsFor:'accessing'!
+
+elementType
+    "Return the array/vector element type or the type a pointer points to"
+
+    ^ LLVM GetElementType: self
+
+    "Created: / 13-08-2015 / 19:02:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeStruct.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,106 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeStruct
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeStruct class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeStruct methodsFor:'accessing'!
+
+elementTypeAt: n
+    "Return types of `n`th member of the structure. Index starts at 1 as
+     customary in Smalltalk.
+
+     Uses term `element` instead of `member` to be in sync
+     with LLVM naming."
+
+    (n between: 1 and: self numElements) ifTrue:[
+        ^  LLVM StructGetTypeAtIndex: self _: n - 1.
+    ].
+    LLVMTypeError new signal: 'index out of bounds'.
+
+    "Created: / 14-08-2015 / 05:56:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+elementTypes
+    "Return types of members of this structure.
+
+     Uses term `element` instead of `member` to be in sync
+     with LLVM naming."
+
+    | numElements elementTypePointers elementTypes |
+
+    numElements := self numElements.
+    numElements == 0 ifTrue:[ ^ #() ].
+    elementTypePointers := LLVMObjectArray new: numElements.
+    elementTypes := Array new: numElements.
+    LLVM GetStructElementTypes: self _: elementTypePointers.
+    1 to: numElements do:[:i | elementTypes at: i put: (LLVMType newAddress: (elementTypePointers at: i)) ].
+    ^ elementTypes
+
+    "Created: / 14-08-2015 / 05:54:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+numElements
+    "Return a number of members of this structure"
+
+    ^ LLVM CountStructElementTypes: self
+
+    "Created: / 14-08-2015 / 05:53:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeStruct methodsFor:'testing'!
+
+isOpaque
+    ^ LLVM IsOpaqueStruct: self
+
+    "Created: / 14-08-2015 / 06:11:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isPacked
+    ^ LLVM IsPackedStruct: self
+
+    "Created: / 14-08-2015 / 06:11:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isStructType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeVector.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,66 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMTypeSequential subclass:#LLVMTypeVector
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeVector class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeVector methodsFor:'accessing'!
+
+sizeInElements
+    "Return the number of elements"
+    ^ LLVM GetVectorSize: self
+
+    "Created: / 13-08-2015 / 19:00:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeVector methodsFor:'testing'!
+
+isVectorType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeVector class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeVoid.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,50 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeVoid
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeVoid class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeVoid methodsFor:'testing'!
+
+isVoidType
+    ^true
+
+    "Created: / 13-08-2015 / 16:52:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeX86_FP80.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,64 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeX86_FP80
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeX86_FP80 class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeX86_FP80 methodsFor:'accessing'!
+
+sizeInBits
+    "For integer, pointer, FP  types, return the size in bits. For all 
+     other types, throw an LLVMTypeError.
+
+     LLVMType int32 sizeInBits -> 32
+     LLVMType int1 sizeInBits  -> 1
+    "
+   ^ 80
+
+    "Created: / 13-08-2015 / 17:03:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeX86_FP80 methodsFor:'testing'!
+
+isX86_FP80Type
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LLVMTypeX86_MMX.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,50 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s' }"
+
+"{ NameSpace: Smalltalk }"
+
+LLVMType subclass:#LLVMTypeX86_MMX
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types'
+!
+
+!LLVMTypeX86_MMX class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeX86_MMX methodsFor:'testing'!
+
+isX86_MMXType
+    ^ true
+
+    "Created: / 13-08-2015 / 16:52:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/Make.proto	Wed Aug 12 06:45:40 2015 +0100
+++ b/Make.proto	Fri Aug 14 06:26:02 2015 +0100
@@ -141,6 +141,7 @@
 $(OUTDIR)LLVMConstant.$(O) LLVMConstant.$(H): LLVMConstant.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMDLLStorageClass.$(O) LLVMDLLStorageClass.$(H): LLVMDLLStorageClass.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)LLVMDiagnosticSeverity.$(O) LLVMDiagnosticSeverity.$(H): LLVMDiagnosticSeverity.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
+$(OUTDIR)LLVMError.$(O) LLVMError.$(H): LLVMError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMIntPredicate.$(O) LLVMIntPredicate.$(H): LLVMIntPredicate.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)LLVMLandingPadClauseTy.$(O) LLVMLandingPadClauseTy.$(H): LLVMLandingPadClauseTy.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)LLVMLinkage.$(O) LLVMLinkage.$(H): LLVMLinkage.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
@@ -153,6 +154,7 @@
 $(OUTDIR)LLVMVisibility.$(O) LLVMVisibility.$(H): LLVMVisibility.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)jv_llvm_s.$(O) jv_llvm_s.$(H): jv_llvm_s.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
 $(OUTDIR)LLVMObject.$(O) LLVMObject.$(H): LLVMObject.st $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeKind.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeError.$(O) LLVMTypeError.$(H): LLVMTypeError.st $(INCLUDE_TOP)/jv/llvm_s/LLVMError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMBasicBlock.$(O) LLVMBasicBlock.$(H): LLVMBasicBlock.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMContext.$(O) LLVMContext.$(H): LLVMContext.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMDiagnosticInfo.$(O) LLVMDiagnosticInfo.$(H): LLVMDiagnosticInfo.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -161,6 +163,7 @@
 $(OUTDIR)LLVMPassRegistry.$(O) LLVMPassRegistry.$(H): LLVMPassRegistry.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetLibraryInfo.$(O) LLVMTargetLibraryInfo.$(H): LLVMTargetLibraryInfo.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMType.$(O) LLVMType.$(H): LLVMType.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeKind.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeMismatchError.$(O) LLVMTypeMismatchError.$(H): LLVMTypeMismatchError.st $(INCLUDE_TOP)/jv/llvm_s/LLVMError.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeError.$(H) $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMUse.$(O) LLVMUse.$(H): LLVMUse.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMValue.$(O) LLVMValue.$(H): LLVMValue.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMBuilder.$(O) LLVMBuilder.$(H): LLVMBuilder.st $(INCLUDE_TOP)/jv/llvm_s/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMIntPredicate.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMRealPredicate.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeKind.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -172,7 +175,24 @@
 $(OUTDIR)LLVMModuleProvider.$(O) LLVMModuleProvider.$(H): LLVMModuleProvider.st $(INCLUDE_TOP)/jv/llvm_s/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMPassManager.$(O) LLVMPassManager.$(H): LLVMPassManager.st $(INCLUDE_TOP)/jv/llvm_s/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetData.$(O) LLVMTargetData.$(H): LLVMTargetData.st $(INCLUDE_TOP)/jv/llvm_s/LLVMDisposableObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeDouble.$(O) LLVMTypeDouble.$(H): LLVMTypeDouble.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeFP128.$(O) LLVMTypeFP128.$(H): LLVMTypeFP128.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeFloat.$(O) LLVMTypeFloat.$(H): LLVMTypeFloat.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeFunction.$(O) LLVMTypeFunction.$(H): LLVMTypeFunction.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeHalt.$(O) LLVMTypeHalt.$(H): LLVMTypeHalt.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeInteger.$(O) LLVMTypeInteger.$(H): LLVMTypeInteger.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeLabel.$(O) LLVMTypeLabel.$(H): LLVMTypeLabel.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeMetadata.$(O) LLVMTypeMetadata.$(H): LLVMTypeMetadata.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypePPC_FP128.$(O) LLVMTypePPC_FP128.$(H): LLVMTypePPC_FP128.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeSequential.$(O) LLVMTypeSequential.$(H): LLVMTypeSequential.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeStruct.$(O) LLVMTypeStruct.$(H): LLVMTypeStruct.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeVoid.$(O) LLVMTypeVoid.$(H): LLVMTypeVoid.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeX86_FP80.$(O) LLVMTypeX86_FP80.$(H): LLVMTypeX86_FP80.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeX86_MMX.$(O) LLVMTypeX86_MMX.$(H): LLVMTypeX86_MMX.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMStXMethod.$(O) LLVMStXMethod.$(H): LLVMStXMethod.st $(INCLUDE_TOP)/jv/llvm_s/LLVMFunction.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMValue.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeArray.$(O) LLVMTypeArray.$(H): LLVMTypeArray.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeSequential.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypePointer.$(O) LLVMTypePointer.$(H): LLVMTypePointer.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeSequential.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeVector.$(O) LLVMTypeVector.$(H): LLVMTypeVector.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMType.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMTypeSequential.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/sunit/stx_goodies_sunit.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/stx_libbasic.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/Make.spec	Wed Aug 12 06:45:40 2015 +0100
+++ b/Make.spec	Fri Aug 14 06:26:02 2015 +0100
@@ -62,6 +62,7 @@
 	LLVMConstant \
 	LLVMDLLStorageClass \
 	LLVMDiagnosticSeverity \
+	LLVMError \
 	LLVMIntPredicate \
 	LLVMLandingPadClauseTy \
 	LLVMLinkage \
@@ -74,6 +75,7 @@
 	LLVMVisibility \
 	jv_llvm_s \
 	LLVMObject \
+	LLVMTypeError \
 	LLVMBasicBlock \
 	LLVMContext \
 	LLVMDiagnosticInfo \
@@ -82,6 +84,7 @@
 	LLVMPassRegistry \
 	LLVMTargetLibraryInfo \
 	LLVMType \
+	LLVMTypeMismatchError \
 	LLVMUse \
 	LLVMValue \
 	LLVMBuilder \
@@ -93,7 +96,24 @@
 	LLVMModuleProvider \
 	LLVMPassManager \
 	LLVMTargetData \
+	LLVMTypeDouble \
+	LLVMTypeFP128 \
+	LLVMTypeFloat \
+	LLVMTypeFunction \
+	LLVMTypeHalt \
+	LLVMTypeInteger \
+	LLVMTypeLabel \
+	LLVMTypeMetadata \
+	LLVMTypePPC_FP128 \
+	LLVMTypeSequential \
+	LLVMTypeStruct \
+	LLVMTypeVoid \
+	LLVMTypeX86_FP80 \
+	LLVMTypeX86_MMX \
 	LLVMStXMethod \
+	LLVMTypeArray \
+	LLVMTypePointer \
+	LLVMTypeVector \
 
 
 
@@ -110,6 +130,7 @@
     $(OUTDIR_SLASH)LLVMConstant.$(O) \
     $(OUTDIR_SLASH)LLVMDLLStorageClass.$(O) \
     $(OUTDIR_SLASH)LLVMDiagnosticSeverity.$(O) \
+    $(OUTDIR_SLASH)LLVMError.$(O) \
     $(OUTDIR_SLASH)LLVMIntPredicate.$(O) \
     $(OUTDIR_SLASH)LLVMLandingPadClauseTy.$(O) \
     $(OUTDIR_SLASH)LLVMLinkage.$(O) \
@@ -122,6 +143,7 @@
     $(OUTDIR_SLASH)LLVMVisibility.$(O) \
     $(OUTDIR_SLASH)jv_llvm_s.$(O) \
     $(OUTDIR_SLASH)LLVMObject.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeError.$(O) \
     $(OUTDIR_SLASH)LLVMBasicBlock.$(O) \
     $(OUTDIR_SLASH)LLVMContext.$(O) \
     $(OUTDIR_SLASH)LLVMDiagnosticInfo.$(O) \
@@ -130,6 +152,7 @@
     $(OUTDIR_SLASH)LLVMPassRegistry.$(O) \
     $(OUTDIR_SLASH)LLVMTargetLibraryInfo.$(O) \
     $(OUTDIR_SLASH)LLVMType.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeMismatchError.$(O) \
     $(OUTDIR_SLASH)LLVMUse.$(O) \
     $(OUTDIR_SLASH)LLVMValue.$(O) \
     $(OUTDIR_SLASH)LLVMBuilder.$(O) \
@@ -141,7 +164,24 @@
     $(OUTDIR_SLASH)LLVMModuleProvider.$(O) \
     $(OUTDIR_SLASH)LLVMPassManager.$(O) \
     $(OUTDIR_SLASH)LLVMTargetData.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeDouble.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeFP128.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeFloat.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeFunction.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeHalt.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeInteger.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeLabel.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeMetadata.$(O) \
+    $(OUTDIR_SLASH)LLVMTypePPC_FP128.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeSequential.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeStruct.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeVoid.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeX86_FP80.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeX86_MMX.$(O) \
     $(OUTDIR_SLASH)LLVMStXMethod.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeArray.$(O) \
+    $(OUTDIR_SLASH)LLVMTypePointer.$(O) \
+    $(OUTDIR_SLASH)LLVMTypeVector.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
 
 
--- a/abbrev.stc	Wed Aug 12 06:45:40 2015 +0100
+++ b/abbrev.stc	Fri Aug 14 06:26:02 2015 +0100
@@ -12,6 +12,7 @@
 LLVMConstant LLVMConstant jv:llvm_s 'LLVM-S-Core' 0
 LLVMDLLStorageClass LLVMDLLStorageClass jv:llvm_s 'LLVM-S-Core-Constants' 0
 LLVMDiagnosticSeverity LLVMDiagnosticSeverity jv:llvm_s 'LLVM-S-Core-Constants' 0
+LLVMError LLVMError jv:llvm_s 'LLVM-S-Core-Exceptions' 1
 LLVMIntPredicate LLVMIntPredicate jv:llvm_s 'LLVM-S-Core-Constants' 0
 LLVMLandingPadClauseTy LLVMLandingPadClauseTy jv:llvm_s 'LLVM-S-Core-Constants' 0
 LLVMLinkage LLVMLinkage jv:llvm_s 'LLVM-S-Core-Constants' 0
@@ -25,6 +26,7 @@
 jv_llvm_s jv_llvm_s jv:llvm_s '* Projects & Packages *' 3
 LLVMExamples LLVMExamples jv:llvm_s 'LLVM-S-Core-Examples' 1
 LLVMObject LLVMObject jv:llvm_s 'LLVM-S-Internal' 0
+LLVMTypeError LLVMTypeError jv:llvm_s 'LLVM-S-Core-Exceptions' 1
 LLVMBasicBlock LLVMBasicBlock jv:llvm_s 'LLVM-S-Core' 0
 LLVMContext LLVMContext jv:llvm_s 'LLVM-S-Core' 0
 LLVMDiagnosticInfo LLVMDiagnosticInfo jv:llvm_s 'LLVM-S-Core' 0
@@ -32,7 +34,8 @@
 LLVMMCJITCompilerOptions LLVMMCJITCompilerOptions jv:llvm_s 'LLVM-S-Core' 0
 LLVMPassRegistry LLVMPassRegistry jv:llvm_s 'LLVM-S-Core' 0
 LLVMTargetLibraryInfo LLVMTargetLibraryInfo jv:llvm_s 'LLVM-S-Core' 0
-LLVMType LLVMType jv:llvm_s 'LLVM-S-Core' 0
+LLVMType LLVMType jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeMismatchError LLVMTypeMismatchError jv:llvm_s 'LLVM-S-Core-Exceptions' 1
 LLVMUse LLVMUse jv:llvm_s 'LLVM-S-Core' 0
 LLVMValue LLVMValue jv:llvm_s 'LLVM-S-Core' 0
 LLVMBuilder LLVMBuilder jv:llvm_s 'LLVM-S-Core' 0
@@ -44,4 +47,21 @@
 LLVMModuleProvider LLVMModuleProvider jv:llvm_s 'LLVM-S-Core' 0
 LLVMPassManager LLVMPassManager jv:llvm_s 'LLVM-S-Core' 0
 LLVMTargetData LLVMTargetData jv:llvm_s 'LLVM-S-Core' 0
+LLVMTypeDouble LLVMTypeDouble jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeFP128 LLVMTypeFP128 jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeFloat LLVMTypeFloat jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeFunction LLVMTypeFunction jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeHalt LLVMTypeHalt jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeInteger LLVMTypeInteger jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeLabel LLVMTypeLabel jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeMetadata LLVMTypeMetadata jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypePPC_FP128 LLVMTypePPC_FP128 jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeSequential LLVMTypeSequential jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeStruct LLVMTypeStruct jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeVoid LLVMTypeVoid jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeX86_FP80 LLVMTypeX86_FP80 jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeX86_MMX LLVMTypeX86_MMX jv:llvm_s 'LLVM-S-Core-Types' 0
 LLVMStXMethod LLVMStXMethod jv:llvm_s 'LLVM-S-StX' 0
+LLVMTypeArray LLVMTypeArray jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypePointer LLVMTypePointer jv:llvm_s 'LLVM-S-Core-Types' 0
+LLVMTypeVector LLVMTypeVector jv:llvm_s 'LLVM-S-Core-Types' 0
--- a/bc.mak	Wed Aug 12 06:45:40 2015 +0100
+++ b/bc.mak	Fri Aug 14 06:26:02 2015 +0100
@@ -83,6 +83,7 @@
 $(OUTDIR)LLVMConstant.$(O) LLVMConstant.$(H): LLVMConstant.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMDLLStorageClass.$(O) LLVMDLLStorageClass.$(H): LLVMDLLStorageClass.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)LLVMDiagnosticSeverity.$(O) LLVMDiagnosticSeverity.$(H): LLVMDiagnosticSeverity.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
+$(OUTDIR)LLVMError.$(O) LLVMError.$(H): LLVMError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMIntPredicate.$(O) LLVMIntPredicate.$(H): LLVMIntPredicate.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)LLVMLandingPadClauseTy.$(O) LLVMLandingPadClauseTy.$(H): LLVMLandingPadClauseTy.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)LLVMLinkage.$(O) LLVMLinkage.$(H): LLVMLinkage.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
@@ -95,6 +96,7 @@
 $(OUTDIR)LLVMVisibility.$(O) LLVMVisibility.$(H): LLVMVisibility.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)jv_llvm_s.$(O) jv_llvm_s.$(H): jv_llvm_s.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
 $(OUTDIR)LLVMObject.$(O) LLVMObject.$(H): LLVMObject.st $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeKind.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeError.$(O) LLVMTypeError.$(H): LLVMTypeError.st $(INCLUDE_TOP)\jv\llvm_s\LLVMError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMBasicBlock.$(O) LLVMBasicBlock.$(H): LLVMBasicBlock.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMContext.$(O) LLVMContext.$(H): LLVMContext.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMDiagnosticInfo.$(O) LLVMDiagnosticInfo.$(H): LLVMDiagnosticInfo.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -103,6 +105,7 @@
 $(OUTDIR)LLVMPassRegistry.$(O) LLVMPassRegistry.$(H): LLVMPassRegistry.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetLibraryInfo.$(O) LLVMTargetLibraryInfo.$(H): LLVMTargetLibraryInfo.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMType.$(O) LLVMType.$(H): LLVMType.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeKind.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeMismatchError.$(O) LLVMTypeMismatchError.$(H): LLVMTypeMismatchError.st $(INCLUDE_TOP)\jv\llvm_s\LLVMError.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeError.$(H) $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMUse.$(O) LLVMUse.$(H): LLVMUse.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMValue.$(O) LLVMValue.$(H): LLVMValue.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMBuilder.$(O) LLVMBuilder.$(H): LLVMBuilder.st $(INCLUDE_TOP)\jv\llvm_s\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMIntPredicate.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMRealPredicate.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeKind.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -114,7 +117,24 @@
 $(OUTDIR)LLVMModuleProvider.$(O) LLVMModuleProvider.$(H): LLVMModuleProvider.st $(INCLUDE_TOP)\jv\llvm_s\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMPassManager.$(O) LLVMPassManager.$(H): LLVMPassManager.st $(INCLUDE_TOP)\jv\llvm_s\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMTargetData.$(O) LLVMTargetData.$(H): LLVMTargetData.st $(INCLUDE_TOP)\jv\llvm_s\LLVMDisposableObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeDouble.$(O) LLVMTypeDouble.$(H): LLVMTypeDouble.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeFP128.$(O) LLVMTypeFP128.$(H): LLVMTypeFP128.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeFloat.$(O) LLVMTypeFloat.$(H): LLVMTypeFloat.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeFunction.$(O) LLVMTypeFunction.$(H): LLVMTypeFunction.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeHalt.$(O) LLVMTypeHalt.$(H): LLVMTypeHalt.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeInteger.$(O) LLVMTypeInteger.$(H): LLVMTypeInteger.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeLabel.$(O) LLVMTypeLabel.$(H): LLVMTypeLabel.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeMetadata.$(O) LLVMTypeMetadata.$(H): LLVMTypeMetadata.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypePPC_FP128.$(O) LLVMTypePPC_FP128.$(H): LLVMTypePPC_FP128.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeSequential.$(O) LLVMTypeSequential.$(H): LLVMTypeSequential.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeStruct.$(O) LLVMTypeStruct.$(H): LLVMTypeStruct.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeVoid.$(O) LLVMTypeVoid.$(H): LLVMTypeVoid.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeX86_FP80.$(O) LLVMTypeX86_FP80.$(H): LLVMTypeX86_FP80.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeX86_MMX.$(O) LLVMTypeX86_MMX.$(H): LLVMTypeX86_MMX.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMStXMethod.$(O) LLVMStXMethod.$(H): LLVMStXMethod.st $(INCLUDE_TOP)\jv\llvm_s\LLVMFunction.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMValue.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeArray.$(O) LLVMTypeArray.$(H): LLVMTypeArray.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeSequential.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypePointer.$(O) LLVMTypePointer.$(H): LLVMTypePointer.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeSequential.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMTypeVector.$(O) LLVMTypeVector.$(H): LLVMTypeVector.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMType.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMTypeSequential.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\sunit\stx_goodies_sunit.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\stx_libbasic.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/jv_llvm_s.st	Wed Aug 12 06:45:40 2015 +0100
+++ b/jv_llvm_s.st	Fri Aug 14 06:26:02 2015 +0100
@@ -149,6 +149,7 @@
         LLVMConstant
         LLVMDLLStorageClass
         LLVMDiagnosticSeverity
+        LLVMError
         LLVMIntPredicate
         LLVMLandingPadClauseTy
         LLVMLinkage
@@ -162,6 +163,7 @@
         #'jv_llvm_s'
         (LLVMExamples autoload)
         LLVMObject
+        LLVMTypeError
         LLVMBasicBlock
         LLVMContext
         LLVMDiagnosticInfo
@@ -170,6 +172,7 @@
         LLVMPassRegistry
         LLVMTargetLibraryInfo
         LLVMType
+        LLVMTypeMismatchError
         LLVMUse
         LLVMValue
         LLVMBuilder
@@ -181,7 +184,24 @@
         LLVMModuleProvider
         LLVMPassManager
         LLVMTargetData
+        LLVMTypeDouble
+        LLVMTypeFP128
+        LLVMTypeFloat
+        LLVMTypeFunction
+        LLVMTypeHalt
+        LLVMTypeInteger
+        LLVMTypeLabel
+        LLVMTypeMetadata
+        #'LLVMTypePPC_FP128'
+        LLVMTypeSequential
+        LLVMTypeStruct
+        LLVMTypeVoid
+        #'LLVMTypeX86_FP80'
+        #'LLVMTypeX86_MMX'
         LLVMStXMethod
+        LLVMTypeArray
+        LLVMTypePointer
+        LLVMTypeVector
     )
 !
 
--- a/libInit.cc	Wed Aug 12 06:45:40 2015 +0100
+++ b/libInit.cc	Fri Aug 14 06:26:02 2015 +0100
@@ -38,6 +38,7 @@
 _LLVMConstant_Init(pass,__pRT__,snd);
 _LLVMDLLStorageClass_Init(pass,__pRT__,snd);
 _LLVMDiagnosticSeverity_Init(pass,__pRT__,snd);
+_LLVMError_Init(pass,__pRT__,snd);
 _LLVMIntPredicate_Init(pass,__pRT__,snd);
 _LLVMLandingPadClauseTy_Init(pass,__pRT__,snd);
 _LLVMLinkage_Init(pass,__pRT__,snd);
@@ -50,6 +51,7 @@
 _LLVMVisibility_Init(pass,__pRT__,snd);
 _jv_137llvm_137s_Init(pass,__pRT__,snd);
 _LLVMObject_Init(pass,__pRT__,snd);
+_LLVMTypeError_Init(pass,__pRT__,snd);
 _LLVMBasicBlock_Init(pass,__pRT__,snd);
 _LLVMContext_Init(pass,__pRT__,snd);
 _LLVMDiagnosticInfo_Init(pass,__pRT__,snd);
@@ -58,6 +60,7 @@
 _LLVMPassRegistry_Init(pass,__pRT__,snd);
 _LLVMTargetLibraryInfo_Init(pass,__pRT__,snd);
 _LLVMType_Init(pass,__pRT__,snd);
+_LLVMTypeMismatchError_Init(pass,__pRT__,snd);
 _LLVMUse_Init(pass,__pRT__,snd);
 _LLVMValue_Init(pass,__pRT__,snd);
 _LLVMBuilder_Init(pass,__pRT__,snd);
@@ -69,7 +72,24 @@
 _LLVMModuleProvider_Init(pass,__pRT__,snd);
 _LLVMPassManager_Init(pass,__pRT__,snd);
 _LLVMTargetData_Init(pass,__pRT__,snd);
+_LLVMTypeDouble_Init(pass,__pRT__,snd);
+_LLVMTypeFP128_Init(pass,__pRT__,snd);
+_LLVMTypeFloat_Init(pass,__pRT__,snd);
+_LLVMTypeFunction_Init(pass,__pRT__,snd);
+_LLVMTypeHalt_Init(pass,__pRT__,snd);
+_LLVMTypeInteger_Init(pass,__pRT__,snd);
+_LLVMTypeLabel_Init(pass,__pRT__,snd);
+_LLVMTypeMetadata_Init(pass,__pRT__,snd);
+_LLVMTypePPC_137FP128_Init(pass,__pRT__,snd);
+_LLVMTypeSequential_Init(pass,__pRT__,snd);
+_LLVMTypeStruct_Init(pass,__pRT__,snd);
+_LLVMTypeVoid_Init(pass,__pRT__,snd);
+_LLVMTypeX86_137FP80_Init(pass,__pRT__,snd);
+_LLVMTypeX86_137MMX_Init(pass,__pRT__,snd);
 _LLVMStXMethod_Init(pass,__pRT__,snd);
+_LLVMTypeArray_Init(pass,__pRT__,snd);
+_LLVMTypePointer_Init(pass,__pRT__,snd);
+_LLVMTypeVector_Init(pass,__pRT__,snd);
 
 _jv_137llvm_137s_extensions_Init(pass,__pRT__,snd);
 __END_PACKAGE__();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/LLVMTypeTests.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,173 @@
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+"{ Package: 'jv:llvm_s/tests' }"
+
+"{ NameSpace: Smalltalk }"
+
+TestCase subclass:#LLVMTypeTests
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'LLVM-S-Core-Types-Tests'
+!
+
+!LLVMTypeTests class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (C) 2015-now Jan Vrany
+
+    This code is not an open-source (yet). You may use this code
+    for your own experiments and projects, given that:
+
+    * all modification to the code will be sent to the
+      original author for inclusion in future releases
+    * this is not used in any commercial software
+
+    This license is provisional and may (will) change in
+    a future.
+"
+! !
+
+!LLVMTypeTests methodsFor:'tests - function types'!
+
+test_function_01
+    | ftype |
+
+    ftype := LLVMType function: { } returning: LLVMType void.
+
+    self assert: ftype isFunctionType.
+    self assert: ftype returnType isVoidType.
+    self assert: ftype numParams == 0.
+    self assert: ftype parameterTypes = #().
+
+    ftype := LLVMType function: { LLVMType intptr } returning: LLVMType void.
+
+    self assert: ftype isFunctionType.
+    self assert: ftype returnType isVoidType.
+    self assert: ftype numParams == 1.
+    self assert: ftype parameterTypes = { LLVMType intptr }.
+
+    ftype := LLVMType function: { LLVMType intptr . LLVMType intptr pointer } returning: LLVMType half.
+
+    self assert: ftype isFunctionType.
+    self assert: ftype returnType isHalfType.
+    self assert: ftype numParams == 2.
+    self assert: ftype parameterTypes = { LLVMType intptr . LLVMType intptr pointer }
+
+    "Created: / 13-08-2015 / 18:38:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeTests methodsFor:'tests - other'!
+
+test_sizeInBits_01
+
+    self assert: LLVMType int1 sizeInBits == 1.
+    self assert: LLVMType int8 sizeInBits == 8.
+    self assert: LLVMType int16 sizeInBits == 16.
+    self assert: LLVMType int32 sizeInBits == 32.
+    self assert: LLVMType int64 sizeInBits == 64.
+
+    self assert: LLVMType half sizeInBits == 16.
+    self assert: LLVMType float sizeInBits == 32.
+    self assert: LLVMType double sizeInBits == 64.
+    self assert: LLVMType x86fp80 sizeInBits == 80.
+    self assert: LLVMType fp128 sizeInBits == 128.
+
+    "Created: / 13-08-2015 / 18:46:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeTests methodsFor:'tests - sequential types'!
+
+test_array_01
+    | type ptype |
+
+    type := LLVMType int8.
+    ptype := type array:13.
+
+    self assert: ptype isArrayType.
+    self assert: ptype elementType = type.
+    self assert: ptype sizeInElements = 13.
+
+    type := LLVMType x86mmx.
+    ptype := type array: 13.
+
+    self assert: ptype isArrayType.
+    self assert: ptype elementType = type.
+    self assert: ptype sizeInElements = 13.
+
+    "Created: / 13-08-2015 / 19:08:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_pointer_01
+    | type ptype |
+
+    type := LLVMType int8.
+    ptype := type pointer.
+
+    self assert: ptype isPointerType.
+    self assert: ptype elementType = type.
+
+    type := LLVMType x86mmx.
+    ptype := type pointer.
+
+    self assert: ptype isPointerType.
+    self assert: ptype elementType = type
+
+    "Created: / 13-08-2015 / 19:03:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_vector_01
+    | type ptype |
+
+    type := LLVMType int8.
+    ptype := type vector:13.
+
+    self assert: ptype isVectorType.
+    self assert: ptype elementType = type.
+    self assert: ptype sizeInElements = 13.
+
+    type := LLVMType x86mmx.
+    ptype := type vector: 13.
+
+    self assert: ptype isVectorType.
+    self assert: ptype elementType = type.
+    self assert: ptype sizeInElements = 13.
+
+    "Created: / 13-08-2015 / 19:09:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVMTypeTests methodsFor:'tests - struct'!
+
+test_struct_01
+    | struct |
+
+    struct := LLVMType struct: { LLVMType int8 . LLVMType char pointer }.
+
+    self assert: struct isStructType.
+    self deny: struct isPacked.
+    self deny: struct isPacked.
+    self assert: struct numElements == 2.
+    self assert: struct elementTypes = { LLVMType int8 . LLVMType char pointer }.
+    self assert: (struct elementTypeAt: 1) = LLVMType int8.
+    self assert: (struct elementTypeAt: 2) = LLVMType char pointer .
+
+    self should: [ struct elementTypeAt: 0 ] raise: LLVMTypeError.
+    self should: [ struct elementTypeAt: 3 ] raise: LLVMTypeError.
+
+    self assert: struct pointer elementType = struct
+
+    "Created: / 14-08-2015 / 06:16:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/Make.proto	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,132 @@
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: jv_llvm_s_tests.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# The Makefile as generated by this Make.proto supports the following targets:
+#    make         - compile all st-files to a classLib
+#    make clean   - clean all temp files
+#    make clobber - clean all
+#
+# This file contains definitions for Unix based platforms.
+# It shares common definitions with the win32-make in Make.spec.
+
+#
+# position (of this package) in directory hierarchy:
+# (must point to ST/X top directory, for tools and includes)
+TOP=../../../stx
+INCLUDE_TOP=$(TOP)/..
+
+# subdirectories where targets are to be made:
+SUBDIRS=
+
+
+# subdirectories where Makefiles are to be made:
+# (only define if different from SUBDIRS)
+# ALLSUBDIRS=
+
+REQUIRED_SUPPORT_DIRS=
+
+# if your embedded C code requires any system includes,
+# add the path(es) here:,
+# ********** OPTIONAL: MODIFY the next lines ***
+# LOCALINCLUDES=-Ifoo -Ibar
+LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/llvm_s -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
+
+
+# if you need any additional defines for embedded C code,
+# add them here:,
+# ********** OPTIONAL: MODIFY the next lines ***
+# LOCALDEFINES=-Dfoo -Dbar -DDEBUG
+LOCALDEFINES=
+
+LIBNAME=libjv_llvm_s_tests
+STCLOCALOPT='-package=$(PACKAGE)' -I. $(LOCALINCLUDES) $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) -headerDir=.  -varPrefix=$(LIBNAME)
+
+
+# ********** OPTIONAL: MODIFY the next line ***
+# additional C-libraries that should be pre-linked with the class-objects
+LD_OBJ_LIBS=
+LOCAL_SHARED_LIBS=
+
+
+# ********** OPTIONAL: MODIFY the next line ***
+# additional C targets or libraries should be added below
+LOCAL_EXTRA_TARGETS=
+
+OBJS= $(COMMON_OBJS) $(UNIX_OBJS)
+
+
+
+all:: preMake classLibRule postMake
+
+pre_objs::  
+
+
+
+
+
+
+# Enforce recompilation of package definition class if Mercurial working
+# copy state changes. Together with --guessVersion it ensures that package
+# definition class always contains correct binary revision string.
+ifneq (**NOHG**, $(shell hg root 2> /dev/null || echo -n '**NOHG**'))
+jv_llvm_s_tests.$(O): $(shell hg root)/.hg/dirstate
+endif
+
+
+
+
+# run default testsuite for this package
+test: $(TOP)/goodies/builder/reports
+	$(MAKE) -C $(TOP)/goodies/builder/reports -f Makefile.init
+	$(TOP)/goodies/builder/reports/report-runner.sh -D . -r Builder::TestReport -p $(PACKAGE)
+
+
+
+# add more install actions here
+install::
+
+# add more install actions for aux-files (resources) here
+installAux::
+
+# add more preMake actions here
+preMake::
+
+# add more postMake actions here
+postMake:: cleanjunk
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+	cd $(TOP)/libbasic && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/libbasic2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/libview && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/libview2 && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+	cd $(TOP)/goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES)"
+
+
+
+# build all packages containing referenced classes for this package
+# they are not needed to compile the package (but later, to load it)
+references:
+
+
+cleanjunk::
+	-rm -f *.s *.s2
+
+clean::
+	-rm -f *.o *.H
+
+clobber:: clean
+	-rm -f *.so *.dll
+
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)LLVMTypeTests.$(O) LLVMTypeTests.$(H): LLVMTypeTests.st $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)jv_llvm_s_tests.$(O) jv_llvm_s_tests.$(H): jv_llvm_s_tests.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/Make.spec	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,65 @@
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: jv_llvm_s_tests.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# This file contains specifications which are common to all platforms.
+#
+
+# Do NOT CHANGE THESE DEFINITIONS
+# (otherwise, ST/X will have a hard time to find out the packages location from its packageID,
+#  to find the source code of a class and to find the library for a package)
+MODULE=jv
+MODULE_DIR=llvm_s/tests
+PACKAGE=$(MODULE):$(MODULE_DIR)
+
+
+# Argument(s) to the stc compiler (stc --usage).
+#  -headerDir=. : create header files locally
+#                (if removed, they will be created as common
+#  -Pxxx       : defines the package
+#  -Zxxx       : a prefix for variables within the classLib
+#  -Dxxx       : defines passed to to CC for inline C-code
+#  -Ixxx       : include path passed to CC for inline C-code
+#  +optspace   : optimized for space
+#  +optspace2  : optimized more for space
+#  +optspace3  : optimized even more for space
+#  +optinline  : generate inline code for some ST constructs
+#  +inlineNew  : additionally inline new
+#  +inlineMath : additionally inline some floatPnt math stuff
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCLOCALOPTIMIZATIONS=+optinline +inlineNew
+# STCLOCALOPTIMIZATIONS=+optspace3
+STCLOCALOPTIMIZATIONS=+optspace3
+
+
+# Argument(s) to the stc compiler (stc --usage).
+#  -warn            : no warnings
+#  -warnNonStandard : no warnings about ST/X extensions
+#  -warnEOLComments : no warnings about EOL comment extension
+#  -warnPrivacy     : no warnings about privateClass extension
+#  -warnUnused      : no warnings about unused variables
+#
+# ********** OPTIONAL: MODIFY the next line(s) ***
+# STCWARNINGS=-warn
+# STCWARNINGS=-warnNonStandard
+# STCWARNINGS=-warnEOLComments
+STCWARNINGS=-warnNonStandard
+
+COMMON_CLASSES= \
+	LLVMTypeTests \
+	jv_llvm_s_tests \
+
+
+
+
+COMMON_OBJS= \
+    $(OUTDIR_SLASH)LLVMTypeTests.$(O) \
+    $(OUTDIR_SLASH)jv_llvm_s_tests.$(O) \
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/Makefile.init	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,27 @@
+#
+# DO NOT EDIT
+#
+# make uses this file (Makefile) only, if there is no
+# file named "makefile" (lower-case m) in the same directory.
+# My only task is to generate the real makefile and call make again.
+# Thereafter, I am no longer used and needed.
+#
+# MACOSX caveat:
+#   as filenames are not case sensitive (in a default setup),
+#   we cannot use the above trick. Therefore, this file is now named
+#   "Makefile.init", and you have to execute "make -f Makefile.init" to
+#   get the initial makefile.  This is now also done by the toplevel CONFIG
+#   script.
+
+.PHONY: run
+
+run: makefile
+	$(MAKE) -f makefile
+
+#only needed for the definition of $(TOP)
+include Make.proto
+
+makefile: mf
+
+mf:
+	$(TOP)/rules/stmkmf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/abbrev.stc	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,5 @@
+# automagically generated by the project definition
+# this file is needed for stc to be able to compile modules independently.
+# it provides information about a classes filename, category and especially namespace.
+LLVMTypeTests LLVMTypeTests jv:llvm_s/tests 'LLVM-S-Core-Types-Tests' 1
+jv_llvm_s_tests jv_llvm_s_tests jv:llvm_s/tests '* Projects & Packages *' 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/bc.mak	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,87 @@
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: jv_llvm_s_tests.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# Notice, that the name bc.mak is historical (from times, when only borland c was supported).
+# This file contains make rules for the win32 platform using either borland-bcc or visual-c.
+# It shares common definitions with the unix-make in Make.spec.
+# The bc.mak supports the following targets:
+#    bmake         - compile all st-files to a classLib (dll)
+#    bmake clean   - clean all temp files
+#    bmake clobber - clean all
+#
+# Historic Note:
+#  this used to contain only rules to make with borland
+#    (called via bmake, by "make.exe -f bc.mak")
+#  this has changed; it is now also possible to build using microsoft visual c
+#    (called via vcmake, by "make.exe -f bc.mak -DUSEVC")
+#
+TOP=..\..\..\stx
+INCLUDE_TOP=$(TOP)\..
+
+
+
+!INCLUDE $(TOP)\rules\stdHeader_bc
+
+!INCLUDE Make.spec
+
+LIBNAME=libjv_llvm_s_tests
+MODULE_PATH=llvm_s\tests
+RESFILES=tests.$(RES)
+
+
+
+LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\llvm_s -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
+LOCALDEFINES=
+
+STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
+LOCALLIBS=
+
+OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
+
+ALL::  classLibRule
+
+classLibRule: $(OUTDIR) $(OUTDIR)$(LIBNAME).dll
+
+!INCLUDE $(TOP)\rules\stdRules_bc
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+	pushd ..\..\..\stx\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\..\stx\libbasic2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\..\stx\libview & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\..\stx\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+	pushd ..\..\..\stx\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
+
+
+
+
+
+
+test: $(TOP)\goodies\builder\reports\NUL
+	pushd $(TOP)\goodies\builder\reports & $(MAKE_BAT)
+	$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
+        
+clean::
+	del *.$(CSUFFIX)
+
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)LLVMTypeTests.$(O) LLVMTypeTests.$(H): LLVMTypeTests.st $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)jv_llvm_s_tests.$(O) jv_llvm_s_tests.$(H): jv_llvm_s_tests.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
+
+# **Must be at end**
+
+# Enforce recompilation of package definition class if Mercurial working
+# copy state changes. Together with --guessVersion it ensures that package
+# definition class always contains correct binary revision string.
+!IFDEF HGROOT
+$(OUTDIR)jv_llvm_s_tests.$(O): $(HGROOT)\.hg\dirstate
+!ENDIF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/bmake.bat	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,10 @@
+@REM -------
+@REM make using Borland bcc32
+@REM type bmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+@SET DEFINES=
+
+make.exe -N -f bc.mak  %DEFINES% %*
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/jv_llvm_s_tests.st	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,121 @@
+"{ Package: 'jv:llvm_s/tests' }"
+
+"{ NameSpace: Smalltalk }"
+
+LibraryDefinition subclass:#jv_llvm_s_tests
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'* Projects & Packages *'
+!
+
+
+!jv_llvm_s_tests class methodsFor:'description'!
+
+excludedFromPreRequisites
+    "list packages which are to be explicitely excluded from the automatic constructed
+     prerequisites list. If empty, everything that is found along the inheritance of any of
+     my classes is considered to be a prerequisite package."
+
+    ^ #(
+    )
+!
+
+mandatoryPreRequisites
+    "list packages which are mandatory as a prerequisite.
+     This are packages containing superclasses of my classes and classes which
+     are extended by myself.
+     They are mandatory, because we need these packages as a prerequisite for loading and compiling.
+     This method is generated automatically,
+     by searching along the inheritance chain of all of my classes."
+
+    ^ #(
+        #'stx:goodies/sunit'    "TestAsserter - superclass of LLVMTypeTests"
+        #'stx:libbasic'    "LibraryDefinition - superclass of jv_llvm_s_tests"
+    )
+!
+
+referencedPreRequisites
+    "list packages which are a prerequisite, because they contain
+     classes which are referenced by my classes.
+     We do not need these packages as a prerequisite for compiling or loading,
+     however, a class from it may be referenced during execution and having it
+     unloaded then may lead to a runtime doesNotUnderstand error, unless the caller
+     includes explicit checks for the package being present.
+     This method is generated automatically,
+     by searching all classes (and their packages) which are referenced by my classes."
+
+    ^ #(
+        #'jv:llvm_s'    "LLVMType - referenced by LLVMTypeTests>>test_array_01"
+    )
+!
+
+subProjects
+    "list packages which are known as subprojects.
+     The generated makefile will enter those and make there as well.
+     However: they are not forced to be loaded when a package is loaded;
+     for those, redefine requiredPrerequisites."
+
+    ^ #(
+    )
+! !
+
+!jv_llvm_s_tests class methodsFor:'description - contents'!
+
+classNamesAndAttributes
+    "lists the classes which are to be included in the project.
+     Each entry in the list may be: a single class-name (symbol),
+     or an array-literal consisting of class name and attributes.
+     Attributes are: #autoload or #<os> where os is one of win32, unix,..."
+
+    ^ #(
+        "<className> or (<className> attributes...) in load order"
+        LLVMTypeTests
+        #'jv_llvm_s_tests'
+    )
+!
+
+extensionMethodNames
+    "list class/selector pairs of extensions.
+     A correponding method with real names must be present in my concrete subclasses"
+
+    ^ #(
+    )
+! !
+
+!jv_llvm_s_tests class methodsFor:'description - project information'!
+
+companyName
+    "Returns a company string which will appear in <lib>.rc.
+     Under win32, this is placed into the dlls file-info"
+
+    ^ 'My Company'
+!
+
+description
+    "Returns a description string which will appear in nt.def / bc.def"
+
+    ^ 'Class Library'
+!
+
+legalCopyright
+    "Returns a copyright string which will appear in <lib>.rc.
+     Under win32, this is placed into the dlls file-info"
+
+    ^ 'My CopyRight or CopyLeft'
+!
+
+productName
+    "Returns a product name which will appear in <lib>.rc.
+     Under win32, this is placed into the dlls file-info.
+     This method is usually redefined in a concrete application definition"
+
+    ^ 'LibraryName'
+! !
+
+!jv_llvm_s_tests class methodsFor:'documentation'!
+
+version_HG
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/libInit.cc	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,35 @@
+/*
+ * $Header$
+ *
+ * DO NOT EDIT
+ * automagically generated from the projectDefinition: jv_llvm_s_tests.
+ */
+#define __INDIRECTVMINITCALLS__
+#include <stc.h>
+
+#ifdef WIN32
+# pragma codeseg INITCODE "INITCODE"
+#endif
+
+#if defined(INIT_TEXT_SECTION) || defined(DLL_EXPORT)
+DLL_EXPORT void _libjv_llvm_s_tests_Init() INIT_TEXT_SECTION;
+DLL_EXPORT void _libjv_llvm_s_tests_InitDefinition() INIT_TEXT_SECTION;
+#endif
+
+void _libjv_llvm_s_tests_InitDefinition(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libjv_llvm_s_tests__DFN", _libjv_llvm_s_tests_InitDefinition, "jv:llvm_s/tests");
+_jv_137llvm_137s_137tests_Init(pass,__pRT__,snd);
+
+__END_PACKAGE__();
+}
+
+void _libjv_llvm_s_tests_Init(pass, __pRT__, snd)
+OBJ snd; struct __vmData__ *__pRT__; {
+__BEGIN_PACKAGE2__("libjv_llvm_s_tests", _libjv_llvm_s_tests_Init, "jv:llvm_s/tests");
+_LLVMTypeTests_Init(pass,__pRT__,snd);
+_jv_137llvm_137s_137tests_Init(pass,__pRT__,snd);
+
+
+__END_PACKAGE__();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/mingwmake.bat	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,13 @@
+@REM -------
+@REM make using mingw gnu compiler
+@REM type mingwmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+@SET DEFINES=
+
+@pushd ..\..\..\stx\rules
+@call find_mingw.bat
+@popd
+make.exe -N -f bc.mak %DEFINES% %USEMINGW_ARG% %*
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/tests.rc	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,37 @@
+//
+// DO NOT EDIT
+// automagically generated from the projectDefinition: jv_llvm_s_tests.
+//
+VS_VERSION_INFO VERSIONINFO
+  FILEVERSION     6,2,32767,32767
+  PRODUCTVERSION  6,2,5,0
+#if (__BORLANDC__)
+  FILEFLAGSMASK   VS_FF_DEBUG | VS_FF_PRERELEASE
+  FILEFLAGS       VS_FF_PRERELEASE | VS_FF_SPECIALBUILD
+  FILEOS          VOS_NT_WINDOWS32
+  FILETYPE        VFT_DLL
+  FILESUBTYPE     VS_USER_DEFINED
+#endif
+
+BEGIN
+  BLOCK "StringFileInfo"
+  BEGIN
+    BLOCK "040904E4"
+    BEGIN
+      VALUE "CompanyName", "My Company\0"
+      VALUE "FileDescription", "Class Library (LIB)\0"
+      VALUE "FileVersion", "6.2.32767.32767\0"
+      VALUE "InternalName", "jv:llvm_s/tests\0"
+      VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
+      VALUE "ProductName", "LibraryName\0"
+      VALUE "ProductVersion", "6.2.5.0\0"
+      VALUE "ProductDate", "Fri, 14 Aug 2015 05:21:52 GMT\0"
+    END
+
+  END
+
+  BLOCK "VarFileInfo"
+  BEGIN                               //  Language   |    Translation
+    VALUE "Translation", 0x409, 0x4E4 // U.S. English, Windows Multilingual
+  END
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/vcmake.bat	Fri Aug 14 06:26:02 2015 +0100
@@ -0,0 +1,17 @@
+@REM -------
+@REM make using Microsoft Visual C compiler
+@REM type vcmake, and wait...
+@REM do not edit - automatically generated from ProjectDefinition
+@REM -------
+
+@if not defined VSINSTALLDIR (
+    pushd ..\..\..\stx\rules
+    call vcsetup.bat
+    popd
+)
+@SET DEFINES=
+
+make.exe -N -f bc.mak -DUSEVC=1 %DEFINES% %*
+
+
+