-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathllvm.i
More file actions
134 lines (105 loc) · 3.2 KB
/
Copy pathllvm.i
File metadata and controls
134 lines (105 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
%module LLVM
%{
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
#include "llvm/Use.h"
#include "llvm/User.h"
#include "llvm/Value.h"
#include "llvm/Constant.h"
#include "llvm/Constants.h"
#include "llvm/BasicBlock.h"
#include "llvm/GlobalValue.h"
#include "llvm/Function.h"
#include "llvm/Type.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include "llvm/AbstractTypeUser.h"
#include "llvm/LLVMContext.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/ExecutionEngine/Executionengine.h"
#define IRBuilder ruby__IRBuilder
#include "llvm/Support/IRBuilder.h"
#undef IRBuilder
using namespace llvm;
%}
#define __STDC_CONSTANT_MACROS
#define __STDC_LIMIT_MACROS
%include "std_vector.i"
%include "std_string.i"
%typemap(in) uint64_t {
$1 = NUM2ULL($input);
}
%typemap(typecheck) uint64_t {
$1 = TYPE($input) == T_FIXNUM || TYPE($input) == T_BIGNUM;
}
// typemaps for StringRef
%typemap(in) llvm::StringRef {
$1 = StringRef(RSTRING_PTR($input), RSTRING_LEN($input));
}
%typemap(out) llvm::StringRef {
$result = rb_str_new($1.data(), $1.size());
}
// for overloading in llvm/Module.h
%typemap(typecheck) llvm::StringRef {
$1 = TYPE($input) == T_STRING;
}
%template(TypeVector) std::vector<llvm::Type const *,std::allocator< llvm::Type const * > >;
%{
inline static void check_null(void *m) {
if (m == NULL) {
SWIG_exception(SWIG_ValueError,"Expected llvm::Module.");
}
}
%}
%typemap(check) llvm::Module * {
check_null($1);
}
%extend llvm::Module {
%typemap(out) llvm::Constant * {
$result = SWIG_NewPointerObj(SWIG_as_voidptr($1), SWIGTYPE_p_llvm__Function, 0 | 0 );
}
}
%rename(to_type) operator Type*;
%ignore *::refineAbstractType;
%ignore *::typeBecameConcrete;
%ignore llvm::Pass::getAdjustedAnalysisPointer;
%ignore llvm::GlobalValue::use_empty_except_constants;
// #lock= causes errors because SmartMutex::operator = is private.
%ignore llvm::ExecutionEngine::lock;
#define llvm_pointer_equality bool operator==(void* another) { return $self == another; }
%extend llvm::LLVMContext {
llvm_pointer_equality
}
%include "llvm/ADT/ilist_node.h"
%template(Ilist_node__BasicBlock) ::llvm::ilist_node<BasicBlock>;
%template(Ilist_node__Function) ::llvm::ilist_node<Function>;
%include "llvm/OperandTraits.h"
%include "llvm/Value.h"
%include "llvm/User.h"
%include "llvm/Constant.h"
%include "llvm/Constants.h"
%include "llvm/BasicBlock.h"
%include "llvm/Support/Compiler.h"
%include "llvm/GlobalValue.h"
%include "llvm/Function.h"
%include "llvm/AbstractTypeUser.h"
%include "llvm/Type.h"
%include "llvm/System/DataTypes.h"
%include "llvm/DerivedTypes.h"
%include "llvm/Module.h"
%include "llvm/Pass.h"
%include "llvm/LLVMContext.h"
%include "llvm/ExecutionEngine/GenericValue.h"
%include "llvm/ExecutionEngine/Executionengine.h"
%ignore llvm::APInt::Emit;
%ignore llvm::APInt::Read;
%ignore llvm::APInt::mu;
%ignore llvm::APInt::ms;
%include "llvm/ADT/APInt.h"
%include "llvm/ADT/Twine.h"
#define IRBuilder ruby__IRBuilder
%include "llvm/Support/IRBuilder.h"
#undef IRBuilder
%template(IRBuilderDefaultInserterPreserveNames) llvm::IRBuilderDefaultInserter<true>;
%template(IRBuilder) llvm::ruby__IRBuilder<true>;