Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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