]> gitweb.factorcode.org Git - factor.git/commitdiff
llvm: more vocabs from factor-unmaintained added back
authorBjörn Lindqvist <bjourne@gmail.com>
Wed, 12 Jul 2017 13:19:07 +0000 (15:19 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Wed, 12 Jul 2017 13:19:07 +0000 (15:19 +0200)
extra/llvm/ffi/ffi.factor
extra/llvm/reader/reader-docs.factor [new file with mode: 0644]
extra/llvm/reader/reader.factor [new file with mode: 0644]
extra/llvm/wrappers/add.bc [new file with mode: 0644]
extra/llvm/wrappers/wrappers-docs.factor [new file with mode: 0644]
extra/llvm/wrappers/wrappers-tests.factor [new file with mode: 0644]
extra/llvm/wrappers/wrappers.factor [new file with mode: 0644]

index 871bb0a871203ea48b833c672b28cb9f6c8f0a75..c2ffec4e94eaa2b1f62417f5334118195b349359 100644 (file)
@@ -35,6 +35,7 @@ FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID )
 FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M )
 FUNCTION: void LLVMDumpModule ( LLVMModuleRef M )
 FUNCTION: LLVMBool LLVMVerifyModule ( LLVMModuleRef M, int Action, char **OutMessage )
+FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
 DESTRUCTOR: LLVMDisposeModule
 
 ! Types
@@ -54,6 +55,7 @@ FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
                                          LLVMTypeRef FunctionTy )
 FUNCTION: LLVMValueRef LLVMGetParam ( LLVMValueRef Fn,
                                       unsigned index )
+FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val )
 
 ! Basic blocks
 FUNCTION: LLVMBasicBlockRef LLVMAppendBasicBlock ( LLVMValueRef Fn,
@@ -86,3 +88,21 @@ FUNCTION: LLVMBool LLVMCreateExecutionEngineForModule (
     char **OutMessage )
 FUNCTION: void LLVMDisposeExecutionEngine ( LLVMExecutionEngineRef E )
 DESTRUCTOR: LLVMDisposeExecutionEngine
+
+! Memory buffers
+FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
+    c-string Path,
+    LLVMMemoryBufferRef* OutMemBuf,
+    c-string* OutMessage )
+FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf )
+FUNCTION: size_t LLVMGetBufferSize ( LLVMMemoryBufferRef MemBuf )
+FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
+                                 LLVMModuleRef* OutModule,
+                                 c-string* OutMessage )
+
+! Module providers
+FUNCTION: LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M )
+FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP )
+
+! Messages
+FUNCTION: void LLVMDisposeMessage ( char *Message )
diff --git a/extra/llvm/reader/reader-docs.factor b/extra/llvm/reader/reader-docs.factor
new file mode 100644 (file)
index 0000000..fd578a8
--- /dev/null
@@ -0,0 +1,16 @@
+! Copyright (C) 2017 Björn Lindqvist.
+! See http://factorcode.org/license.txt for BSD license.
+USING: help.markup help.syntax llvm.wrappers strings ;
+
+IN: llvm.reader
+
+HELP: load-module
+{ $values { "path" string } { "module" module } }
+{ $description "Parses a file containing llvm bitcode into an llvm module." }
+{ $examples
+  { $unchecked-example
+    "USING: io.pathnames llvm.reader ;"
+    "\"resource:extra/llvm/wrappers/add.bc\" absolute-path load-module"
+    "T{ module { value ALIEN: 1be7120 } }"
+  }
+} ;
diff --git a/extra/llvm/reader/reader.factor b/extra/llvm/reader/reader.factor
new file mode 100644 (file)
index 0000000..097ace0
--- /dev/null
@@ -0,0 +1,17 @@
+! Copyright (C) 2009 Matthew Willis.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.data destructors kernel llvm.ffi
+llvm.wrappers ;
+
+IN: llvm.reader
+
+: buffer>module ( buffer -- module )
+    [
+        value>> f void* <ref> f void* <ref>
+        [ LLVMParseBitcode drop ] 2keep
+        void* deref [ llvm-throw ] when* void* deref
+        module new swap >>value
+    ] with-disposal ;
+
+: load-module ( path -- module )
+    <buffer> buffer>module ;
diff --git a/extra/llvm/wrappers/add.bc b/extra/llvm/wrappers/add.bc
new file mode 100644 (file)
index 0000000..b841935
Binary files /dev/null and b/extra/llvm/wrappers/add.bc differ
diff --git a/extra/llvm/wrappers/wrappers-docs.factor b/extra/llvm/wrappers/wrappers-docs.factor
new file mode 100644 (file)
index 0000000..eee657a
--- /dev/null
@@ -0,0 +1,8 @@
+! Copyright (C) 2017 Björn Lindqvist.
+! See http://factorcode.org/license.txt for BSD license.
+USING: help.markup help.syntax ;
+IN: llvm.wrappers
+
+HELP: <provider>
+{ $values { "module" module } { "provider" provider } }
+{ $description "Creates a module provider from a given module. The provider takes ownership of the module." } ;
diff --git a/extra/llvm/wrappers/wrappers-tests.factor b/extra/llvm/wrappers/wrappers-tests.factor
new file mode 100644 (file)
index 0000000..16cdb50
--- /dev/null
@@ -0,0 +1,8 @@
+USING: accessors alien destructors io.pathnames kernel llvm.ffi
+llvm.wrappers tools.test ;
+IN: llvm.wrappers.tests
+
+{ 728 t } [
+    "resource:extra/llvm/wrappers/add.bc" absolute-path <buffer>
+    [ value>> [ LLVMGetBufferSize ] keep ] with-disposal alien?
+] unit-test
diff --git a/extra/llvm/wrappers/wrappers.factor b/extra/llvm/wrappers/wrappers.factor
new file mode 100644 (file)
index 0000000..32b8c25
--- /dev/null
@@ -0,0 +1,37 @@
+! Copyright (C) 2009 Matthew Willis.
+! 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 ;
+IN: llvm.wrappers
+
+ERROR: llvm-error message ;
+
+: llvm-throw ( c-string -- )
+    [ utf8 alien>string ] [ LLVMDisposeMessage ] bi llvm-error ;
+
+: <dispose> ( alien class -- disposable ) new swap >>value ;
+
+TUPLE: module value disposed ;
+M: module dispose* value>> LLVMDisposeModule ;
+
+: <module> ( name -- module )
+    LLVMModuleCreateWithName module <dispose> ;
+
+TUPLE: provider value module disposed ;
+M: provider dispose* value>> LLVMDisposeModuleProvider ;
+
+: (provider) ( module -- provider )
+    [ value>> LLVMCreateModuleProviderForExistingModule provider <dispose> ]
+    [ t >>disposed value>> ] bi
+    >>module ;
+
+: <provider> ( module -- provider )
+    [ (provider) ] with-disposal ;
+
+TUPLE: buffer value disposed ;
+M: buffer dispose* value>> LLVMDisposeMemoryBuffer ;
+
+: <buffer> ( path -- buffer )
+    f void* <ref> f void* <ref>
+    [ LLVMCreateMemoryBufferWithContentsOfFile drop ] 2keep
+    void* deref [ llvm-throw ] when* void* deref buffer <dispose> ;