 
 public struct IntType: LLVMType {
   public let width: Int
+  
+  public init(width: Int) { self.width = width }
   
   public static let int1 = IntType(width: 1)
   public static let int8 = IntType(width: 8)


public struct MetadataType: LLVMType {
  internal let llvm: LLVMTypeRef
  public func asLLVM() -> LLVMTypeRef {
    return llvm
  }
}

public struct LabelType: LLVMType {
  public func asLLVM() -> LLVMTypeRef {
    return LLVMLabelType()
  }

public struct ArrayType: LLVMType {
  public let elementType: LLVMType
  public let count: Int
  
  public init(elementType: LLVMType, count: Int) {
    self.elementType = elementType
    self.count = count
  }
  
  public static func constant(_ values: [LLVMValue], type: LLVMType) -> LLVMValue {
    var vals = values.map { $0.asLLVM() as Optional }
    return vals.withUnsafeMutableBufferPointer { buf in
