TYPEDEF: void* LLVMPassManagerRef
TYPEDEF: void* LLVMModuleProviderRef
TYPEDEF: void* LLVMTypeRef
-TYPEDEF: void* LLVMTypeHandleRef
TYPEDEF: void* LLVMValueRef
TYPEDEF: void* LLVMBasicBlockRef
TYPEDEF: void* LLVMBuilderRef
FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
! Types
+
+! ! Basic types
+FUNCTION: LLVMTypeRef LLVMFloatType ( )
+FUNCTION: LLVMTypeRef LLVMDoubleType ( )
+
+FUNCTION: LLVMTypeRef LLVMX86FP80Type ( )
+FUNCTION: LLVMTypeRef LLVMFP128Type ( )
+FUNCTION: LLVMTypeRef LLVMPPCFP128Type ( )
+
+FUNCTION: LLVMTypeRef LLVMVoidType ( )
+FUNCTION: LLVMTypeRef LLVMLabelType ( )
+FUNCTION: LLVMTypeRef LLVMOpaqueType ( )
+
+! ! Integer type
FUNCTION: LLVMTypeRef LLVMInt1Type ( )
FUNCTION: LLVMTypeRef LLVMInt8Type ( )
FUNCTION: LLVMTypeRef LLVMInt16Type ( )
FUNCTION: LLVMTypeRef LLVMInt32Type ( )
FUNCTION: LLVMTypeRef LLVMInt64Type ( )
FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits )
+FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy )
+
+! ! Array type
+FUNCTION: LLVMTypeRef LLVMArrayType ( LLVMTypeRef ElementType, unsigned ElementCount )
+FUNCTION: unsigned LLVMGetArrayLength ( LLVMTypeRef ArrayTy )
+
+! ! Pointer type
+FUNCTION: LLVMTypeRef LLVMPointerType ( LLVMTypeRef ElementType, unsigned AddressSpace )
+
+! ! Vector type
+FUNCTION: LLVMTypeRef LLVMVectorType ( LLVMTypeRef ElementType, unsigned ElementCount )
+FUNCTION: unsigned LLVMGetVectorSize ( LLVMTypeRef VectorTy )
+
+! ! Function type
FUNCTION: LLVMTypeRef LLVMFunctionType ( LLVMTypeRef ReturnType,
LLVMTypeRef* ParamTypes,
unsigned ParamCount, int IsVarArg )
-FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty )
FUNCTION: LLVMTypeRef LLVMGetReturnType ( LLVMTypeRef FunctionTy )
+FUNCTION: int LLVMIsFunctionVarArg ( LLVMTypeRef FunctionTy )
+FUNCTION: unsigned LLVMCountParamTypes ( LLVMTypeRef FunctionTy )
+FUNCTION: void LLVMGetParamTypes ( LLVMTypeRef FunctionTy, LLVMTypeRef* Dest )
+
+! ! Struct type
+FUNCTION: LLVMTypeRef LLVMStructType ( LLVMTypeRef* ElementTypes,
+ unsigned ElementCount, int Packed )
+FUNCTION: int LLVMIsPackedStruct ( LLVMTypeRef StructTy )
+FUNCTION: unsigned LLVMCountStructElementTypes ( LLVMTypeRef StructTy )
+FUNCTION: void LLVMGetStructElementTypes ( LLVMTypeRef StructTy, LLVMTypeRef* Dest )
+
+! ! Type util
+FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty )
FUNCTION: LLVMTypeRef LLVMGetElementType ( LLVMTypeRef Ty )
-FUNCTION: unsigned LLVMGetIntTypeWidth ( LLVMTypeRef IntegerTy )
! Values
FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
FUNCTION: void LLVMInitializeX86Target ( )
FUNCTION: void LLVMInitializeX86TargetMC ( )
-! Removed symbols: LLVMCreateJITCompiler
+! Removed symbols: LLVMCreateJITCompiler, LLVMCreateTypeHandle
llvm.reader llvm.wrappers tools.test ;
IN: llvm.wrappers.tests
-CONSTANT: ADD.BC "resource:extra/llvm/wrappers/add.bc"
+: add.bc ( -- path )
+ "resource:extra/llvm/wrappers/add.bc" absolute-path ;
{ 728 t } [
- ADD.BC absolute-path <buffer>
+ add.bc <buffer>
[ value>> [ LLVMGetBufferSize ] keep ] with-disposal alien?
] unit-test
-{ "sum" 2 } [
- ADD.BC absolute-path load-module <engine>
- "sum" find-function [ LLVMGetValueName ] [ LLVMCountParams ] bi
+{ "sum" 2 32 LLVMIntegerTypeKind } [
+ add.bc load-module <engine>
+ "sum" find-function
+ [ LLVMGetValueName ]
+ [ LLVMCountParams ]
+ [
+ LLVMTypeOf LLVMGetElementType LLVMGetReturnType
+ [ LLVMGetIntTypeWidth ]
+ [ LLVMGetTypeKind ] bi
+ ] tri
] unit-test
! Copyright (C) 2009 Matthew Willis, 2017 Björn Lindqvist.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types alien.data alien.strings destructors io
-io.encodings.utf8 kernel llvm.ffi prettyprint ;
+USING: accessors alien.c-types alien.data alien.strings destructors
+io.encodings.utf8 kernel llvm.ffi ;
IN: llvm.wrappers
ERROR: llvm-error message ;
: llvm-throw ( void* -- )
[ utf8 alien>string ] [ LLVMDisposeMessage ] bi llvm-error ;
+: llvm-throw-on-error ( quot -- )
+ keep swap 0 = [ drop ] [ void* deref llvm-throw ] if ; inline
+
: <dispose> ( alien class -- disposable ) new swap >>value ;
TUPLE: module value disposed ;
: <module> ( name -- module )
LLVMModuleCreateWithName module <dispose> ;
+: verify-module ( module -- )
+ value>> LLVMReturnStatusAction f void* <ref>
+ [ LLVMVerifyModule ] llvm-throw-on-error ;
+
TUPLE: provider value module disposed ;
M: provider dispose* value>> LLVMDisposeModuleProvider ;
M: engine dispose* value>> LLVMDisposeExecutionEngine ;
: (engine) ( LLVMModuleRef -- LLVMExecutionEngineRef )
- f void* <ref> f void* <ref>
- [ swapd LLVMCreateExecutionEngineForModule drop ] 2keep
- void* deref [ llvm-throw ] when*
+ f void* <ref> swap dupd f void* <ref>
+ [ LLVMCreateExecutionEngineForModule ] llvm-throw-on-error
void* deref ;
: <engine> ( module -- engine )
f void* <ref> f void* <ref>
[ LLVMCreateMemoryBufferWithContentsOfFile drop ] 2keep
void* deref [ llvm-throw ] when* void* deref buffer <dispose> ;
+
+: (add-block) ( value -- basic-block )
+ "entry" LLVMAppendBasicBlock ;
+
+TUPLE: builder value disposed ;
+M: builder dispose* value>> LLVMDisposeBuilder ;
+
+: <builder> ( value -- builder )
+ (add-block) LLVMCreateBuilder [ swap LLVMPositionBuilderAtEnd ] keep
+ builder <dispose> ;