/
TODO
68 lines (53 loc) · 2 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
For 0.5 (must do):
[ ] fix irb Binding bugs
[ ] implement Enumerable::Enumerator
[ ] 32-bit should be back
[ ] Hash subclass for immediates
[ ] backtracing / symbolication
[ ] try/catch should use a C++ exception
[ ] rewrite load.c
[ ] fully implement FFI API
[ ] support for bigdecimal
[ ] support for json
[ ] support for zlib
[ ] sockets
[ ] merge stdlib from 1.9.2 trunk
[ ] rubygems should work (modulo C extensions)
[ ] most language/core/library specs should run (modulo a very few exceptions)
[/] port all rb_define_method() calls to rb_objc_define_method().
[/] port all rb_funcall() calls to rb_vm_call()
For 0.5 (tentative):
[ ] write a pass manager to eliminate unnecessary arrays generated by massigns
[ ] vectorize bignums
[ ] block inlining
[ ] fast regexp =~
[ ] rakefile-ize instruby.rb
[ ] finish AOT compiler (only normal mode)
[ ] multithreaded JIT
[ ] debugger interface
[ ] sync with LLVM 2.6 once it's released
Porting from rb_define_method() to rb_objc_define_method():
Replace calls to rb_define_method() with a call to
rb_objc_define_method() and rewrite the function to
conform to the following signatures:
// if arity -2
VALUE foo(VALUE recv, SEL sel, VALUE args);
// if arity -1
VALUE foo(VALUE recv, SEL sel, int argc, VALUE *argv);
// if arity 0
VALUE foo(VALUE recv, SEL sel);
// if arity 1
VALUE foo(VALUE recv, SEL sel, VALUE arg1);
// if arity 2
VALUE foo(VALUE recv, SEL sel, VALUE arg1, VALUE arg2);
// etc.
In the case of rb_define_global_function(), replace it with
rb_objc_define_method(rb_mKernel, ...)
In the case of rb_define_singleton_method() for defining class
functions and module-level functions, replace it with
rb_objc_define_method(*(VALUE *)klass, ...)
In the case of rb_define_singleton_method() for defining methods on
individual instances of objects, replace it with
rb_objc_define_method(rb_singleton_class(obj), ...)
In the case of rb_define_alloc_func(), replace it with
rb_objc_define_method(*(VALUE *)klass, "alloc", ..., 0)