Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 406 lines (366 sloc) 13.02 kb
cfd7b4d added licensing information on the new files
Laurent Sansonetti authored
1 /*
2 * MacRuby compiler.
3 *
4 * This file is covered by the Ruby license. See COPYING for more details.
5 *
6 * Copyright (C) 2008-2009, Apple Inc. All rights reserved.
7 */
8
cb65416 the great schism, part I
Laurent Sansonetti authored
9 #ifndef __COMPILER_H_
10 #define __COMPILER_H_
11
12 #if defined(__cplusplus)
13
14 // For the dispatcher.
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
15 #define DISPATCH_VCALL 1 // no receiver, no argument
16 #define DISPATCH_FCALL 2 // no receiver, one or more arguments
17 #define DISPATCH_SUPER 3 // super call
18 #define DISPATCH_SELF_ATTRASGN 4 // self attribute assignment
19 #define SPLAT_ARG_FOLLOWS 0xdeadbeef
cb65416 the great schism, part I
Laurent Sansonetti authored
20
21 // For defined?
22 #define DEFINED_IVAR 1
23 #define DEFINED_GVAR 2
24 #define DEFINED_CVAR 3
25 #define DEFINED_CONST 4
26 #define DEFINED_LCONST 5
27 #define DEFINED_SUPER 6
28 #define DEFINED_METHOD 7
29
30 class RoxorCompiler {
31 public:
32 static llvm::Module *module;
33 static RoxorCompiler *shared;
34
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
35 RoxorCompiler(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
36 virtual ~RoxorCompiler(void) { }
37
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
38 void set_fname(const char *_fname);
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
39
cb65416 the great schism, part I
Laurent Sansonetti authored
40 Value *compile_node(NODE *node);
41
42 virtual Function *compile_main_function(NODE *node);
43 Function *compile_read_attr(ID name);
44 Function *compile_write_attr(ID name);
9fab1ac fixed variadic functions/methods calls
Laurent Sansonetti authored
45 Function *compile_stub(const char *types, bool variadic, int min_argc,
46 bool is_objc);
cb65416 the great schism, part I
Laurent Sansonetti authored
47 Function *compile_bs_struct_new(rb_vm_bs_boxed_t *bs_boxed);
48 Function *compile_bs_struct_writer(rb_vm_bs_boxed_t *bs_boxed,
49 int field);
50 Function *compile_ffi_function(void *stub, void *imp, int argc);
51 Function *compile_to_rval_convertor(const char *type);
52 Function *compile_to_ocval_convertor(const char *type);
c1c347f AOT compiler: now supporting objc stubs and super dispatch
Laurent Sansonetti authored
53 Function *compile_objc_stub(Function *ruby_func, IMP ruby_imp,
54 const rb_vm_arity_t &arity, const char *types);
208a965 a quick implementation for #define_method (not yet 100% complete)
Laurent Sansonetti authored
55 Function *compile_block_caller(rb_vm_block_t *block);
cb65416 the great schism, part I
Laurent Sansonetti authored
56
57 const Type *convert_type(const char *type);
58
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
59 bool is_inside_eval(void) { return inside_eval; }
60 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
61 bool is_dynamic_class(void) { return dynamic_class; }
62 void set_dynamic_class(bool flag) { dynamic_class = flag; }
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
63
cb65416 the great schism, part I
Laurent Sansonetti authored
64 protected:
0f14388 emit dwarf metadata at compilation time and use it to establish backtrac...
Laurent Sansonetti authored
65 DIFactory *debug_info;
66 DICompileUnit debug_compile_unit;
67 DISubprogram debug_subprogram;
68
cb65416 the great schism, part I
Laurent Sansonetti authored
69 const char *fname;
c219e86 don't slow ivars used inside an eval string
Laurent Sansonetti authored
70 bool inside_eval;
cb65416 the great schism, part I
Laurent Sansonetti authored
71
72 std::map<ID, Value *> lvars;
73 std::vector<ID> dvars;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
74 std::map<ID, Value *> ivar_slots_cache;
cb65416 the great schism, part I
Laurent Sansonetti authored
75 std::map<std::string, GlobalVariable *> static_strings;
e379686 some work on unicode support (still in progress)
Laurent Sansonetti authored
76 std::map<CFHashCode, GlobalVariable *> static_ustrings;
cb65416 the great schism, part I
Laurent Sansonetti authored
77
78 #if ROXOR_COMPILER_DEBUG
79 int level;
80 # define DEBUG_LEVEL_INC() (level++)
81 # define DEBUG_LEVEL_DEC() (level--)
82 #else
83 # define DEBUG_LEVEL_INC()
84 # define DEBUG_LEVEL_DEC()
85 #endif
86
2541db3 added preliminary support for backtracing/symbolication
Laurent Sansonetti authored
87 unsigned int current_line;
cb65416 the great schism, part I
Laurent Sansonetti authored
88 BasicBlock *bb;
89 BasicBlock *entry_bb;
90 ID current_mid;
164ca93 fixed super within a method that has a splat argument
Laurent Sansonetti authored
91 rb_vm_arity_t current_arity;
cb65416 the great schism, part I
Laurent Sansonetti authored
92 bool current_instance_method;
93 ID self_id;
94 Value *current_self;
95 bool current_block;
1961daa better fix than last one
Laurent Sansonetti authored
96 bool current_block_chain;
cb65416 the great schism, part I
Laurent Sansonetti authored
97 Value *current_var_uses;
98 Value *running_block;
cc6f8a9 fixed a bug in super without argument, it should pass the method's &bloc...
Laurent Sansonetti authored
99 Value *current_block_arg;
cb65416 the great schism, part I
Laurent Sansonetti authored
100 BasicBlock *begin_bb;
63c77f8 @vincentisambart now rescues in rescues should work properly in most cases
vincentisambart authored
101 // block used in an invoke when an exception occurs
102 BasicBlock *rescue_invoke_bb;
103 // block to return to in a rescue if an exception is not handled
104 BasicBlock *rescue_rethrow_bb;
cb65416 the great schism, part I
Laurent Sansonetti authored
105 BasicBlock *ensure_bb;
106 bool current_rescue;
107 NODE *current_block_node;
108 Function *current_block_func;
109 GlobalVariable *current_opened_class;
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
110 bool dynamic_class;
cb65416 the great schism, part I
Laurent Sansonetti authored
111 bool current_module;
112 BasicBlock *current_loop_begin_bb;
113 BasicBlock *current_loop_body_bb;
114 BasicBlock *current_loop_end_bb;
513ee74 @vincentisambart Fixed the return value of while/until loops
vincentisambart authored
115 PHINode *current_loop_exit_val;
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
116 int return_from_block;
117 int return_from_block_ids;
5d7a33f @vincentisambart when there are multiple returns in an ensure,
vincentisambart authored
118 PHINode *ensure_pn;
13f5368 fixed a bunch of super-dispatch bugs
Laurent Sansonetti authored
119 bool block_declaration;
cb65416 the great schism, part I
Laurent Sansonetti authored
120
121 Function *dispatcherFunc;
38456a4 most fast ops in place
Laurent Sansonetti authored
122 Function *fastPlusFunc;
123 Function *fastMinusFunc;
124 Function *fastMultFunc;
125 Function *fastDivFunc;
126 Function *fastLtFunc;
127 Function *fastLeFunc;
128 Function *fastGtFunc;
129 Function *fastGeFunc;
944d624 optimize #== and #!= for non fixnum/float types
Laurent Sansonetti authored
130 Function *fastEqFunc;
131 Function *fastNeqFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
132 Function *fastEqqFunc;
133 Function *whenSplatFunc;
134 Function *prepareBlockFunc;
135 Function *pushBindingFunc;
136 Function *getBlockFunc;
137 Function *currentBlockObjectFunc;
138 Function *getConstFunc;
139 Function *setConstFunc;
140 Function *prepareMethodFunc;
141 Function *singletonClassFunc;
142 Function *defineClassFunc;
143 Function *prepareIvarSlotFunc;
144 Function *getIvarFunc;
145 Function *setIvarFunc;
146 Function *definedFunc;
147 Function *undefFunc;
148 Function *aliasFunc;
149 Function *valiasFunc;
150 Function *newHashFunc;
151 Function *toAFunc;
152 Function *toAryFunc;
153 Function *catArrayFunc;
154 Function *dupArrayFunc;
155 Function *newArrayFunc;
156 Function *newStructFunc;
157 Function *newOpaqueFunc;
ff75d60 added support for overwriting an ObjC method that accepts a pointer
Laurent Sansonetti authored
158 Function *newPointerFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
159 Function *getStructFieldsFunc;
160 Function *getOpaqueDataFunc;
161 Function *getPointerPtrFunc;
162 Function *checkArityFunc;
163 Function *setStructFunc;
164 Function *newRangeFunc;
165 Function *newRegexpFunc;
166 Function *strInternFunc;
167 Function *keepVarsFunc;
168 Function *masgnGetElemBeforeSplatFunc;
169 Function *masgnGetElemAfterSplatFunc;
170 Function *masgnGetSplatFunc;
171 Function *newStringFunc;
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
172 Function *newString2Func;
173 Function *newString3Func;
cb65416 the great schism, part I
Laurent Sansonetti authored
174 Function *yieldFunc;
7da28cb make sure break makes yield return from its scope
Laurent Sansonetti authored
175 Function *getBrokenFunc;
208a965 a quick implementation for #define_method (not yet 100% complete)
Laurent Sansonetti authored
176 Function *blockEvalFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
177 Function *gvarSetFunc;
178 Function *gvarGetFunc;
179 Function *cvarSetFunc;
180 Function *cvarGetFunc;
181 Function *currentExceptionFunc;
182 Function *popExceptionFunc;
183 Function *getSpecialFunc;
184 Function *breakFunc;
6c5b476 a new implementation for return-from-block which uses an exception inste...
Laurent Sansonetti authored
185 Function *returnFromBlockFunc;
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
186 Function *returnedFromBlockFunc;
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
187 Function *checkReturnFromBlockFunc;
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
188 Function *setHasEnsureFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
189 Function *longjmpFunc;
190 Function *setjmpFunc;
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
191 Function *setScopeFunc;
192 Function *setCurrentClassFunc;
77f9768 implemented super from a block
Laurent Sansonetti authored
193 Function *getCacheFunc;
cb65416 the great schism, part I
Laurent Sansonetti authored
194
195 Constant *zeroVal;
196 Constant *oneVal;
197 Constant *twoVal;
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
198 Constant *threeVal;
cb65416 the great schism, part I
Laurent Sansonetti authored
199 Constant *nilVal;
200 Constant *trueVal;
201 Constant *falseVal;
202 Constant *undefVal;
203 Constant *splatArgFollowsVal;
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
204 Constant *defaultScope;
205 Constant *publicScope;
bb0b28c moving to LLVM r82747
Laurent Sansonetti authored
206
207 const Type *VoidTy;
208 const Type *Int1Ty;
209 const Type *Int8Ty;
210 const Type *Int16Ty;
211 const Type *Int32Ty;
212 const Type *Int64Ty;
213 const Type *FloatTy;
214 const Type *DoubleTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
215 const Type *RubyObjTy;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
216 const PointerType *RubyObjPtrTy;
217 const PointerType *RubyObjPtrPtrTy;
218 const PointerType *PtrTy;
219 const PointerType *PtrPtrTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
220 const Type *IntTy;
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
221 const PointerType *Int32PtrTy;
cb65416 the great schism, part I
Laurent Sansonetti authored
222
223 void compile_node_error(const char *msg, NODE *node);
224
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
225 virtual Constant *
226 compile_const_pointer(void *ptr, const PointerType *type=NULL) {
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
227 if (type == NULL) {
228 type = PtrTy;
229 }
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
230 if (ptr == NULL) {
231 return ConstantPointerNull::get(type);
232 }
233 else {
234 Constant *ptrint = ConstantInt::get(IntTy, (long)ptr);
235 return ConstantExpr::getIntToPtr(ptrint, type);
236 }
cb65416 the great schism, part I
Laurent Sansonetti authored
237 }
238
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
239 Constant *
240 compile_const_pointer_to_pointer(void *ptr) {
241 return compile_const_pointer(ptr, PtrPtrTy);
cb65416 the great schism, part I
Laurent Sansonetti authored
242 }
243
c80c60a in the objc->ruby 32-bit stub convert ruby exceptions to objc
Laurent Sansonetti authored
244 Instruction *compile_protected_call(Value *imp,
cb65416 the great schism, part I
Laurent Sansonetti authored
245 std::vector<Value *> &params);
246 void compile_dispatch_arguments(NODE *args,
247 std::vector<Value *> &arguments, int *pargc);
248 Function::ArgumentListType::iterator compile_optional_arguments(
249 Function::ArgumentListType::iterator iter, NODE *node);
250 void compile_boolean_test(Value *condVal, BasicBlock *ifTrueBB,
251 BasicBlock *ifFalseBB);
252 void compile_when_arguments(NODE *args, Value *comparedToVal,
253 BasicBlock *thenBB);
254 void compile_single_when_argument(NODE *arg, Value *comparedToVal,
255 BasicBlock *thenBB);
12a1d67 fixing bugs in instance_eval & friends + fixed some specs so that they p...
Laurent Sansonetti authored
256 virtual void compile_prepare_method(Value *classVal, Value *sel,
257 bool singleton, Function *new_function, rb_vm_arity_t &arity,
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
258 NODE *body);
cb65416 the great schism, part I
Laurent Sansonetti authored
259 Value *compile_dispatch_call(std::vector<Value *> &params);
260 Value *compile_when_splat(Value *comparedToVal, Value *splatVal);
944d624 optimize #== and #!= for non fixnum/float types
Laurent Sansonetti authored
261 Value *compile_fast_op_call(SEL sel, Value *selfVal, Value *comparedToVal);
cb65416 the great schism, part I
Laurent Sansonetti authored
262 Value *compile_attribute_assign(NODE *node, Value *extra_val);
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
263 virtual Value *compile_prepare_block_args(Function *func, int *flags);
cc6f8a9 fixed a bug in super without argument, it should pass the method's &bloc...
Laurent Sansonetti authored
264 Value *compile_block_create(void);
265 Value *compile_block_get(Value *block_object);
cb65416 the great schism, part I
Laurent Sansonetti authored
266 Value *compile_binding(void);
267 Value *compile_optimized_dispatch_call(SEL sel, int argc,
268 std::vector<Value *> &params);
269 Value *compile_ivar_read(ID vid);
270 Value *compile_ivar_assignment(ID vid, Value *val);
271 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
272 Value *compile_cvar_get(ID vid, bool check);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
273 Value *compile_gvar_assignment(NODE *node, Value *val);
cb65416 the great schism, part I
Laurent Sansonetti authored
274 Value *compile_constant_declaration(NODE *node, Value *val);
275 Value *compile_multiple_assignment(NODE *node, Value *val);
276 void compile_multiple_assignment_element(NODE *node, Value *val);
277 Value *compile_current_class(void);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
278 virtual Value *compile_nsobject(void);
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
279 virtual Value *compile_standarderror(void);
aca37ff fixed const lookup inside a module defined under an explicit (using ::) ...
Laurent Sansonetti authored
280 Value *compile_class_path(NODE *node, bool *outer);
cb65416 the great schism, part I
Laurent Sansonetti authored
281 Value *compile_const(ID id, Value *outer);
282 Value *compile_singleton_class(Value *obj);
283 Value *compile_defined_expression(NODE *node);
284 Value *compile_dstr(NODE *node);
285 Value *compile_dvar_slot(ID name);
286 void compile_break_val(Value *val);
e8d79c7 @vincentisambart a return in an ensure should now work properly
vincentisambart authored
287 void compile_simple_return(Value *val);
208c475 optimized returns from non-ensure-scoped and non-Proc blocks
Laurent Sansonetti authored
288 Value *compile_set_has_ensure(Value *val);
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
289 void compile_return_from_block(Value *val, int id);
290 void compile_return_from_block_handler(int id);
cb65416 the great schism, part I
Laurent Sansonetti authored
291 Value *compile_jump(NODE *node);
292 virtual Value *compile_mcache(SEL sel, bool super);
77f9768 implemented super from a block
Laurent Sansonetti authored
293 Value *compile_get_mcache(Value *sel, bool super);
cb65416 the great schism, part I
Laurent Sansonetti authored
294 virtual Value *compile_ccache(ID id);
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
295 virtual Value *compile_sel(SEL sel, bool add_to_bb=true) {
296 return compile_const_pointer(sel, PtrTy);
cb65416 the great schism, part I
Laurent Sansonetti authored
297 }
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
298 virtual Value *compile_id(ID id);
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
299 GlobalVariable *compile_const_global_string(const char *str,
300 const size_t str_len);
301 GlobalVariable *compile_const_global_string(const char *str) {
302 return compile_const_global_string(str, strlen(str));
303 }
e379686 some work on unicode support (still in progress)
Laurent Sansonetti authored
304 GlobalVariable *compile_const_global_ustring(const UniChar *str,
305 const size_t str_len, CFHashCode hash);
306
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
307 Value *compile_arity(rb_vm_arity_t &arity);
95f3b23 added support for AOT compilation of literal ranges
Laurent Sansonetti authored
308 Instruction *compile_range(Value *beg, Value *end, bool exclude_end,
14423f1 fixed AOT compilation of literal ranges (objects should be retained)
Laurent Sansonetti authored
309 bool retain=false, bool add_to_bb=true);
913687b fixed a bug in the way we compile literal strings
Laurent Sansonetti authored
310 Value *compile_literal(VALUE val);
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
311 virtual Value *compile_immutable_literal(VALUE val);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
312 virtual Value *compile_global_entry(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
313
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
314 void compile_set_current_scope(Value *klass, Value *scope);
315 Value *compile_set_current_class(Value *klass);
316
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
317 Value *compile_landing_pad_header(void);
318 Value *compile_landing_pad_header(const std::type_info &eh_type);
6c5b476 a new implementation for return-from-block which uses an exception inste...
Laurent Sansonetti authored
319 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
320 Value *compile_current_exception(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
321 void compile_rethrow_exception(void);
322 void compile_pop_exception(void);
323 Value *compile_lvar_slot(ID name);
324 bool compile_lvars(ID *tbl);
325 Value *compile_new_struct(Value *klass, std::vector<Value *> &fields);
326 Value *compile_new_opaque(Value *klass, Value *val);
ff75d60 added support for overwriting an ObjC method that accepts a pointer
Laurent Sansonetti authored
327 Value *compile_new_pointer(const char *type, Value *val);
cb65416 the great schism, part I
Laurent Sansonetti authored
328 void compile_get_struct_fields(Value *val, Value *buf,
329 rb_vm_bs_boxed_t *bs_boxed);
330 Value *compile_get_opaque_data(Value *val, rb_vm_bs_boxed_t *bs_boxed,
331 Value *slot);
332 Value *compile_get_cptr(Value *val, const char *type, Value *slot);
333 void compile_check_arity(Value *given, Value *requested);
334 void compile_set_struct(Value *rcv, int field, Value *val);
335
336 Value *compile_conversion_to_c(const char *type, Value *val,
337 Value *slot);
338 Value *compile_conversion_to_ruby(const char *type,
339 const Type *llvm_type, Value *val);
340
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
341 Value *compile_slot_cache(ID id);
342 virtual Value *gen_slot_cache(ID id);
cb65416 the great schism, part I
Laurent Sansonetti authored
343 ICmpInst *is_value_a_fixnum(Value *val);
344 void compile_ivar_slots(Value *klass, BasicBlock::InstListType &list,
345 BasicBlock::InstListType::iterator iter);
346 bool unbox_ruby_constant(Value *val, VALUE *rval);
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
347 Value *optimized_immediate_op(SEL sel, Value *leftVal, Value *rightVal,
348 bool float_op, bool *is_predicate);
349 Value *compile_double_coercion(Value *val, Value *mask,
350 BasicBlock *fallback_bb, Function *f);
2a1240c @vincentisambart some refactoring
vincentisambart authored
351 void compile_keep_vars(BasicBlock *startBB, BasicBlock *mergeBB);
01528a7 floating point arithmetic optimization: Float objects are now immediate ...
Laurent Sansonetti authored
352
cb65416 the great schism, part I
Laurent Sansonetti authored
353 SEL mid_to_sel(ID mid, int arity);
354 };
355
bb0b28c moving to LLVM r82747
Laurent Sansonetti authored
356 #define context (RoxorCompiler::module->getContext())
357
cb65416 the great schism, part I
Laurent Sansonetti authored
358 class RoxorAOTCompiler : public RoxorCompiler {
359 public:
3432fd1 a better exception-based implementation for return-from-block
Laurent Sansonetti authored
360 RoxorAOTCompiler(void);
cb65416 the great schism, part I
Laurent Sansonetti authored
361
362 Function *compile_main_function(NODE *node);
363
364 private:
365 std::map<SEL, GlobalVariable *> mcaches;
366 std::map<ID, GlobalVariable *> ccaches;
367 std::map<SEL, GlobalVariable *> sels;
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
368 std::map<ID, GlobalVariable *> ids;
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
369 std::map<ID, GlobalVariable *> global_entries;
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
370 std::vector<GlobalVariable *> ivar_slots;
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
371 std::map<VALUE, GlobalVariable *> literals;
372
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
373 GlobalVariable *cObject_gvar;
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
374 GlobalVariable *cStandardError_gvar;
375 std::vector<GlobalVariable *> class_gvars;
cb65416 the great schism, part I
Laurent Sansonetti authored
376
377 Value *compile_mcache(SEL sel, bool super);
378 Value *compile_ccache(ID id);
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
379 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
380 void compile_prepare_method(Value *classVal, Value *sel,
381 bool singleton, Function *new_function, rb_vm_arity_t &arity,
9590d40 fixing and adding several missing ruby method features
Laurent Sansonetti authored
382 NODE *body);
2c54dbd AOT compiler: added support for blocks
Laurent Sansonetti authored
383 Value *compile_prepare_block_args(Function *func, int *flags);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
384 Value *compile_nsobject(void);
78b1e93 added support for AOT compilation of the rb_eStandardError constant
Laurent Sansonetti authored
385 Value *compile_standarderror(void);
57d8085 AOT compiler: added support for NSObject and ID compilation
Laurent Sansonetti authored
386 Value *compile_id(ID id);
907bd81 AOT compiler: added support for some immutable literals
Laurent Sansonetti authored
387 Value *compile_immutable_literal(VALUE val);
42e4a2a AOT compiler: added support for global variables
Laurent Sansonetti authored
388 Value *compile_global_entry(NODE *node);
cb65416 the great schism, part I
Laurent Sansonetti authored
389
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
390 Value *gen_slot_cache(ID id);
85b7cc2 AOT compiler: ivar slots support
Laurent Sansonetti authored
391
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
392 Constant *
393 compile_const_pointer(void *ptr, const PointerType *type=NULL) {
cb65416 the great schism, part I
Laurent Sansonetti authored
394 if (ptr == NULL) {
f61f2c7 @vincentisambart const pointers should be real constants
vincentisambart authored
395 return RoxorCompiler::compile_const_pointer(ptr, type);
cb65416 the great schism, part I
Laurent Sansonetti authored
396 }
397 printf("compile_const_pointer() called with a non-NULL pointer " \
398 "on the AOT compiler - leaving the ship!\n");
399 abort();
400 }
401 };
402
403 #endif /* __cplusplus */
404
405 #endif /* __COMPILER_H_ */
Something went wrong with that request. Please try again.