Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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