Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 535 lines (481 sloc) 16.429 kb
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
1 /*
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
2 * MacRuby Compiler.
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
3 *
4 * This file is covered by the Ruby license. See COPYING for more details.
5 *
9595725 update copyrights to 2011
Laurent Sansonetti authored
6 * Copyright (C) 2008-2011, Apple Inc. All rights reserved.
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
7 */
8
cb65416 the great schism, part I
Laurent Sansonetti authored
9 #ifndef __COMPILER_H_
10 #define __COMPILER_H_
11
12 // For the dispatcher.
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
13 #define DISPATCH_VCALL 0x1 // no receiver, no argument
14 #define DISPATCH_FCALL 0x2 // no receiver, one or more arguments
15 #define DISPATCH_SUPER 0x4 // super call
16 #define DISPATCH_SPLAT 0x8 // has splat
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
17 #define SPLAT_ARG_FOLLOWS 0xdeadbeef
cb65416 the great schism, part I
Laurent Sansonetti authored
18
370e385 get rid of bad allocas, disable frame pointer elimination, simplified co...
Laurent Sansonetti authored
19 // For const lookup.
20 #define CONST_LOOKUP_LEXICAL 1
21 #define CONST_LOOKUP_DYNAMIC_CLASS 2
6b101bd @takaokouji supported lexical const lookup. (fixes #619, #626, #1167, #1192) (refs #...
takaokouji authored
22 #define CONST_LOOKUP_INSIDE_EVAL 4
370e385 get rid of bad allocas, disable frame pointer elimination, simplified co...
Laurent Sansonetti authored
23
cb65416 the great schism, part I
Laurent Sansonetti authored
24 // For defined?
25 #define DEFINED_IVAR 1
26 #define DEFINED_GVAR 2
27 #define DEFINED_CVAR 3
28 #define DEFINED_CONST 4
29 #define DEFINED_LCONST 5
30 #define DEFINED_SUPER 6
31 #define DEFINED_METHOD 7
32
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
33 #if defined(__cplusplus)
34
a6a5d3e started to trim out the static library
Laurent Sansonetti authored
35 #if !defined(MACRUBY_STATIC)
36
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
37 class RoxorInterpreter;
38
cb65416 the great schism, part I
Laurent Sansonetti authored
39 class RoxorCompiler {
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
40 friend class RoxorInterpreter;
41
cb65416 the great schism, part I
Laurent Sansonetti authored
42 public:
43 static llvm::Module *module;
44 static RoxorCompiler *shared;
45
cf73725 experimental debugger
Laurent Sansonetti authored
46 RoxorCompiler(bool debug_mode);
cb65416 the great schism, part I
Laurent Sansonetti authored
47 virtual ~RoxorCompiler(void) { }
48
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
49 void set_fname(const char *_fname);
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
50
cb65416 the great schism, part I
Laurent Sansonetti authored
51 Value *compile_node(NODE *node);
52
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
53 virtual Function *compile_main_function(NODE *node,
54 bool *can_be_interpreted);
cb65416 the great schism, part I
Laurent Sansonetti authored
55 Function *compile_read_attr(ID name);
56 Function *compile_write_attr(ID name);
9fab1ac fixed variadic functions/methods calls
Laurent Sansonetti authored
57 Function *compile_stub(const char *types, bool variadic, int min_argc,
58 bool is_objc);
485e435 Allow methods/blocks with 12+ arguments
Thibault Martin-Lagardette authored
59 Function *compile_long_arity_stub(int argc, bool is_block);
cb65416 the great schism, part I
Laurent Sansonetti authored
60 Function *compile_bs_struct_new(rb_vm_bs_boxed_t *bs_boxed);
61 Function *compile_bs_struct_writer(rb_vm_bs_boxed_t *bs_boxed,
62 int field);
63 Function *compile_ffi_function(void *stub, void *imp, int argc);
64 Function *compile_to_rval_convertor(const char *type);
65 Function *compile_to_ocval_convertor(const char *type);
c1c347f AOT compiler: now supporting objc stubs and super dispatch
Laurent Sansonetti authored
66 Function *compile_objc_stub(Function *ruby_func, IMP ruby_imp,
67 const rb_vm_arity_t &arity, const char *types);
208a965 a quick implementation for #define_method (not yet 100% complete)
Laurent Sansonetti authored
68 Function *compile_block_caller(rb_vm_block_t *block);
4b7c757 cleaning a bit public headers, added support for methods defined for the...
Laurent Sansonetti authored
69 Function *compile_mri_stub(void *imp, const int arity);
cb65416 the great schism, part I
Laurent Sansonetti authored
70
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
71 void inline_function_calls(Function *f);
72
cb65416 the great schism, part I
Laurent Sansonetti authored
73 const Type *convert_type(const char *type);
74
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
75 bool is_inside_eval(void) { return inside_eval; }
76 void set_inside_eval(bool flag) { inside_eval = flag; }
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
77 bool is_dynamic_class(void) { return dynamic_class; }
78 void set_dynamic_class(bool flag) { dynamic_class = flag; }
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
79
9b5bce3 when calculating a backtrace path from a -e script, omit the current dir...
Laurent Sansonetti authored
80 void generate_location_path(std::string &path, DILocation loc);
81
cb65416 the great schism, part I
Laurent Sansonetti authored
82 protected:
9be9a37 now depend on revision 127367 of branch LLVM 2.9
Laurent Sansonetti authored
83 #if !defined(LLVM_TOT)
c3fac48 add support for llvm 2.9, test it by passing CFLAGS=-D__SUPPORT_LLVM_29_...
Laurent Sansonetti authored
84 DIBuilder *debug_info;
85 #else
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
86 DIFactory *debug_info;
c3fac48 add support for llvm 2.9, test it by passing CFLAGS=-D__SUPPORT_LLVM_29_...
Laurent Sansonetti authored
87 #endif
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
88 DICompileUnit debug_compile_unit;
89 DISubprogram debug_subprogram;
90
cf73725 experimental debugger
Laurent Sansonetti authored
91 bool debug_mode;
cb65416 the great schism, part I
Laurent Sansonetti authored
92 const char *fname;
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
93 bool inside_eval;
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
94 bool should_interpret;
95 bool can_interpret;
cb65416 the great schism, part I
Laurent Sansonetti authored
96
97 std::map<ID, Value *> lvars;
98 std::vector<ID> dvars;
8c55086 better ivar slot system for RubyObject + misc fixes/cleanup
Laurent Sansonetti authored
99 std::map<ID, void *> ivars_slots_cache;
cb65416 the great schism, part I
Laurent Sansonetti authored
100 std::map<std::string, GlobalVariable *> static_strings;
e379686 some work on unicode support (still in progress)
Laurent Sansonetti authored
101 std::map<CFHashCode, GlobalVariable *> static_ustrings;
cb65416 the great schism, part I
Laurent Sansonetti authored
102
0ff5064 optimizing symetric masgns
Laurent Sansonetti authored
103 class MAsgnValue {
104 public:
105 CallInst *ary;
106 std::vector<CallInst *> sets;
107 };
108 std::vector<MAsgnValue> masgn_values;
109
cb65416 the great schism, part I
Laurent Sansonetti authored
110 #if ROXOR_COMPILER_DEBUG
111 int level;
112 # define DEBUG_LEVEL_INC() (level++)
113 # define DEBUG_LEVEL_DEC() (level--)
114 #else
115 # define DEBUG_LEVEL_INC()
116 # define DEBUG_LEVEL_DEC()
117 #endif
118
2541db3 added preliminary support for backtracing/symbolication
Laurent Sansonetti authored
119 unsigned int current_line;
cb65416 the great schism, part I
Laurent Sansonetti authored
120 BasicBlock *bb;
121 BasicBlock *entry_bb;
122 ID current_mid;
164ca93 fixed super within a method that has a splat argument
Laurent Sansonetti authored
123 rb_vm_arity_t current_arity;
cb65416 the great schism, part I
Laurent Sansonetti authored
124 ID self_id;
125 Value *current_self;
126 bool current_block;
1961daa better fix than last one
Laurent Sansonetti authored
127 bool current_block_chain;
cb65416 the great schism, part I
Laurent Sansonetti authored
128 Value *current_var_uses;
129 Value *running_block;
cc6f8a9 fixed a bug in super without argument, it should pass the method's &bloc...
Laurent Sansonetti authored
130 Value *current_block_arg;
cb65416 the great schism, part I
Laurent Sansonetti authored
131 BasicBlock *begin_bb;
63c77f8 @vincentisambart now rescues in rescues should work properly in most cases
vincentisambart authored
132 BasicBlock *rescue_invoke_bb;
133 BasicBlock *rescue_rethrow_bb;
cb65416 the great schism, part I
Laurent Sansonetti authored
134 BasicBlock *ensure_bb;
18f25be fix a bug in the compilation of the 'next' expression which would not ho...
Laurent Sansonetti authored
135 PHINode *ensure_pn;
136 NODE *ensure_node;
cb65416 the great schism, part I
Laurent Sansonetti authored
137 bool current_rescue;
138 NODE *current_block_node;
139 Function *current_block_func;
1e86229 fixed ZSUPER compilation inside blocks
Laurent Sansonetti authored
140 Function *current_non_block_func;
cb65416 the great schism, part I
Laurent Sansonetti authored
141 GlobalVariable *current_opened_class;
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
142 bool dynamic_class;
cb65416 the great schism, part I
Laurent Sansonetti authored
143 BasicBlock *current_loop_begin_bb;
144 BasicBlock *current_loop_body_bb;
145 BasicBlock *current_loop_end_bb;
513ee74 @vincentisambart Fixed the return value of while/until loops
vincentisambart authored
146 PHINode *current_loop_exit_val;
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
147 int return_from_block;
148 int return_from_block_ids;
13f5368 fixed a bunch of super-dispatch bugs
Laurent Sansonetti authored
149 bool block_declaration;
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
150 AllocaInst *dispatch_argv;
8e0123e fix lexical const lookup bugs inside modules defined using the :: notati...
Laurent Sansonetti authored
151 long outer_mask;
6b101bd @takaokouji supported lexical const lookup. (fixes #619, #626, #1167, #1192) (refs #...
takaokouji authored
152 GlobalVariable *outer_stack;
cb65416 the great schism, part I
Laurent Sansonetti authored
153
5bcbc93 issue write barriers when storing objects into Binding slots (this shoul...
Laurent Sansonetti authored
154 Function *writeBarrierFunc;
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
155 Function *dispatchFunc;
38456a4 most fast ops in place
Laurent Sansonetti authored
156 Function *fastPlusFunc;
157 Function *fastMinusFunc;
158 Function *fastMultFunc;
159 Function *fastDivFunc;
160 Function *fastLtFunc;
161 Function *fastLeFunc;
162 Function *fastGtFunc;
163 Function *fastGeFunc;
944d624 optimize #== and #!= for non fixnum/float types
Laurent Sansonetti authored
164 Function *fastEqFunc;
165 Function *fastNeqFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
166 Function *fastEqqFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
167 Function *fastArefFunc;
168 Function *fastAsetFunc;
169 Function *fastShiftFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
170 Function *whenSplatFunc;
171 Function *prepareBlockFunc;
172 Function *pushBindingFunc;
173 Function *getBlockFunc;
5f62cf0 @lrz when compiling super without argument (ZSUPER), make sure to pass the cu...
lrz authored
174 Function *currentBlockFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
175 Function *currentBlockObjectFunc;
176 Function *getConstFunc;
177 Function *setConstFunc;
178 Function *prepareMethodFunc;
179 Function *singletonClassFunc;
180 Function *defineClassFunc;
181 Function *prepareIvarSlotFunc;
182 Function *getIvarFunc;
183 Function *setIvarFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
184 Function *willChangeValueFunc;
185 Function *didChangeValueFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
186 Function *definedFunc;
187 Function *undefFunc;
188 Function *aliasFunc;
189 Function *valiasFunc;
190 Function *newHashFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
191 Function *storeHashFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
192 Function *toAFunc;
193 Function *toAryFunc;
194 Function *catArrayFunc;
195 Function *dupArrayFunc;
196 Function *newArrayFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
197 Function *asetArrayFunc;
424e623 add support for C-style arrays (from/to Ruby)
Laurent Sansonetti authored
198 Function *entryArrayFunc;
199 Function *checkArrayFunc;
4856e8a fix a bug where calling a method defined with #define_method with a bloc...
Laurent Sansonetti authored
200 Function *lengthArrayFunc;
201 Function *ptrArrayFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
202 Function *newStructFunc;
203 Function *newOpaqueFunc;
ff75d60 added support for overwriting an ObjC method that accepts a pointer
Laurent Sansonetti authored
204 Function *newPointerFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
205 Function *getStructFieldsFunc;
206 Function *getOpaqueDataFunc;
207 Function *getPointerPtrFunc;
d1bb30d added simple compiler support for bit fields and C-style arrays, improve...
Laurent Sansonetti authored
208 Function *xmallocFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
209 Function *checkArityFunc;
210 Function *setStructFunc;
211 Function *newRangeFunc;
212 Function *newRegexpFunc;
213 Function *strInternFunc;
00b147f add basic support for __method__ and __callee__
Laurent Sansonetti authored
214 Function *selToSymFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
215 Function *keepVarsFunc;
216 Function *masgnGetElemBeforeSplatFunc;
217 Function *masgnGetElemAfterSplatFunc;
218 Function *masgnGetSplatFunc;
219 Function *newStringFunc;
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
220 Function *newString2Func;
221 Function *newString3Func;
cb65416 the great schism, part I
Laurent Sansonetti authored
222 Function *yieldFunc;
7da28cb make sure break makes yield return from its scope
Laurent Sansonetti authored
223 Function *getBrokenFunc;
208a965 a quick implementation for #define_method (not yet 100% complete)
Laurent Sansonetti authored
224 Function *blockEvalFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
225 Function *gvarSetFunc;
226 Function *gvarGetFunc;
227 Function *cvarSetFunc;
228 Function *cvarGetFunc;
229 Function *currentExceptionFunc;
230 Function *popExceptionFunc;
231 Function *getSpecialFunc;
232 Function *breakFunc;
6c5b476 a new implementation for return-from-block which uses an exception inste...
Laurent Sansonetti authored
233 Function *returnFromBlockFunc;
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
234 Function *returnedFromBlockFunc;
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
235 Function *checkReturnFromBlockFunc;
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
236 Function *setHasEnsureFunc;
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
237 Function *setScopeFunc;
238 Function *setCurrentClassFunc;
6b101bd @takaokouji supported lexical const lookup. (fixes #619, #626, #1167, #1192) (refs #...
takaokouji authored
239 Function *pushOuterFunc;
240 Function *popOuterFunc;
241 Function *setCurrentOuterFunc;
cf73725 experimental debugger
Laurent Sansonetti authored
242 Function *debugTrapFunc;
c437b62 - Adds the flip-flop operator (fixes #548)
Thibault Martin-Lagardette authored
243 Function *getFFStateFunc;
244 Function *setFFStateFunc;
945dba1 moving more primitives to the kernel
Laurent Sansonetti authored
245 Function *releaseOwnershipFunc;
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
246 Function *ocvalToRvalFunc;
247 Function *charToRvalFunc;
248 Function *ucharToRvalFunc;
249 Function *shortToRvalFunc;
250 Function *ushortToRvalFunc;
251 Function *intToRvalFunc;
252 Function *uintToRvalFunc;
253 Function *longToRvalFunc;
254 Function *ulongToRvalFunc;
255 Function *longLongToRvalFunc;
256 Function *ulongLongToRvalFunc;
257 Function *floatToRvalFunc;
258 Function *doubleToRvalFunc;
259 Function *selToRvalFunc;
260 Function *charPtrToRvalFunc;
261 Function *rvalToOcvalFunc;
262 Function *rvalToBoolFunc;
263 Function *rvalToCharFunc;
264 Function *rvalToUcharFunc;
265 Function *rvalToShortFunc;
266 Function *rvalToUshortFunc;
267 Function *rvalToIntFunc;
268 Function *rvalToUintFunc;
269 Function *rvalToLongFunc;
270 Function *rvalToUlongFunc;
271 Function *rvalToLongLongFunc;
272 Function *rvalToUlongLongFunc;
273 Function *rvalToFloatFunc;
274 Function *rvalToDoubleFunc;
275 Function *rvalToSelFunc;
276 Function *rvalToCharPtrFunc;
112362a support for C-level blocks (note: this requires a not-yet-released Bridg...
Laurent Sansonetti authored
277 Function *initBlockFunc;
807d2d2 fix the compilation of C blocks closures to not use a global variable to...
Laurent Sansonetti authored
278 Function *blockProcFunc;
fa6ceeb add implementation of MRI rb_call_super() method (note: untested)
Laurent Sansonetti authored
279 Function *setCurrentMRIMethodContext;
cb65416 the great schism, part I
Laurent Sansonetti authored
280
281 Constant *zeroVal;
282 Constant *oneVal;
283 Constant *twoVal;
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
284 Constant *threeVal;
cb65416 the great schism, part I
Laurent Sansonetti authored
285 Constant *nilVal;
286 Constant *trueVal;
287 Constant *falseVal;
288 Constant *undefVal;
289 Constant *splatArgFollowsVal;
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
290 Constant *defaultScope;
291 Constant *publicScope;
bb0b28c moving to LLVM r82747
Laurent Sansonetti authored
292
293 const Type *VoidTy;
294 const Type *Int1Ty;
295 const Type *Int8Ty;
296 const Type *Int16Ty;
297 const Type *Int32Ty;
298 const Type *Int64Ty;
299 const Type *FloatTy;
300 const Type *DoubleTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
301 const Type *RubyObjTy;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
302 const PointerType *RubyObjPtrTy;
303 const PointerType *RubyObjPtrPtrTy;
304 const PointerType *PtrTy;
305 const PointerType *PtrPtrTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
306 const Type *IntTy;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
307 const PointerType *Int32PtrTy;
d1bb30d added simple compiler support for bit fields and C-style arrays, improve...
Laurent Sansonetti authored
308 const Type *BitTy;
112362a support for C-level blocks (note: this requires a not-yet-released Bridg...
Laurent Sansonetti authored
309 const Type *BlockLiteralTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
310
fa57162 follow LLVM ToT
Laurent Sansonetti authored
311 unsigned dbg_mdkind;
312
cb65416 the great schism, part I
Laurent Sansonetti authored
313 void compile_node_error(const char *msg, NODE *node);
314
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
315 Function *
316 get_function(const char *name) {
317 Function *f = module->getFunction(name);
318 if (f == NULL) {
319 printf("function %s cannot be found!\n", name);
320 abort();
321 }
322 return f;
323 }
324
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
325 virtual Constant *
326 compile_const_pointer(void *ptr, const PointerType *type=NULL) {
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
327 if (type == NULL) {
328 type = PtrTy;
329 }
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
330 if (ptr == NULL) {
331 return ConstantPointerNull::get(type);
332 }
333 else {
334 Constant *ptrint = ConstantInt::get(IntTy, (long)ptr);
335 return ConstantExpr::getIntToPtr(ptrint, type);
336 }
cb65416 the great schism, part I
Laurent Sansonetti authored
337 }
338
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
339 Constant *
340 compile_const_pointer_to_pointer(void *ptr) {
341 return compile_const_pointer(ptr, PtrPtrTy);
cb65416 the great schism, part I
Laurent Sansonetti authored
342 }
343
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
344 bool should_inline_function(Function *f);
345
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
346 Value *compile_node0(NODE *node);
1e86229 fixed ZSUPER compilation inside blocks
Laurent Sansonetti authored
347 Function *compile_scope(NODE *node);
da50a49 better tco disable check
Laurent Sansonetti authored
348 Value *compile_call(NODE *node, bool use_tco=true);
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
349 Value *compile_yield(NODE *node);
fb086cf reduce usage of std::vector
Laurent Sansonetti authored
350 Instruction *compile_protected_call(Value *imp, Value **args_begin,
351 Value **args_end);
8e4c2c7 moving the dispatcher bits into the kernel + misc fixes/cleanup
Laurent Sansonetti authored
352 Instruction *compile_protected_call(Value *imp, std::vector<Value *>
353 &params);
354 Value *recompile_dispatch_argv(std::vector<Value *> &params, int idx);
cb65416 the great schism, part I
Laurent Sansonetti authored
355 void compile_dispatch_arguments(NODE *args,
356 std::vector<Value *> &arguments, int *pargc);
357 Function::ArgumentListType::iterator compile_optional_arguments(
358 Function::ArgumentListType::iterator iter, NODE *node);
359 void compile_boolean_test(Value *condVal, BasicBlock *ifTrueBB,
360 BasicBlock *ifFalseBB);
361 void compile_when_arguments(NODE *args, Value *comparedToVal,
362 BasicBlock *thenBB);
363 void compile_single_when_argument(NODE *arg, Value *comparedToVal,
364 BasicBlock *thenBB);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
365 void compile_method_definition(NODE *node);
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
366 virtual void compile_prepare_method(Value *classVal, Value *sel,
367 bool singleton, Function *new_function, rb_vm_arity_t &arity,
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
368 NODE *body);
cb65416 the great schism, part I
Laurent Sansonetti authored
369 Value *compile_dispatch_call(std::vector<Value *> &params);
370 Value *compile_when_splat(Value *comparedToVal, Value *splatVal);
371 Value *compile_attribute_assign(NODE *node, Value *extra_val);
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
372 virtual Value *compile_prepare_block_args(Function *func, int *flags);
945dba1 moving more primitives to the kernel
Laurent Sansonetti authored
373 Value *compile_prepare_block(void);
374 Value *compile_block(NODE *node);
cc6f8a9 fixed a bug in super without argument, it should pass the method's &bloc...
Laurent Sansonetti authored
375 Value *compile_block_get(Value *block_object);
cb65416 the great schism, part I
Laurent Sansonetti authored
376 Value *compile_binding(void);
377 Value *compile_optimized_dispatch_call(SEL sel, int argc,
378 std::vector<Value *> &params);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
379 Value *compile_lvar_assignment(ID vid, Value *val);
380 Value *compile_dvar_assignment(ID vid, Value *val);
381 Value *compile_lvar_get(ID vid);
cb65416 the great schism, part I
Laurent Sansonetti authored
382 Value *compile_ivar_assignment(ID vid, Value *val);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
383 Value *compile_ivar_get(ID vid);
cb65416 the great schism, part I
Laurent Sansonetti authored
384 Value *compile_cvar_assignment(ID vid, Value *val);
eeb7a10 added support for @@foo||=42, a lot of changes for a very stupid functio...
Laurent Sansonetti authored
385 Value *compile_cvar_get(ID vid, bool check);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
386 Value *compile_gvar_assignment(NODE *node, Value *val);
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
387 Value *compile_gvar_get(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
388 Value *compile_constant_declaration(NODE *node, Value *val);
0ff5064 optimizing symetric masgns
Laurent Sansonetti authored
389 Value *compile_multiple_assignment(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
390 Value *compile_multiple_assignment(NODE *node, Value *val);
391 void compile_multiple_assignment_element(NODE *node, Value *val);
392 Value *compile_current_class(void);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
393 virtual Value *compile_nsobject(void);
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
394 virtual Value *compile_standarderror(void);
8e0123e fix lexical const lookup bugs inside modules defined using the :: notati...
Laurent Sansonetti authored
395 Value *compile_class_path(NODE *node, int *flags, int *outer_level);
cb65416 the great schism, part I
Laurent Sansonetti authored
396 Value *compile_const(ID id, Value *outer);
397 Value *compile_singleton_class(Value *obj);
398 Value *compile_defined_expression(NODE *node);
399 Value *compile_dstr(NODE *node);
400 Value *compile_dvar_slot(ID name);
401 void compile_break_val(Value *val);
dcd258b @takaokouji fixed break, next and redo with ensure block, fixed codes below.
takaokouji authored
402 void compile_break_within_loop(Value *val);
403 void compile_break_within_block(Value *val);
e8d79c7 @vincentisambart a return in an ensure should now work properly
vincentisambart authored
404 void compile_simple_return(Value *val);
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
405 Value *compile_set_has_ensure(Value *val);
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
406 void compile_return_from_block(Value *val, int id);
407 void compile_return_from_block_handler(int id);
cb65416 the great schism, part I
Laurent Sansonetti authored
408 Value *compile_jump(NODE *node);
409 virtual Value *compile_ccache(ID id);
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
410 virtual Value *compile_sel(SEL sel, bool add_to_bb=true) {
411 return compile_const_pointer(sel, PtrTy);
cb65416 the great schism, part I
Laurent Sansonetti authored
412 }
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
413 virtual Value *compile_id(ID id);
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
414 Instruction *compile_const_global_string(const char *str,
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
415 const size_t str_len);
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
416 Instruction *compile_const_global_string(const char *str) {
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
417 return compile_const_global_string(str, strlen(str));
418 }
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
419 Instruction *compile_const_global_ustring(const UniChar *str,
f045214 regexps are now AOT compilable
Laurent Sansonetti authored
420 const size_t str_len);
e379686 some work on unicode support (still in progress)
Laurent Sansonetti authored
421
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
422 Value *compile_arity(rb_vm_arity_t &arity);
95f3b23 added support for AOT compilation of literal ranges
Laurent Sansonetti authored
423 Instruction *compile_range(Value *beg, Value *end, bool exclude_end,
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
424 bool retain=false);
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
425 Value *compile_literal(VALUE val);
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
426 virtual Value *compile_immutable_literal(VALUE val);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
427 virtual Value *compile_global_entry(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
428
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
429 void compile_set_current_scope(Value *klass, Value *scope);
430 Value *compile_set_current_class(Value *klass);
6b101bd @takaokouji supported lexical const lookup. (fixes #619, #626, #1167, #1192) (refs #...
takaokouji authored
431 Value *compile_push_outer(Value *klass);
432 Value *compile_pop_outer(void);
433 Value *compile_outer_stack(void);
434 Value *compile_set_current_outer(void);
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
435
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
436 Value *compile_landing_pad_header(void);
6c5b476 a new implementation for return-from-block which uses an exception inste...
Laurent Sansonetti authored
437 void compile_landing_pad_footer(bool pop_exception=true);
c80c60a in the objc->ruby 32-bit stub convert ruby exceptions to objc
Laurent Sansonetti authored
438 Value *compile_current_exception(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
439 void compile_rethrow_exception(void);
23ef57e now properly popping exceptions from the VM stack when we unwind from a ...
Laurent Sansonetti authored
440 void compile_pop_exception(int pos=0);
cb65416 the great schism, part I
Laurent Sansonetti authored
441 Value *compile_lvar_slot(ID name);
5bcbc93 issue write barriers when storing objects into Binding slots (this shoul...
Laurent Sansonetti authored
442 Value *compile_lvar_slot(ID name, bool *need_wb);
cb65416 the great schism, part I
Laurent Sansonetti authored
443 bool compile_lvars(ID *tbl);
444 Value *compile_new_struct(Value *klass, std::vector<Value *> &fields);
445 Value *compile_new_opaque(Value *klass, Value *val);
ff75d60 added support for overwriting an ObjC method that accepts a pointer
Laurent Sansonetti authored
446 Value *compile_new_pointer(const char *type, Value *val);
cb65416 the great schism, part I
Laurent Sansonetti authored
447 void compile_get_struct_fields(Value *val, Value *buf,
448 rb_vm_bs_boxed_t *bs_boxed);
449 Value *compile_get_opaque_data(Value *val, rb_vm_bs_boxed_t *bs_boxed,
450 Value *slot);
451 Value *compile_get_cptr(Value *val, const char *type, Value *slot);
452 void compile_check_arity(Value *given, Value *requested);
453 void compile_set_struct(Value *rcv, int field, Value *val);
d1bb30d added simple compiler support for bit fields and C-style arrays, improve...
Laurent Sansonetti authored
454 Value *compile_xmalloc(size_t len);
cb65416 the great schism, part I
Laurent Sansonetti authored
455
112362a support for C-level blocks (note: this requires a not-yet-released Bridg...
Laurent Sansonetti authored
456 Value *compile_lambda_to_funcptr(const char *type, Value *val,
457 Value *slot, bool is_block);
cb65416 the great schism, part I
Laurent Sansonetti authored
458 Value *compile_conversion_to_c(const char *type, Value *val,
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
459 Value *slot);
cb65416 the great schism, part I
Laurent Sansonetti authored
460 Value *compile_conversion_to_ruby(const char *type,
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
461 const Type *llvm_type, Value *val);
cf73725 experimental debugger
Laurent Sansonetti authored
462 void compile_debug_trap(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
463
8c55086 better ivar slot system for RubyObject + misc fixes/cleanup
Laurent Sansonetti authored
464 virtual Value *compile_slot_cache(ID id);
2a1240c @vincentisambart some refactoring
vincentisambart authored
465 void compile_keep_vars(BasicBlock *startBB, BasicBlock *mergeBB);
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
466
cb65416 the great schism, part I
Laurent Sansonetti authored
467 SEL mid_to_sel(ID mid, int arity);
4e1a3ba let's attach more metadata
Laurent Sansonetti authored
468
c437b62 - Adds the flip-flop operator (fixes #548)
Thibault Martin-Lagardette authored
469 Value *compile_get_ffstate(GlobalVariable *ffstate);
002ed5d now compile some of the VM primitives into bitcode that will be added to...
Laurent Sansonetti authored
470 Value *compile_set_ffstate(Value *val, Value *expected,
471 GlobalVariable *ffstate, BasicBlock *mergeBB, Function *f);
c437b62 - Adds the flip-flop operator (fixes #548)
Thibault Martin-Lagardette authored
472 Value *compile_ff2(NODE *current_node);
473 Value *compile_ff3(NODE *current_node);
474
4e1a3ba let's attach more metadata
Laurent Sansonetti authored
475 void attach_current_line_metadata(Instruction *insn);
cb65416 the great schism, part I
Laurent Sansonetti authored
476 };
477
bb0b28c moving to LLVM r82747
Laurent Sansonetti authored
478 #define context (RoxorCompiler::module->getContext())
479
cb65416 the great schism, part I
Laurent Sansonetti authored
480 class RoxorAOTCompiler : public RoxorCompiler {
481 public:
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
482 RoxorAOTCompiler(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
483
e29c2ec now interpreting potential cold paths (work in progress)
Laurent Sansonetti authored
484 Function *compile_main_function(NODE *node, bool *can_be_interpreted);
cb65416 the great schism, part I
Laurent Sansonetti authored
485
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
486 // BridgeSupport metadata needed for AOT compilation.
487 std::map<SEL, std::vector<std::string> *> bs_c_stubs_types,
488 bs_objc_stubs_types;
489
490 void load_bs_full_file(const char *path);
491
cb65416 the great schism, part I
Laurent Sansonetti authored
492 private:
493 std::map<ID, GlobalVariable *> ccaches;
494 std::map<SEL, GlobalVariable *> sels;
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
495 std::map<ID, GlobalVariable *> ids;
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
496 std::map<ID, GlobalVariable *> global_entries;
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
497 std::vector<GlobalVariable *> ivar_slots;
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
498 std::map<VALUE, GlobalVariable *> literals;
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
499 std::vector<std::string> c_stubs, objc_stubs;
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
500
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
501 GlobalVariable *cObject_gvar;
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
502 GlobalVariable *cStandardError_gvar;
503 std::vector<GlobalVariable *> class_gvars;
cb65416 the great schism, part I
Laurent Sansonetti authored
504
9d1b612 aot: precompiling BridgeSupport metadata (work in progress)
Laurent Sansonetti authored
505 Function *compile_init_function(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
506 Value *compile_ccache(ID id);
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
507 Value *compile_sel(SEL sel, bool add_to_bb=true);
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
508 void compile_prepare_method(Value *classVal, Value *sel,
509 bool singleton, Function *new_function, rb_vm_arity_t &arity,
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
510 NODE *body);
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
511 Value *compile_prepare_block_args(Function *func, int *flags);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
512 Value *compile_nsobject(void);
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
513 Value *compile_standarderror(void);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
514 Value *compile_id(ID id);
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
515 Value *compile_immutable_literal(VALUE val);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
516 Value *compile_global_entry(NODE *node);
8c55086 better ivar slot system for RubyObject + misc fixes/cleanup
Laurent Sansonetti authored
517 Value *compile_slot_cache(ID id);
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
518
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
519 Constant *
520 compile_const_pointer(void *ptr, const PointerType *type=NULL) {
cb65416 the great schism, part I
Laurent Sansonetti authored
521 if (ptr == NULL) {
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
522 return RoxorCompiler::compile_const_pointer(ptr, type);
cb65416 the great schism, part I
Laurent Sansonetti authored
523 }
524 printf("compile_const_pointer() called with a non-NULL pointer " \
525 "on the AOT compiler - leaving the ship!\n");
526 abort();
527 }
528 };
529
a6a5d3e started to trim out the static library
Laurent Sansonetti authored
530 #endif // !MACRUBY_STATIC
531
cb65416 the great schism, part I
Laurent Sansonetti authored
532 #endif /* __cplusplus */
533
534 #endif /* __COMPILER_H_ */
Something went wrong with that request. Please try again.