Added testing and assestion methods to test metadata nodes for their type
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 17 Sep 2015 17:09:43 +0100
changeset 41 e4cbc8e75207
parent 40 d99596797aa1
child 42 23ae490859cd
Added testing and assestion methods to test metadata nodes for their type ...such as DIFile, DILocalVariable. These should be used by the Smalltalk API to make sure it passes valid data to the C library. Otherwise the behaviour is undefined :-) (except for Debug+Assert LLVM builds which calls abort(), not nice in Smalltalk context)
LLVMDIBuilder.st
LLVMMetadata.st
LLVMObject.st
LLVMTypeFP128.st
Make.proto
bc.mak
--- a/LLVMDIBuilder.st	Thu Sep 17 07:28:46 2015 +0100
+++ b/LLVMDIBuilder.st	Thu Sep 17 17:09:43 2015 +0100
@@ -84,16 +84,17 @@
     "Creates a debg info metadata describing a local variable"
 
     self assertIsString: name.
-    self assertIsMetadata: scope.  
-    self assertIsMetadata: file.
+    self assertIsDILocalScope: scope.  
+    self assertIsDIFile: file.
     self assertIsIntegerUnsigned: line.
-    self assertIsMetadata: type.
+    self assertIsDIType: type.
     self assertIsIntegerUnsigned: flags.
     self assertIsBoolean: preserve.
 
     ^ LLVMCEXT DIBuilderCreateAutoVariable: self _: scope _: name _: file _: line _: type _: (preserve ifTrue:[1] ifFalse:[0]) _: flags
 
     "Created: / 14-08-2015 / 13:56:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-09-2015 / 17:00:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createCompilationUnit: path language: lang producer: producer
@@ -155,8 +156,8 @@
 
 createFunction: name in: scope file: file  line: line type: type function: function local: isLocal definition: isDefinition optimized: isOptimized flags: flags scopeLine: scopeLine linkageName: linkageName
 
-    self assertIsMetadata: scope.          
-    self assertIsMetadata: file.
+    self assertIsDIScope: scope.          
+    self assertIsDIFile: file.
     self assertIsString: name.
     self assertIsIntegerUnsigned: line.
     self assertIsFunctionValue: function.
@@ -170,6 +171,7 @@
     ^ LLVMCEXT DIBuilderCreateFunction: self  _: scope _: name _: linkageName _: file _: line _: type _: (isLocal ifTrue:[1] ifFalse:[0]) _: (isDefinition ifTrue:[1] ifFalse:[0]) _: scopeLine _: flags _: (isOptimized ifTrue:[1] ifFalse:[0]) _: function.
 
     "Created: / 14-08-2015 / 13:46:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-09-2015 / 17:04:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createParameterVariable: name in: scope file: file line: line type: type flags: flags index: index
@@ -182,10 +184,10 @@
     "Creates a debg info metadata describing a local variable"
 
     self assertIsString: name.
-    self assertIsMetadata: scope.  
-    self assertIsMetadata: file.
+    self assertIsDILocalScope: scope.  
+    self assertIsDIFile: file.
     self assertIsIntegerUnsigned: line.
-    self assertIsMetadata: type.
+    self assertIsDIType: type.
     self assertIsIntegerUnsigned: flags.
     self assertIsIntegerUnsigned: index.
     self assertIsBoolean: preserve.
@@ -193,18 +195,20 @@
     ^ LLVMCEXT DIBuilderCreateParameterVariable: self _: scope _: name _: file _: line _: type _: (preserve ifTrue:[1] ifFalse:[0]) _: flags _: index - 1
 
     "Created: / 14-08-2015 / 13:54:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-09-2015 / 17:01:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createTypeFunctionIn: file parameterTypes: parameterTypes
     | parameterTypesAsTuple |
 
-    self assertIsMetadata: file.
-    self assertIsMetadataArray: parameterTypes.
+    self assertIsDIFile: file.
+    self assertIsDITypeArray: parameterTypes.
 
     parameterTypesAsTuple := LLVMCEXT MDNode2: LLVM GetGlobalContext _: parameterTypes asLLVMObjectArray _: parameterTypes size.
     ^ LLVMCEXT DIBuilderCreateSubroutineType: self  _: file _: parameterTypesAsTuple
 
     "Created: / 14-08-2015 / 08:57:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-09-2015 / 17:01:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createTypeScalar: name size: sizeInBits alignment: alignmentInBits encoding: encoding
@@ -237,29 +241,31 @@
     "Inserts @llvm.dbg.declare() intrinsic at the end of given `basicblock`"
 
     self assertIsValue: alloca.
-    self assertIsMetadata: variable.
-    self assertIsMetadata: expr.
-    self assertIsMetadata: location.
+    self assertIsDILocalVariable: variable.
+    self assertIsDIExpression: expr.
+    self assertIsDILocation: location.
     self assertIsBasicBlock: basicblock.
 
     ^ LLVMCEXT DIBuilderInsertDeclareAtEnd: self  _: alloca _: variable _: expr _: location _: basicblock
 
     "Created: / 15-08-2015 / 23:44:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-09-2015 / 17:03:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 insertValue: alloca variable: variable expression: expr location: location atEndOf: basicblock offset: offset
     "Inserts @llvm.dbg.value() intrinsic at the end of given `basicblock`"
 
     self assertIsValue: alloca.
-    self assertIsMetadata: variable.
-    self assertIsMetadata: expr.
-    self assertIsMetadata: location.
+    self assertIsDILocalVariable: variable.
+    self assertIsDIExpression: expr.
+    self assertIsDILocation: location.
     self assertIsBasicBlock: basicblock.
     self assertIsInteger64Unsigned: offset.  
 
     ^ LLVMCEXT DIBuilderInsertValueAtEnd: self _: alloca _: offset _: variable _: expr _: location _: basicblock
 
     "Created: / 15-08-2015 / 23:49:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-09-2015 / 17:03:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !LLVMDIBuilder methodsFor:'initialization & release'!
--- a/LLVMMetadata.st	Thu Sep 17 07:28:46 2015 +0100
+++ b/LLVMMetadata.st	Thu Sep 17 17:09:43 2015 +0100
@@ -18,7 +18,7 @@
 LLVMObject subclass:#LLVMMetadata
 	instanceVariableNames:''
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'LLVMMetadataKind'
 	category:'LLVM-S-Core'
 !
 
@@ -40,6 +40,14 @@
 "
 ! !
 
+!LLVMMetadata methodsFor:'accessing'!
+
+kind
+    ^ LLVMCEXT GetMedadataKind: self
+
+    "Created: / 17-09-2015 / 16:42:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !LLVMMetadata methodsFor:'converting'!
 
 asLLVMMetadata
@@ -56,6 +64,133 @@
 
 !LLVMMetadata methodsFor:'testing'!
 
+isDIBasicType
+    ^ self kind == DIBasicTypeKind
+
+    "Created: / 17-09-2015 / 16:48:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDICompileUnit
+    ^ self kind == DICompileUnitKind
+
+    "Created: / 17-09-2015 / 16:47:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDICompositeType
+    ^ self kind == DICompositeTypeKind
+
+    "Created: / 17-09-2015 / 16:48:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIDerivedType
+    ^ self kind == DIDerivedTypeKind
+
+    "Created: / 17-09-2015 / 16:48:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIEnumerator
+    ^ self kind == DIEnumeratorKind
+
+    "Created: / 17-09-2015 / 16:45:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIExpression
+    ^ self kind == DIExpressionKind
+
+    "Created: / 17-09-2015 / 16:45:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIFile
+    ^ self kind == DIFileKind
+
+    "Created: / 17-09-2015 / 16:47:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIGlobalVariable
+    ^ self kind == DIGlobalVariableKind
+
+    "Created: / 17-09-2015 / 16:47:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIImportedEntity
+    ^ self kind == DIImportedEntityKind
+
+    "Created: / 17-09-2015 / 16:45:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDILexicalBlock
+    ^ self kind == DILexicalBlockKind
+
+    "Created: / 17-09-2015 / 16:48:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDILexicalBlockFile
+    ^ self kind == DILexicalBlockFileKind
+
+    "Created: / 17-09-2015 / 16:48:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDILocalScope
+    ^ { DILexicalBlockKind . DILexicalBlockFileKind . DISubprogramKind } includes: self kind.
+
+    "Created: / 17-09-2015 / 16:59:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDILocalVariable
+    ^ self kind == DILocalVariableKind
+
+    "Created: / 17-09-2015 / 16:46:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDILocation
+    ^ self kind == DILocationKind
+
+    "Created: / 17-09-2015 / 16:43:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDINamespace
+    ^ self kind == DINamespaceKind
+
+    "Created: / 17-09-2015 / 16:47:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIObjCProperty
+    ^ self kind == DIObjCPropertyKind
+
+    "Created: / 17-09-2015 / 16:45:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIScope
+    ^ { DILexicalBlockKind . DILexicalBlockFileKind . DISubprogramKind .
+        DICompileUnitKind . DIFileKind . DINamespaceKind } includes: self kind.
+
+    "Created: / 17-09-2015 / 17:05:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDISubprogram
+    ^ self kind == DISubprogramKind
+
+    "Created: / 17-09-2015 / 16:47:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDISubprogramType
+    ^ self kind == DISubroutineTypeKind
+
+    "Created: / 17-09-2015 / 16:49:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDISubrange
+    ^ self kind == DISubrangeKind
+
+    "Created: / 17-09-2015 / 16:46:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isDIType
+    ^ { DIBasicTypeKind . DIDerivedTypeKind . DICompositeTypeKind . DISubroutineTypeKind } includes: self kind.
+
+    "Created: / 17-09-2015 / 16:59:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 isLLVMMetadata
     ^ true
 
--- a/LLVMObject.st	Thu Sep 17 07:28:46 2015 +0100
+++ b/LLVMObject.st	Thu Sep 17 17:09:43 2015 +0100
@@ -90,6 +90,170 @@
     "Modified: / 14-09-2015 / 11:08:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+assertIsDIBasicType: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIBasicType message: 'value is not of type DIBasicType'.
+!
+
+assertIsDICompileUnit: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDICompileUnit message: 'value is not of type DICompileUnit'.
+!
+
+assertIsDICompositeType: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDICompositeType message: 'value is not of type DICompositeType'.
+!
+
+assertIsDIDerivedType: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIDerivedType message: 'value is not of type DIDerivedType'.
+!
+
+assertIsDIEnumerator: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIEnumerator message: 'value is not of type DIEnumerator'.
+!
+
+assertIsDIExpression: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIExpression message: 'value is not of type DIExpression'.
+!
+
+assertIsDIFile: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIFile message: 'value is not of type DIFile'.
+!
+
+assertIsDIGlobalVariable: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIGlobalVariable message: 'value is not of type DIGlobalVariable'.
+!
+
+assertIsDIImportedEntity: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIImportedEntity message: 'value is not of type DIImportedEntity'.
+!
+
+assertIsDILexicalBlock: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDILexicalBlock message: 'value is not of type DILexicalBlock'.
+!
+
+assertIsDILexicalBlockFile: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDILexicalBlockFile message: 'value is not of type DILexicalBlockFile'.
+!
+
+assertIsDILocalScope: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDILocalScope message: 'value is not of type DILocalScope'.
+
+    "Created: / 17-09-2015 / 17:00:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+assertIsDILocalVariable: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDILocalVariable message: 'value is not of type DILocalVariable'.
+!
+
+assertIsDILocation: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDILocation message: 'value is not of type DILocation'.
+!
+
+assertIsDINamespace: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDINamespace message: 'value is not of type DINamespace'.
+!
+
+assertIsDIObjCProperty: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIObjCProperty message: 'value is not of type DIObjCProperty'.
+!
+
+assertIsDIScope: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIScope message: 'value is not of type DILocalScope'.
+
+    "Created: / 17-09-2015 / 17:04:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+assertIsDISubprogram: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDISubprogram message: 'value is not of type DISubprogram'.
+!
+
+assertIsDISubprogramType: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDISubprogramType message: 'value is not of type DISubprogramType'.
+!
+
+assertIsDISubrange: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDISubrange message: 'value is not of type DISubrange'.
+!
+
+assertIsDIType: value
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: value isLLVMMetadata message: 'value is not a LLVMMetadata'.
+    self assert: value isDIType message: 'value is not of type DIType'.
+
+    "Created: / 17-09-2015 / 17:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+assertIsDITypeArray: values
+    <resource: #skipInDebuggersWalkBack>
+
+    self assert: values isSequenceable message: 'values is not a sequenceable collection'.
+    values do:[:value | 
+        self assertIsDIType: value.  
+    ].
+
+    "Created: / 17-09-2015 / 17:02:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 assertIsFunctionValue: value
     <resource: #skipInDebuggersWalkBack>
 
@@ -159,12 +323,13 @@
 !
 
 assertIsType: type
-     <resource: #skipInDebuggersWalkBack>
+    <resource: #skipInDebuggersWalkBack>
 
     self assert: type isLLVMType message: 'value is not an LLVMType'.
 
     "Created: / 10-08-2015 / 06:26:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 14-09-2015 / 11:09:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 17-09-2015 / 16:51:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 assertIsTypeArray: types
--- a/LLVMTypeFP128.st	Thu Sep 17 07:28:46 2015 +0100
+++ b/LLVMTypeFP128.st	Thu Sep 17 17:09:43 2015 +0100
@@ -62,3 +62,10 @@
     "Created: / 13-08-2015 / 16:51:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!LLVMTypeFP128 class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/Make.proto	Thu Sep 17 07:28:46 2015 +0100
+++ b/Make.proto	Thu Sep 17 17:09:43 2015 +0100
@@ -164,7 +164,7 @@
 $(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)
 $(OUTDIR)LLVMDisposableObject.$(O) LLVMDisposableObject.$(H): LLVMDisposableObject.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMMCJITCompilerOptions.$(O) LLVMMCJITCompilerOptions.$(H): LLVMMCJITCompilerOptions.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)LLVMMetadata.$(O) LLVMMetadata.$(H): LLVMMetadata.st $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMMetadata.$(O) LLVMMetadata.$(H): LLVMMetadata.st $(INCLUDE_TOP)/jv/llvm_s/LLVMMetadataKind.$(H) $(INCLUDE_TOP)/jv/llvm_s/LLVMObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(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)
--- a/bc.mak	Thu Sep 17 07:28:46 2015 +0100
+++ b/bc.mak	Thu Sep 17 17:09:43 2015 +0100
@@ -106,7 +106,7 @@
 $(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)
 $(OUTDIR)LLVMDisposableObject.$(O) LLVMDisposableObject.$(H): LLVMDisposableObject.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)LLVMMCJITCompilerOptions.$(O) LLVMMCJITCompilerOptions.$(H): LLVMMCJITCompilerOptions.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)LLVMMetadata.$(O) LLVMMetadata.$(H): LLVMMetadata.st $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LLVMMetadata.$(O) LLVMMetadata.$(H): LLVMMetadata.st $(INCLUDE_TOP)\jv\llvm_s\LLVMMetadataKind.$(H) $(INCLUDE_TOP)\jv\llvm_s\LLVMObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(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)