Added mappings for LLVM C and LLVM C Extensions
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 12 Aug 2015 07:32:13 +0100
changeset 43 9327987437ae
parent 42 a428eeead6ad
child 44 e698efa3708b
Added mappings for LLVM C and LLVM C Extensions These are used to generate C callouts for jv:llvm_s project.
Cface__CArgumentNode.st
Cface__CArrayNode.st
Cface__CDefinitionFileNode.st
Cface__CDefinitionNode.st
Cface__CDefinitionScanner.st
Cface__CDerivedTypeNode.st
Cface__CEnumNode.st
Cface__CEnumValueNode.st
Cface__CFunctionTypeNode.st
Cface__CLongNode.st
Cface__CNoNode.st
Cface__CStructFieldNode.st
Cface__CStructNode.st
Cface__CStructuredNode.st
Cface__CUnionNode.st
Cface__GTKMapping.st
Cface__Generator.st
Cface__GeneratorCommand.st
Cface__LLVM_C.st
Cface__LLVM_C_EXT.st
Cface__Libgit2Mapping.st
Cface__Platform.st
Cface__SVNMapping.st
Cface__SmalltalkX.st
Cface__TypeMapping.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jv_cface.st
libInit.cc
resources/examples/llvm-c-ext/Makefile
resources/examples/llvm-c/Makefile
--- a/Cface__CArgumentNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CArgumentNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -76,3 +76,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CArrayNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CArrayNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -83,3 +83,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CDefinitionFileNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CDefinitionFileNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -93,3 +93,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CDefinitionNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CDefinitionNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -88,3 +88,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CDefinitionScanner.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CDefinitionScanner.st	Wed Aug 12 07:32:13 2015 +0100
@@ -3265,3 +3265,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CDerivedTypeNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CDerivedTypeNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -169,3 +169,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CEnumNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CEnumNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -138,3 +138,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CEnumValueNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CEnumValueNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -86,3 +86,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CFunctionTypeNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CFunctionTypeNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -90,3 +90,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CLongNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CLongNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -95,6 +95,11 @@
 
 !CLongNode class methodsFor:'documentation'!
 
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+!
+
 version_SVN
     ^ '$Id$'
 ! !
--- a/Cface__CNoNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CNoNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -32,3 +32,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CStructFieldNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CStructFieldNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -119,3 +119,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CStructNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CStructNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -84,3 +84,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CStructuredNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CStructuredNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -110,3 +110,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__CUnionNode.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__CUnionNode.st	Wed Aug 12 07:32:13 2015 +0100
@@ -93,3 +93,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__GTKMapping.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__GTKMapping.st	Wed Aug 12 07:32:13 2015 +0100
@@ -54,3 +54,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__Generator.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__Generator.st	Wed Aug 12 07:32:13 2015 +0100
@@ -271,3 +271,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__GeneratorCommand.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__GeneratorCommand.st	Wed Aug 12 07:32:13 2015 +0100
@@ -204,3 +204,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cface__LLVM_C.st	Wed Aug 12 07:32:13 2015 +0100
@@ -0,0 +1,173 @@
+"{ Package: 'jv:cface' }"
+
+"{ NameSpace: Cface }"
+
+TypeMapping subclass:#LLVM_C
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Cface-Mappings'
+!
+
+!LLVM_C class methodsFor:'documentation'!
+
+documentation
+"
+    Mappings for LLVM C API. Used to generate C callouts
+    for jv:llvm_s project.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+        https://bitbucket.org/janvrany/jv-llvm-s/
+
+"
+! !
+
+!LLVM_C class methodsFor:'generating'!
+
+generate
+    |llvmcDir llvmcDef|
+
+    llvmcDir := (Smalltalk getPackageDirectoryForPackage: 'jv:cface') / 'resources'/'examples'/'llvm-c'.
+    llvmcDef := llvmcDir / 'llvm-c.def'.  
+
+    ^Cface::Platform theInstance generatorCommand
+        definitions: llvmcDef asFilename;
+        mappings: self new;
+        process
+
+    "Created: / 06-07-2015 / 06:53:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-08-2015 / 06:54:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C methodsFor:'accessing'!
+
+smalltalkPackage
+
+    ^#'jv:llvm_s'
+
+    "Created: / 03-07-2008 / 21:14:47 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 12-08-2015 / 06:56:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+smalltalkSelectorForFunction: cFunction
+
+    ^String streamContents:
+        [:s|
+        | nm |
+
+        nm := cFunction cName.
+        (nm startsWith:'LLVM') ifTrue:[ 
+            nm := nm copyFrom: 5.
+        ] ifFalse:[ 
+            nm := nm copy.
+        ].
+        s nextPutAll:nm.
+        cFunction arguments notEmptyOrNil ifTrue:
+            [s nextPut:$:].
+        cFunction arguments size > 1 ifTrue:
+            [(cFunction arguments copyFrom:2) do:
+                [:argument|
+                s 
+                    nextPutAll: '_:']]]
+
+    "Created: / 17-02-2008 / 22:16:03 / janfrog"
+    "Modified: / 18-02-2008 / 14:58:43 / janfrog"
+    "Modified: / 04-07-2008 / 15:33:31 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 01-07-2015 / 10:57:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C methodsFor:'filtering'!
+
+shouldIgnoreStruct: cStructNode
+    ^ (cStructNode cName startsWith: 'LLVMOpaque') or:[ super shouldIgnoreStruct: cStructNode  ]
+
+    "Created: / 06-07-2015 / 07:00:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-07-2015 / 23:12:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C methodsFor:'mapping - categories'!
+
+smalltalkCategoryForDerivedType:cType
+    | className class |
+
+    className := cType smalltalkName asSymbol.
+    (className notNil and:[(class := Smalltalk at: className) notNil]) ifTrue:[
+        ^class category
+    ].
+    ^'LLVM-Core'
+
+    "Created: / 05-09-2012 / 11:15:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 30-06-2015 / 13:53:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+smalltalkCategoryForEnum:cType
+    | className class |
+
+    className := cType smalltalkName asSymbol.
+    (className notNil and:[(class := Smalltalk at: className) notNil]) ifTrue:[
+        ^class category
+    ].
+    ^'LLVM-Core-Constants'
+
+    "Created: / 07-07-2015 / 18:21:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C methodsFor:'mapping - class names'!
+
+smalltalkClassNameForDerivedType: type      
+    "Answers class which should contain function call"
+
+    | baseName |
+
+    baseName := super smalltalkClassNameForDerivedType:type.
+    (baseName endsWith: 'Ref') ifTrue:[
+        baseName := baseName copyTo: baseName size - 3
+    ].
+    ^baseName
+
+    "Created: / 30-06-2015 / 13:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-07-2015 / 09:32:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 01-07-2015 / 16:23:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+smalltalkClassNameForFunction:cFunction 
+"/    | cFunctionName firstArgType returnType |
+"/
+"/    cFunctionName := cFunction cName.
+"/    cFunctionName = 'LLVMCreateMemoryBufferWithContentsOfFile' ifTrue:[ 
+"/        ^'LLVMMemoryBuffer'
+"/    ].
+"/    cFunctionName = 'LLVMInitializeMCJITCompilerOptions' ifTrue:[ 
+"/        ^'LLVMMCJITCompilerOptions'
+"/    ].
+"/
+"/
+"/    cFunction arguments notEmpty ifTrue:[
+"/        firstArgType := cFunction arguments first type.
+"/        (firstArgType resolved isCPointerNode and:[ firstArgType resolved type resolved isCStructNode ]) 
+"/            ifTrue:[ ^ self smalltalkClassNameForDerivedType: firstArgType ].
+"/    ].
+"/    returnType := cFunction return.
+"/    (returnType resolved isCPointerNode and:[ returnType resolved type resolved isCStructNode ]) 
+"/        ifTrue:[ ^ self smalltalkClassNameForDerivedType: returnType].
+
+    ^ #LLVM
+
+    "Created: / 01-07-2015 / 06:12:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-07-2015 / 09:50:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cface__LLVM_C_EXT.st	Wed Aug 12 07:32:13 2015 +0100
@@ -0,0 +1,109 @@
+"{ Package: 'jv:cface' }"
+
+"{ NameSpace: Cface }"
+
+LLVM_C subclass:#LLVM_C_EXT
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Cface-Mappings'
+!
+
+!LLVM_C_EXT class methodsFor:'documentation'!
+
+documentation
+"
+    Mappings for LLVM C Extensions API. Used to generate C callouts
+    for jv:llvm_s project.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+        https://bitbucket.org/janvrany/jv-llvm-s/llvm_c_ext
+
+"
+! !
+
+!LLVM_C_EXT class methodsFor:'generating'!
+
+generate
+    | llvmcextDir llvmcextDef |
+
+    llvmcextDir := (Smalltalk getPackageDirectoryForPackage: 'jv:cface') / 'resources'/'examples'/'llvm-c-ext'.
+    llvmcextDef := llvmcextDir / 'llvm-c-ext.def'.  
+
+    ^Cface::Platform theInstance generatorCommand
+        definitions: llvmcextDef asFilename;
+        mappings: self new;
+        process
+
+    "Created: / 06-07-2015 / 06:53:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 12-08-2015 / 06:56:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C_EXT methodsFor:'accessing'!
+
+definitions:definitionFile
+    super definitions:definitionFile.
+
+    "/ A hack to set Smalltalk classname for LLVMContextRef as it is not
+    "/ typedefd in headers
+    definitionFile definitions do:[:each | 
+        ((each isKindOf: CTypedefNode) and:[ each cName = 'LLVMContextRef' ]) ifTrue:[ 
+            each smalltalkName: #LLVMContext  
+        ].
+    ].
+
+    "Created: / 12-08-2015 / 07:24:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!LLVM_C_EXT methodsFor:'mapping - class names'!
+
+smalltalkClassNameForDerivedType: type      
+    "Answers class which should contain function call"
+
+    | baseName |
+
+    baseName := super smalltalkClassNameForDerivedType:type.
+    (baseName endsWith: 'Ref') ifTrue:[
+        baseName := baseName copyTo: baseName size - 3
+    ].
+    ^baseName
+
+    "Created: / 30-06-2015 / 13:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 01-07-2015 / 09:32:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 01-07-2015 / 16:23:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+smalltalkClassNameForFunction:cFunction 
+"/    | cFunctionName firstArgType returnType |
+"/
+"/    cFunctionName := cFunction cName.
+"/    cFunctionName = 'LLVMCreateMemoryBufferWithContentsOfFile' ifTrue:[ 
+"/        ^'LLVMMemoryBuffer'
+"/    ].
+"/    cFunctionName = 'LLVMInitializeMCJITCompilerOptions' ifTrue:[ 
+"/        ^'LLVMMCJITCompilerOptions'
+"/    ].
+"/
+"/
+"/    cFunction arguments notEmpty ifTrue:[
+"/        firstArgType := cFunction arguments first type.
+"/        (firstArgType resolved isCPointerNode and:[ firstArgType resolved type resolved isCStructNode ]) 
+"/            ifTrue:[ ^ self smalltalkClassNameForDerivedType: firstArgType ].
+"/    ].
+"/    returnType := cFunction return.
+"/    (returnType resolved isCPointerNode and:[ returnType resolved type resolved isCStructNode ]) 
+"/        ifTrue:[ ^ self smalltalkClassNameForDerivedType: returnType].
+
+    ^ #LLVMCEXT
+
+    "Created: / 01-07-2015 / 06:12:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-08-2015 / 06:57:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/Cface__Libgit2Mapping.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__Libgit2Mapping.st	Wed Aug 12 07:32:13 2015 +0100
@@ -170,4 +170,5 @@
     ^ '$Id::                                                                                                                        $'
 ! !
 
+
 Libgit2Mapping initialize!
--- a/Cface__Platform.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__Platform.st	Wed Aug 12 07:32:13 2015 +0100
@@ -117,3 +117,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__SVNMapping.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__SVNMapping.st	Wed Aug 12 07:32:13 2015 +0100
@@ -91,3 +91,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__SmalltalkX.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__SmalltalkX.st	Wed Aug 12 07:32:13 2015 +0100
@@ -27,3 +27,4 @@
 version_SVN
     ^ '$Id$'
 ! !
+
--- a/Cface__TypeMapping.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/Cface__TypeMapping.st	Wed Aug 12 07:32:13 2015 +0100
@@ -18,23 +18,22 @@
     "Created: / 22-02-2009 / 22:16:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
-definitions:something
-    definitions := something.
+definitions:definitionFile
+    definitions := definitionFile.
 
     "Created: / 22-02-2009 / 22:16:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 smalltalkNamespace
-
-    ^nil
+    ^ smalltalkNamespace
 
     "Created: / 17-02-2008 / 20:51:05 / janfrog"
     "Modified: / 10-07-2008 / 20:34:14 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 07-09-2012 / 15:15:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-08-2015 / 07:23:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-smalltalkNamespace:something
-    smalltalkNamespace := something.
+smalltalkNamespace:aSymbol
+    smalltalkNamespace := aSymbol.
 
     "Created: / 10-07-2008 / 20:23:36 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
@@ -45,8 +44,8 @@
     "Created: / 03-07-2008 / 21:12:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
-smalltalkPackage:package
-    smalltalkPackage := package.
+smalltalkPackage:aSymbol
+    smalltalkPackage := aSymbol.
 
     "Created: / 03-07-2008 / 21:12:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
--- a/Make.proto	Wed Aug 12 07:49:03 2015 +0100
+++ b/Make.proto	Wed Aug 12 07:32:13 2015 +0100
@@ -161,6 +161,7 @@
 $(OUTDIR)Cface__CairoMapping.$(O) Cface__CairoMapping.$(H): Cface__CairoMapping.st $(INCLUDE_TOP)/jv/cface/Cface__TypeMapping.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__GTKMapping.$(O) Cface__GTKMapping.$(H): Cface__GTKMapping.st $(INCLUDE_TOP)/jv/cface/Cface__TypeMapping.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__Generator.$(O) Cface__Generator.$(H): Cface__Generator.st $(INCLUDE_TOP)/jv/cface/Cface__CNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cface__LLVM_C.$(O) Cface__LLVM_C.$(H): Cface__LLVM_C.st $(INCLUDE_TOP)/jv/cface/Cface__TypeMapping.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__Libgit2Mapping.$(O) Cface__Libgit2Mapping.$(H): Cface__Libgit2Mapping.st $(INCLUDE_TOP)/jv/cface/Cface__TypeMapping.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__SVNMapping.$(O) Cface__SVNMapping.$(H): Cface__SVNMapping.st $(INCLUDE_TOP)/jv/cface/Cface__TypeMapping.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__SmalltalkX.$(O) Cface__SmalltalkX.$(H): Cface__SmalltalkX.st $(INCLUDE_TOP)/jv/cface/Cface__Platform.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -177,6 +178,7 @@
 $(OUTDIR)Cface__CStructFieldNode.$(O) Cface__CStructFieldNode.$(H): Cface__CStructFieldNode.st $(INCLUDE_TOP)/jv/cface/Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CTypeNode.$(O) Cface__CTypeNode.$(H): Cface__CTypeNode.st $(INCLUDE_TOP)/jv/cface/Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CUnsignedNode.$(O) Cface__CUnsignedNode.$(H): Cface__CUnsignedNode.st $(INCLUDE_TOP)/jv/cface/Cface__CModifierNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cface__LLVM_C_EXT.$(O) Cface__LLVM_C_EXT.$(H): Cface__LLVM_C_EXT.st $(INCLUDE_TOP)/jv/cface/Cface__LLVM_C.$(H) $(INCLUDE_TOP)/jv/cface/Cface__TypeMapping.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__SmalltalkXGenerator.$(O) Cface__SmalltalkXGenerator.$(H): Cface__SmalltalkXGenerator.st $(INCLUDE_TOP)/jv/cface/Cface__CNodeVisitor.$(H) $(INCLUDE_TOP)/jv/cface/Cface__Generator.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CArrayNode.$(O) Cface__CArrayNode.$(H): Cface__CArrayNode.st $(INCLUDE_TOP)/jv/cface/Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CTypeNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CBuiltinNode.$(O) Cface__CBuiltinNode.$(H): Cface__CBuiltinNode.st $(INCLUDE_TOP)/jv/cface/Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CNode.$(H) $(INCLUDE_TOP)/jv/cface/Cface__CTypeNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Wed Aug 12 07:49:03 2015 +0100
+++ b/Make.spec	Wed Aug 12 07:32:13 2015 +0100
@@ -65,6 +65,7 @@
 	Cface::CairoMapping \
 	Cface::GTKMapping \
 	Cface::Generator \
+	Cface::LLVM_C \
 	Cface::Libgit2Mapping \
 	Cface::SVNMapping \
 	Cface::SmalltalkX \
@@ -81,6 +82,7 @@
 	Cface::CStructFieldNode \
 	Cface::CTypeNode \
 	Cface::CUnsignedNode \
+	Cface::LLVM_C_EXT \
 	Cface::SmalltalkXGenerator \
 	Cface::CArrayNode \
 	Cface::CBuiltinNode \
@@ -118,6 +120,7 @@
     $(OUTDIR_SLASH)Cface__CairoMapping.$(O) \
     $(OUTDIR_SLASH)Cface__GTKMapping.$(O) \
     $(OUTDIR_SLASH)Cface__Generator.$(O) \
+    $(OUTDIR_SLASH)Cface__LLVM_C.$(O) \
     $(OUTDIR_SLASH)Cface__Libgit2Mapping.$(O) \
     $(OUTDIR_SLASH)Cface__SVNMapping.$(O) \
     $(OUTDIR_SLASH)Cface__SmalltalkX.$(O) \
@@ -134,6 +137,7 @@
     $(OUTDIR_SLASH)Cface__CStructFieldNode.$(O) \
     $(OUTDIR_SLASH)Cface__CTypeNode.$(O) \
     $(OUTDIR_SLASH)Cface__CUnsignedNode.$(O) \
+    $(OUTDIR_SLASH)Cface__LLVM_C_EXT.$(O) \
     $(OUTDIR_SLASH)Cface__SmalltalkXGenerator.$(O) \
     $(OUTDIR_SLASH)Cface__CArrayNode.$(O) \
     $(OUTDIR_SLASH)Cface__CBuiltinNode.$(O) \
--- a/abbrev.stc	Wed Aug 12 07:49:03 2015 +0100
+++ b/abbrev.stc	Wed Aug 12 07:32:13 2015 +0100
@@ -15,6 +15,7 @@
 Cface::CairoMapping Cface__CairoMapping jv:cface 'Cface-Mappings' 0
 Cface::GTKMapping Cface__GTKMapping jv:cface 'Cface-Mappings' 0
 Cface::Generator Cface__Generator jv:cface 'Cface-Generators' 0
+Cface::LLVM_C Cface__LLVM_C jv:cface 'Cface-Mappings' 0
 Cface::Libgit2Mapping Cface__Libgit2Mapping jv:cface 'Cface-Mappings' 0
 Cface::SVNMapping Cface__SVNMapping jv:cface 'Cface-Mappings' 0
 Cface::SmalltalkX Cface__SmalltalkX jv:cface 'Cface-Platforms' 0
@@ -31,12 +32,12 @@
 Cface::CStructFieldNode Cface__CStructFieldNode jv:cface 'Cface-C AST' 0
 Cface::CTypeNode Cface__CTypeNode jv:cface 'Cface-C AST' 0
 Cface::CUnsignedNode Cface__CUnsignedNode jv:cface 'Cface-C AST' 0
+Cface::LLVM_C_EXT Cface__LLVM_C_EXT jv:cface 'Cface-Mappings' 0
 Cface::SmalltalkXGenerator Cface__SmalltalkXGenerator jv:cface 'Cface-Generators' 0
 Cface::CArrayNode Cface__CArrayNode jv:cface 'Cface-C AST' 0
 Cface::CBuiltinNode Cface__CBuiltinNode jv:cface 'Cface-C AST' 0
 Cface::CDerivedTypeNode Cface__CDerivedTypeNode jv:cface 'Cface-C AST' 0
 Cface::CPointerNode Cface__CPointerNode jv:cface 'Cface-C AST' 0
-Cface::CTypedefNode Cface__CTypedefNode jv:cface 'Cface-C AST' 0
 Cface::CUnresolvedTypeNode Cface__CUnresolvedTypeNode jv:cface 'Cface-C AST' 0
 Cface::CCharNode Cface__CCharNode jv:cface 'Cface-C AST' 0
 Cface::CDoubleNode Cface__CDoubleNode jv:cface 'Cface-C AST' 0
@@ -45,6 +46,7 @@
 Cface::CFunctionTypeNode Cface__CFunctionTypeNode jv:cface 'Cface-C AST' 0
 Cface::CIntNode Cface__CIntNode jv:cface 'Cface-C AST' 0
 Cface::CStructuredNode Cface__CStructuredNode jv:cface 'Cface-C AST' 0
+Cface::CTypedefNode Cface__CTypedefNode jv:cface 'Cface-C AST' 0
 Cface::CVoidNode Cface__CVoidNode jv:cface 'Cface-C AST' 0
 Cface::CWCharNode Cface__CWCharNode jv:cface 'Cface-C AST' 0
 Cface::CStructNode Cface__CStructNode jv:cface 'Cface-C AST' 0
--- a/bc.mak	Wed Aug 12 07:49:03 2015 +0100
+++ b/bc.mak	Wed Aug 12 07:32:13 2015 +0100
@@ -86,6 +86,7 @@
 $(OUTDIR)Cface__CairoMapping.$(O) Cface__CairoMapping.$(H): Cface__CairoMapping.st $(INCLUDE_TOP)\jv\cface\Cface__TypeMapping.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__GTKMapping.$(O) Cface__GTKMapping.$(H): Cface__GTKMapping.st $(INCLUDE_TOP)\jv\cface\Cface__TypeMapping.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__Generator.$(O) Cface__Generator.$(H): Cface__Generator.st $(INCLUDE_TOP)\jv\cface\Cface__CNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cface__LLVM_C.$(O) Cface__LLVM_C.$(H): Cface__LLVM_C.st $(INCLUDE_TOP)\jv\cface\Cface__TypeMapping.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__Libgit2Mapping.$(O) Cface__Libgit2Mapping.$(H): Cface__Libgit2Mapping.st $(INCLUDE_TOP)\jv\cface\Cface__TypeMapping.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__SVNMapping.$(O) Cface__SVNMapping.$(H): Cface__SVNMapping.st $(INCLUDE_TOP)\jv\cface\Cface__TypeMapping.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__SmalltalkX.$(O) Cface__SmalltalkX.$(H): Cface__SmalltalkX.st $(INCLUDE_TOP)\jv\cface\Cface__Platform.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -102,6 +103,7 @@
 $(OUTDIR)Cface__CStructFieldNode.$(O) Cface__CStructFieldNode.$(H): Cface__CStructFieldNode.st $(INCLUDE_TOP)\jv\cface\Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CTypeNode.$(O) Cface__CTypeNode.$(H): Cface__CTypeNode.st $(INCLUDE_TOP)\jv\cface\Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CUnsignedNode.$(O) Cface__CUnsignedNode.$(H): Cface__CUnsignedNode.st $(INCLUDE_TOP)\jv\cface\Cface__CModifierNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cface__LLVM_C_EXT.$(O) Cface__LLVM_C_EXT.$(H): Cface__LLVM_C_EXT.st $(INCLUDE_TOP)\jv\cface\Cface__LLVM_C.$(H) $(INCLUDE_TOP)\jv\cface\Cface__TypeMapping.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__SmalltalkXGenerator.$(O) Cface__SmalltalkXGenerator.$(H): Cface__SmalltalkXGenerator.st $(INCLUDE_TOP)\jv\cface\Cface__CNodeVisitor.$(H) $(INCLUDE_TOP)\jv\cface\Cface__Generator.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CArrayNode.$(O) Cface__CArrayNode.$(H): Cface__CArrayNode.st $(INCLUDE_TOP)\jv\cface\Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CTypeNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cface__CBuiltinNode.$(O) Cface__CBuiltinNode.$(H): Cface__CBuiltinNode.st $(INCLUDE_TOP)\jv\cface\Cface__CDefinitionNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CNode.$(H) $(INCLUDE_TOP)\jv\cface\Cface__CTypeNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/jv_cface.st	Wed Aug 12 07:49:03 2015 +0100
+++ b/jv_cface.st	Wed Aug 12 07:32:13 2015 +0100
@@ -44,7 +44,10 @@
 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 loading or compiling.
+     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."
 
@@ -70,55 +73,60 @@
      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" #( #'Cface::CDefinitionParser'
-     #'Cface::CDefinitionScanner'
-     #'Cface::CNode'
-     #'Cface::CNodeVisitor'
-     #'Cface::GeneratorCommand'
-     #'Cface::Platform'
-     #'Cface::TypeMapping'
-     #'jv_cface'
-     #'Cface::CDefinitionNode'
-     #'Cface::CModifierNode'
-     #'Cface::CNoNode'
-     #'Cface::CairoMapping'
-     #'Cface::GTKMapping'
-     #'Cface::Generator'
-     #'Cface::Libgit2Mapping'
-     #'Cface::SVNMapping'
-     #'Cface::SmalltalkX'
-     #'Cface::TypeCollector'
-     #'Cface::TypeMapper'
-     #'Cface::TypeResolver'
-     #'Cface::CArgumentNode'
-     #'Cface::CConstNode'
-     #'Cface::CDefinitionFileNode'
-     #'Cface::CEnumValueNode'
-     #'Cface::CFunctionNode'
-     #'Cface::CLongNode'
-     #'Cface::CShortNode'
-     #'Cface::CStructFieldNode'
-     #'Cface::CTypeNode'
-     #'Cface::CUnsignedNode'
-     #'Cface::SmalltalkXGenerator'
-     #'Cface::CArrayNode'
-     #'Cface::CBuiltinNode'
-     #'Cface::CDerivedTypeNode'
-     #'Cface::CPointerNode'
-     #'Cface::CTypedefNode'
-     #'Cface::CUnresolvedTypeNode'
-     #'Cface::CCharNode'
-     #'Cface::CDoubleNode'
-     #'Cface::CEnumNode'
-     #'Cface::CFloatNode'
-     #'Cface::CFunctionTypeNode'
-     #'Cface::CIntNode'
-     #'Cface::CStructuredNode'
-     #'Cface::CVoidNode'
-     #'Cface::CWCharNode'
-     #'Cface::CStructNode'
-     #'Cface::CUnionNode' )
+
+    ^ #(
+        "<className> or (<className> attributes...) in load order"
+        #'Cface::CDefinitionParser'
+        #'Cface::CDefinitionScanner'
+        #'Cface::CNode'
+        #'Cface::CNodeVisitor'
+        #'Cface::GeneratorCommand'
+        #'Cface::Platform'
+        #'Cface::TypeMapping'
+        #'jv_cface'
+        #'Cface::CDefinitionNode'
+        #'Cface::CModifierNode'
+        #'Cface::CNoNode'
+        #'Cface::CairoMapping'
+        #'Cface::GTKMapping'
+        #'Cface::Generator'
+        #'Cface::LLVM_C'
+        #'Cface::Libgit2Mapping'
+        #'Cface::SVNMapping'
+        #'Cface::SmalltalkX'
+        #'Cface::TypeCollector'
+        #'Cface::TypeMapper'
+        #'Cface::TypeResolver'
+        #'Cface::CArgumentNode'
+        #'Cface::CConstNode'
+        #'Cface::CDefinitionFileNode'
+        #'Cface::CEnumValueNode'
+        #'Cface::CFunctionNode'
+        #'Cface::CLongNode'
+        #'Cface::CShortNode'
+        #'Cface::CStructFieldNode'
+        #'Cface::CTypeNode'
+        #'Cface::CUnsignedNode'
+        #'Cface::LLVM_C_EXT'
+        #'Cface::SmalltalkXGenerator'
+        #'Cface::CArrayNode'
+        #'Cface::CBuiltinNode'
+        #'Cface::CDerivedTypeNode'
+        #'Cface::CPointerNode'
+        #'Cface::CUnresolvedTypeNode'
+        #'Cface::CCharNode'
+        #'Cface::CDoubleNode'
+        #'Cface::CEnumNode'
+        #'Cface::CFloatNode'
+        #'Cface::CFunctionTypeNode'
+        #'Cface::CIntNode'
+        #'Cface::CStructuredNode'
+        #'Cface::CTypedefNode'
+        #'Cface::CVoidNode'
+        #'Cface::CWCharNode'
+        #'Cface::CStructNode'
+        #'Cface::CUnionNode'
+    )
 !
 
 extensionMethodNames
--- a/libInit.cc	Wed Aug 12 07:49:03 2015 +0100
+++ b/libInit.cc	Wed Aug 12 07:32:13 2015 +0100
@@ -41,6 +41,7 @@
 _Cface__CairoMapping_Init(pass,__pRT__,snd);
 _Cface__GTKMapping_Init(pass,__pRT__,snd);
 _Cface__Generator_Init(pass,__pRT__,snd);
+_Cface__LLVM_137C_Init(pass,__pRT__,snd);
 _Cface__Libgit2Mapping_Init(pass,__pRT__,snd);
 _Cface__SVNMapping_Init(pass,__pRT__,snd);
 _Cface__SmalltalkX_Init(pass,__pRT__,snd);
@@ -57,6 +58,7 @@
 _Cface__CStructFieldNode_Init(pass,__pRT__,snd);
 _Cface__CTypeNode_Init(pass,__pRT__,snd);
 _Cface__CUnsignedNode_Init(pass,__pRT__,snd);
+_Cface__LLVM_137C_137EXT_Init(pass,__pRT__,snd);
 _Cface__SmalltalkXGenerator_Init(pass,__pRT__,snd);
 _Cface__CArrayNode_Init(pass,__pRT__,snd);
 _Cface__CBuiltinNode_Init(pass,__pRT__,snd);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resources/examples/llvm-c-ext/Makefile	Wed Aug 12 07:32:13 2015 +0100
@@ -0,0 +1,44 @@
+CC=gccxml
+CFLAGS=-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS
+XSLTPROC=xsltproc
+XML2DEF_XSL=../../styles/gccxml2def.xsl
+
+
+
+
+INCLUDE_DIR=../../../../llvm_s/llvm_c_ext/include
+INCLUDES=-I$(shell llvm-config-3.8 --includedir) -I$(INCLUDE_DIR)
+HEADERS=CoreExt.h Intrinsics.h DIBuilder.h
+DEFFILES=$(HEADERS:%.h=%.h.def)
+DEFFILE=llvm-c-ext.def
+XMLFILES=$(HEADERS:%.h=%.h.xml)
+
+XSL_PARAMS=--stringparam c-header-file $(INCLUDE_DIR)/llvm-c-ext/$(<:%.h.xml=%.h)
+
+XSLTPROC_FLAGS=$(XSL_PARAMS)
+
+default: all
+
+all: $(DEFFILE)
+
+xml: $(XMLFILES)
+
+
+$(DEFFILE): $(DEFFILES)
+	cat $(DEFFILES) > $(DEFFILE)
+#	sed -i -e 's/^(struct-foreign LLVM/(struct LLVM/g' $(DEFFILE)
+#	sed -i -e 's/^(typedef-foreign LLVM/(typedef LLVM/g' $(DEFFILE)
+#	sed -i -e 's/^(enum-foreign LLVM/(enum LLVM/g' $(DEFFILE)
+
+
+%.h.def:%.h.xml
+	$(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ $(XML2DEF_XSL) $<
+
+%.h.xml: $(INCLUDE_DIR)/llvm-c-ext/%.h
+	$(CC) -m64 $(CFLAGS) $(INCLUDES) $< -fxml=$@
+
+clean:
+	rm -rf *.h.def *.h.xml
+
+distclean: clean
+	rm -rf $(DEFFILE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resources/examples/llvm-c/Makefile	Wed Aug 12 07:32:13 2015 +0100
@@ -0,0 +1,43 @@
+CC=gccxml
+CFLAGS=-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS
+XSLTPROC=xsltproc
+XML2DEF_XSL=../../styles/gccxml2def.xsl
+
+
+
+
+INCLUDE_DIR=$(shell llvm-config-3.8 --includedir)
+HEADERS=Core.h ExecutionEngine.h Target.h Analysis.h BitWriter.h
+DEFFILES=$(HEADERS:%.h=%.h.def)
+DEFFILE=llvm-c.def
+XMLFILES=$(HEADERS:%.h=%.h.xml)
+
+XSL_PARAMS=--stringparam c-header-file $(INCLUDE_DIR)/llvm-c/$(<:%.h.xml=%.h)
+
+XSLTPROC_FLAGS=$(XSL_PARAMS)
+
+default: all
+
+all: $(DEFFILE)
+
+xml: $(XMLFILES)
+
+
+$(DEFFILE): $(DEFFILES)
+	cat $(DEFFILES) > $(DEFFILE)
+#	sed -i -e 's/^(struct-foreign LLVM/(struct LLVM/g' $(DEFFILE)
+#	sed -i -e 's/^(typedef-foreign LLVM/(typedef LLVM/g' $(DEFFILE)
+#	sed -i -e 's/^(enum-foreign LLVM/(enum LLVM/g' $(DEFFILE)
+
+
+%.h.def:%.h.xml
+	$(XSLTPROC) $(XSLTPROC_FLAGS) -o $@ $(XML2DEF_XSL) $<
+
+%.h.xml: $(INCLUDE_DIR)/llvm-c/%.h
+	$(CC) -m64 $(CFLAGS) -I$(INCLUDE_DIR) $< -fxml=$@
+
+clean:
+	rm -rf *.h.def *.h.xml
+
+distclean: clean
+	rm -rf $(DEFFILE)