ruby-libjit 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -1,4 +1,4 @@
1
- Ruby-libjit 0.1.0
1
+ Ruby-libjit 0.2.0
2
2
  Copyright (C) 2008 Paul Brannan
3
3
 
4
4
  Ruby-libjit is a wrapper for the libjit library. It provides basic
@@ -8,6 +8,12 @@ provided so that jit code may be written in a ruby-like manner.
8
8
 
9
9
  Please see the file COPYING for license information.
10
10
 
11
+ To install it:
12
+
13
+ gem install ruby-libjit
14
+
15
+ but you'll probably need to install libjit itself first (see below).
16
+
11
17
  A simple example:
12
18
 
13
19
  :include: sample/simple.rb
@@ -21,28 +27,13 @@ To build ruby-libjit, you will need to install libjit. If it is not
21
27
  available pre-compiled for your platform, you may build the latest
22
28
  release like this:
23
29
 
24
- $ wget ftp://ftp.gnu.org/gnu/dotgnu/pnet/libjit-0.1.0.tar.gz
25
- $ tar xvfz libjit-0.1.0.tar.gz
26
- $ cd libjit-0.1.0
27
- $ ./configure
28
- $ make
29
- $ sudo make install
30
-
31
- Or the latest development version like this:
32
-
33
- $ cvs -z3 -d:pserver:anonymous@cvs.sv.gnu.org:/sources/dotgnu-pnet co libjit
34
- $ cd libjit
35
- $ ./auto_gen.sh
30
+ $ wget ftp://ftp.gnu.org/gnu/dotgnu/libjit/libjit-0.1.2.tar.gz
31
+ $ tar xvfz libjit-0.1.2.tar.gz
32
+ $ cd libjit-0.1.2
36
33
  $ ./configure
37
34
  $ make
38
35
  $ sudo make install
39
36
 
40
- To build ruby-libjit, run setup.rb:
41
-
42
- $ ruby setup.rb config
43
- $ ruby setup.rb setup
44
- $ sudo ruby setup.rb install
45
-
46
37
  For a more complete JIT framework and compiler for Ruby code, please
47
38
  take a look at Ludicrous:
48
39
 
data/ext/extconf.rb CHANGED
@@ -1,6 +1,14 @@
1
1
  require 'mkmf'
2
+ require 'rbconfig'
2
3
 
3
- if not have_library('jit', 'jit_init', ["jit/jit.h"]) then
4
+ if Config::CONFIG['host_os'] =~ /cygwin|win32|windows/ then
5
+ need_windows_h = [ 'windows.h' ]
6
+ $defs << ' -DNEED_WINDOWS_H'
7
+ else
8
+ need_windows_h = [ ]
9
+ end
10
+
11
+ if not have_library('jit', 'jit_init', need_windows_h + ["jit/jit.h"]) then
4
12
  $stderr.puts "libjit not found"
5
13
  exit 1
6
14
  end
data/ext/insns.inc.rpp CHANGED
@@ -184,7 +184,6 @@ insns = [
184
184
  [ 'push' , _, V ] ,
185
185
  [ 'push_ptr' , _, V, T ] ,
186
186
  [ 'pop_stack' , _, N ] ,
187
- [ 'stack_top' , V ] ,
188
187
  ]
189
188
 
190
189
  insns.each do |name, retval_type, *arg_types|
data/ext/jit.c CHANGED
@@ -2,6 +2,10 @@
2
2
  #define _GNU_SOURCE
3
3
  #endif
4
4
 
5
+ #ifdef NEED_WINDOWS_H
6
+ #include <windows.h>
7
+ #endif
8
+
5
9
  #include <ruby.h>
6
10
 
7
11
  #include <stdio.h>
@@ -16,6 +20,14 @@
16
20
  #include "minimal_node.h"
17
21
  #endif
18
22
 
23
+ #ifndef RARRAY_LEN
24
+ #define RARRAY_LEN(a) RARRAY(a)->len
25
+ #endif
26
+
27
+ #ifndef RARRAY_PTR
28
+ #define RARRAY_PTR(a) RARRAY(a)->ptr
29
+ #endif
30
+
19
31
  static VALUE rb_mJIT;
20
32
  static VALUE rb_cContext;
21
33
  static VALUE rb_cFunction;
@@ -89,6 +101,18 @@ typedef jit_ptr jit_Function_Ptr;
89
101
  * ---------------------------------------------------------------------------
90
102
  */
91
103
 
104
+ static VALUE lookup_const(VALUE module, VALUE symbol)
105
+ {
106
+ if(SYMBOL_P(symbol))
107
+ {
108
+ return rb_const_get(module, SYM2ID(symbol));
109
+ }
110
+ else
111
+ {
112
+ return symbol;
113
+ }
114
+ }
115
+
92
116
  static void check_type(char const * param_name, VALUE expected_klass, VALUE val)
93
117
  {
94
118
  if(!rb_obj_is_kind_of(val, expected_klass))
@@ -381,6 +405,7 @@ static VALUE function_value_klass(VALUE self, VALUE type_v, VALUE klass)
381
405
 
382
406
  Data_Get_Struct(self, struct _jit_function, function);
383
407
 
408
+ type_v = lookup_const(rb_cType, type_v);
384
409
  check_type("type", rb_cType, type_v);
385
410
  Data_Get_Struct(type_v, struct _jit_type, type);
386
411
 
@@ -514,6 +539,7 @@ static VALUE function_const(VALUE self, VALUE type_v, VALUE constant)
514
539
 
515
540
  Data_Get_Struct(self, struct _jit_function, function);
516
541
 
542
+ type_v = lookup_const(rb_cType, type_v);
517
543
  check_type("type", rb_cType, type_v);
518
544
  Data_Get_Struct(type_v, struct _jit_type, type);
519
545
 
@@ -537,9 +563,9 @@ static void convert_call_args(jit_function_t function, jit_value_t * args, VALUE
537
563
  {
538
564
  int j;
539
565
 
540
- for(j = 0; j < RARRAY(args_v)->len; ++j)
566
+ for(j = 0; j < RARRAY_LEN(args_v); ++j)
541
567
  {
542
- VALUE value = RARRAY(args_v)->ptr[j];
568
+ VALUE value = RARRAY_PTR(args_v)[j];
543
569
  jit_value_t arg;
544
570
 
545
571
  jit_type_t type = jit_type_get_param(signature, j);
@@ -596,7 +622,7 @@ static VALUE function_insn_call(int argc, VALUE * argv, VALUE self)
596
622
  check_type("called function", rb_cFunction, called_function_v);
597
623
  Data_Get_Struct(called_function_v, struct _jit_function, called_function);
598
624
 
599
- num_args = RARRAY(args_v)->len;
625
+ num_args = RARRAY_LEN(args_v);
600
626
  args = ALLOCA_N(jit_value_t, num_args);
601
627
 
602
628
  signature = jit_function_get_signature(function);
@@ -650,7 +676,7 @@ static VALUE function_insn_call_native(int argc, VALUE * argv, VALUE self)
650
676
 
651
677
  Data_Get_Struct(signature_v, struct _jit_type, signature);
652
678
 
653
- num_args = RARRAY(args_v)->len;
679
+ num_args = RARRAY_LEN(args_v);
654
680
  args = ALLOCA_N(jit_value_t, num_args);
655
681
 
656
682
  if(num_args != jit_type_num_params(signature))
@@ -989,27 +1015,31 @@ static VALUE wrap_type(jit_type_t type)
989
1015
  static VALUE type_s_create_signature(
990
1016
  VALUE klass, VALUE abi_v, VALUE return_type_v, VALUE params_v)
991
1017
  {
992
- jit_abi_t abi = NUM2INT(abi_v);
1018
+ jit_abi_t abi;
993
1019
  jit_type_t return_type;
994
1020
  jit_type_t * params;
995
1021
  jit_type_t signature;
996
1022
  int j;
997
1023
  int len;
998
1024
 
1025
+ return_type_v = lookup_const(rb_cType, return_type_v);
999
1026
  check_type("return type", rb_cType, return_type_v);
1000
-
1001
1027
  Data_Get_Struct(return_type_v, struct _jit_type, return_type);
1002
1028
 
1003
1029
  Check_Type(params_v, T_ARRAY);
1004
- len = RARRAY(params_v)->len;
1030
+ len = RARRAY_LEN(params_v);
1005
1031
  params = ALLOCA_N(jit_type_t, len);
1006
1032
  for(j = 0; j < len; ++j)
1007
1033
  {
1008
- VALUE param = RARRAY(params_v)->ptr[j];
1034
+ VALUE param = RARRAY_PTR(params_v)[j];
1035
+ param = lookup_const(rb_cType, param);
1009
1036
  check_type("param", rb_cType, param);
1010
1037
  Data_Get_Struct(param, struct _jit_type, params[j]);
1011
1038
  }
1012
1039
 
1040
+ abi_v = lookup_const(rb_mABI, abi_v);
1041
+ abi = NUM2INT(abi_v);
1042
+
1013
1043
  signature = jit_type_create_signature(abi, return_type, params, len, 1);
1014
1044
  return wrap_type(signature);
1015
1045
  }
@@ -1029,16 +1059,16 @@ static VALUE type_s_create_struct(
1029
1059
  int j;
1030
1060
 
1031
1061
  Check_Type(fields_v, T_ARRAY);
1032
- len = RARRAY(fields_v)->len;
1062
+ len = RARRAY_LEN(fields_v);
1033
1063
  fields = ALLOCA_N(jit_type_t, len);
1034
1064
  for(j = 0; j < len; ++j)
1035
1065
  {
1036
- VALUE field = RARRAY(fields_v)->ptr[j];
1066
+ VALUE field = RARRAY_PTR(fields_v)[j];
1037
1067
  check_type("field", rb_cType, field);
1038
1068
  Data_Get_Struct(field, struct _jit_type, fields[j]);
1039
1069
  }
1040
1070
 
1041
- struct_type = jit_type_create_struct(fields, RARRAY(fields_v)->len, 1);
1071
+ struct_type = jit_type_create_struct(fields, RARRAY_LEN(fields_v), 1);
1042
1072
  return wrap_type_with_klass(struct_type, klass);
1043
1073
  }
1044
1074
 
@@ -1293,6 +1323,7 @@ static VALUE value_type(VALUE self)
1293
1323
  jit_type_t type;
1294
1324
  Data_Get_Struct(self, struct _jit_value, value);
1295
1325
  type = jit_value_get_type(value);
1326
+ type = jit_type_copy(type);
1296
1327
  return wrap_type(type);
1297
1328
  }
1298
1329
 
data/lib/jit/array.rb CHANGED
@@ -78,6 +78,10 @@ module JIT
78
78
  class Instance < JIT::Value
79
79
  attr_reader :array_type
80
80
  attr_reader :type
81
+
82
+ # A pointer to the first element of the array. Note that this
83
+ # differs from +address+, which returns the address of a pointer
84
+ # to the array.
81
85
  attr_reader :ptr
82
86
 
83
87
  # TODO: This breaks code below?
@@ -129,7 +133,3 @@ module JIT
129
133
  end
130
134
  end
131
135
 
132
- if __FILE__ == $0 then
133
- a = JIT::Array.new()
134
- end
135
-
data/lib/jit/function.rb CHANGED
@@ -48,8 +48,7 @@ module JIT
48
48
  return If.new(self, end_label)
49
49
  end
50
50
 
51
- # :nodoc:
52
- class If
51
+ class If # :nodoc:
53
52
  def initialize(function, end_label)
54
53
  @function = function
55
54
  @end_label = end_label
@@ -92,8 +91,7 @@ module JIT
92
91
  return Case.new(self, value)
93
92
  end
94
93
 
95
- # :nodoc:
96
- class Case
94
+ class Case # :nodoc:
97
95
  def initialize(function, value)
98
96
  @function = function
99
97
  @value = value
@@ -120,49 +118,50 @@ module JIT
120
118
 
121
119
  # Usage:
122
120
  #
123
- # until(proc { <condition> }) {
121
+ # until { <condition> }.do {
124
122
  # # loop body
125
123
  # } .end
126
124
  #
127
- def until(cond, &block)
125
+ def until(&block)
128
126
  start_label = Label.new
129
127
  done_label = Label.new
130
128
  insn_label(start_label)
131
- insn_branch_if(cond.call, done_label)
129
+ insn_branch_if(block.call, done_label)
132
130
  loop = Loop.new(self, start_label, done_label)
133
- block.call(loop)
134
- insn_branch(start_label)
135
- insn_label(done_label)
136
131
  return loop
137
132
  end
138
133
 
139
134
  # Usage:
140
135
  #
141
- # while(proc { <condition> }) {
136
+ # while { <condition> }.do {
142
137
  # # loop body
143
138
  # } .end
144
139
  #
145
- def while(cond, &block)
140
+ def while(&block)
146
141
  start_label = Label.new
147
142
  done_label = Label.new
148
143
  insn_label(start_label)
149
- insn_branch_if_not(cond.call, done_label)
144
+ insn_branch_if_not(block.call, done_label)
150
145
  loop = Loop.new(self, start_label, done_label)
151
- block.call(loop)
152
- insn_branch(start_label)
153
- insn_label(done_label)
154
146
  return loop
155
147
  end
156
148
 
157
- # :nodoc:
158
- class Loop
149
+ class Loop # :nodoc:
159
150
  def initialize(function, start_label, done_label)
160
151
  @function = function
152
+ @start_label = start_label
161
153
  @redo_label = start_label
162
154
  @done_label = done_label
163
155
  end
164
156
 
157
+ def do(&block)
158
+ block.call(self)
159
+ return self
160
+ end
161
+
165
162
  def end
163
+ @function.insn_branch(@start_label)
164
+ @function.insn_label(@done_label)
166
165
  end
167
166
 
168
167
  def break
@@ -0,0 +1,98 @@
1
+ require 'jit'
2
+ require 'jit/value'
3
+
4
+ module JIT
5
+
6
+ # An abstraction for a pointer to a non-void type.
7
+ #
8
+ # Example usage:
9
+ #
10
+ # TODO
11
+ #
12
+ class Pointer < JIT::Type
13
+ attr_reader :type
14
+
15
+ # Create a new JIT pointer type.
16
+ #
17
+ # +type+:: The pointed-to type.
18
+ #
19
+ def self.new(type)
20
+ pointer_type = self.create_pointer(type)
21
+ pointer_type.instance_eval do
22
+ @type = type
23
+ end
24
+ return pointer_type
25
+ end
26
+
27
+ # Wrap an existing void pointer.
28
+ #
29
+ # +ptr+:: The pointer to wrap.
30
+ #
31
+ def wrap(ptr)
32
+ return Instance.wrap(self, ptr)
33
+ end
34
+
35
+ # Return the offset (in bytes) of the element at the given +index+.
36
+ #
37
+ # +index+:: The index of the desired element.
38
+ #
39
+ def offset_of(index)
40
+ return index * @type.size
41
+ end
42
+
43
+ # Return the type of the element at the given +index+.
44
+ #
45
+ # +index+:: The index of the desired element.
46
+ #
47
+ def type_of(index)
48
+ return @type
49
+ end
50
+
51
+ # An abstraction for a pointer object.
52
+ #
53
+ class Instance < JIT::Value
54
+ # Wrap an existing void pointer.
55
+ #
56
+ # +array_type+:: The JIT::Array type to wrap.
57
+ # +ptr+:: A pointer to the first element in the array.
58
+ #
59
+ def self.wrap(pointer_type, ptr)
60
+ value = self.new_value(ptr.function, pointer_type)
61
+ value.store(ptr)
62
+ value.instance_eval do
63
+ @pointer_type = pointer_type
64
+ @pointed_type = pointer_type.type
65
+ @function = ptr.function
66
+ @ptr = ptr
67
+ end
68
+ return value
69
+ end
70
+
71
+ # Generate JIT code to retrieve the element at the given +index+.
72
+ #
73
+ # +index+:: The index of the desired element. The value of the
74
+ # index must be known at compile-time.
75
+ #
76
+ def [](index)
77
+ @function.insn_load_relative(
78
+ @ptr,
79
+ @pointer_type.offset_of(index),
80
+ @pointer_type.type_of(index))
81
+ end
82
+
83
+ # Generate JIT code to assign to the element at the given +index+.
84
+ #
85
+ # +index+:: The index of the desired element. The value of the
86
+ # index must be known at compile-time.
87
+ # +value+:: The JIT::Value to assign to the element.
88
+ #
89
+ def []=(index, value)
90
+ @function.insn_store_relative(
91
+ @ptr,
92
+ @pointer_type.offset_of(index),
93
+ value)
94
+ end
95
+ end
96
+ end
97
+ end
98
+
data/lib/jit/struct.rb CHANGED
@@ -156,8 +156,3 @@ module JIT
156
156
  end
157
157
  end
158
158
 
159
- if __FILE__ == $0 then
160
- s = JIT::Struct.new()
161
- p s
162
- end
163
-
data/sample/fib.rb CHANGED
@@ -2,19 +2,19 @@ require 'jit'
2
2
 
3
3
  fib = nil
4
4
  signature = JIT::Type.create_signature(
5
- JIT::ABI::CDECL,
6
- JIT::Type::INT,
7
- [ JIT::Type::INT ])
5
+ :CDECL,
6
+ :INT,
7
+ [ :INT ])
8
8
  fib = JIT::Function.build(signature) do |f|
9
9
  n = f.param(0)
10
10
 
11
- a = f.value(JIT::Type::INT, 0)
12
- b = f.value(JIT::Type::INT, 1)
13
- c = f.value(JIT::Type::INT, 1)
11
+ a = f.value(:INT, 0)
12
+ b = f.value(:INT, 1)
13
+ c = f.value(:INT, 1)
14
14
 
15
- i = f.value(JIT::Type::INT, 0)
15
+ i = f.value(:INT, 0)
16
16
 
17
- f.while(proc { i < n }) {
17
+ f.while{ i < n }.do {
18
18
  c.store(a + b)
19
19
  a.store(b)
20
20
  b.store(c)
@@ -169,7 +169,7 @@ class TestJitFunction < Test::Unit::TestCase
169
169
  function = JIT::Function.compile(context, signature) do |f|
170
170
  true_value = f.const(JIT::Type::INT, 1)
171
171
  false_value = f.const(JIT::Type::INT, 0)
172
- f.while(proc { true_value }) {
172
+ f.while{ true_value }.do {
173
173
  f.insn_return true_value
174
174
  }.end
175
175
  f.insn_return false_value
@@ -189,7 +189,7 @@ class TestJitFunction < Test::Unit::TestCase
189
189
  function = JIT::Function.compile(context, signature) do |f|
190
190
  value = f.value(JIT::Type::INT)
191
191
  value.store(f.const(JIT::Type::INT, 0))
192
- f.while(proc { value < f.const(JIT::Type::INT, 2) }) {
192
+ f.while{ value < f.const(JIT::Type::INT, 2) }.do {
193
193
  value.store(value + f.const(JIT::Type::INT, 1))
194
194
  }.end
195
195
  f.insn_return value
@@ -209,7 +209,7 @@ class TestJitFunction < Test::Unit::TestCase
209
209
  function = JIT::Function.compile(context, signature) do |f|
210
210
  true_value = f.const(JIT::Type::INT, 1)
211
211
  false_value = f.const(JIT::Type::INT, 0)
212
- f.while(proc { false_value }) {
212
+ f.while{ false_value }.do {
213
213
  f.insn_return true_value
214
214
  }.end
215
215
  f.insn_return false_value
@@ -229,7 +229,7 @@ class TestJitFunction < Test::Unit::TestCase
229
229
  function = JIT::Function.compile(context, signature) do |f|
230
230
  true_value = f.const(JIT::Type::INT, 1)
231
231
  false_value = f.const(JIT::Type::INT, 0)
232
- f.until(proc { false_value }) {
232
+ f.until{ false_value }.do {
233
233
  f.insn_return true_value
234
234
  }.end
235
235
  f.insn_return false_value
@@ -249,7 +249,7 @@ class TestJitFunction < Test::Unit::TestCase
249
249
  function = JIT::Function.compile(context, signature) do |f|
250
250
  value = f.value(JIT::Type::INT)
251
251
  value.store(f.const(JIT::Type::INT, 0))
252
- f.until(proc { value == f.const(JIT::Type::INT, 2) }) {
252
+ f.until{ value == f.const(JIT::Type::INT, 2) }.do {
253
253
  value.store(value + f.const(JIT::Type::INT, 1))
254
254
  }.end
255
255
  f.insn_return value
@@ -269,7 +269,7 @@ class TestJitFunction < Test::Unit::TestCase
269
269
  function = JIT::Function.compile(context, signature) do |f|
270
270
  true_value = f.const(JIT::Type::INT, 1)
271
271
  false_value = f.const(JIT::Type::INT, 0)
272
- f.until(proc { true_value }) {
272
+ f.until{ true_value }.do {
273
273
  f.insn_return true_value
274
274
  }.end
275
275
  f.insn_return false_value
@@ -0,0 +1,63 @@
1
+ require 'jit/pointer'
2
+ require 'jit/array'
3
+ require 'jit/function'
4
+ require 'test/unit'
5
+ require 'assertions'
6
+
7
+ class TestJitArray < Test::Unit::TestCase
8
+ include JitAssertions
9
+
10
+ def test_new_pointer
11
+ p_type = JIT::Pointer.new(JIT::Type::INT)
12
+ assert_equal JIT::Type::INT, p_type.type
13
+ end
14
+
15
+ # TODO: wrap
16
+
17
+ def test_offset_of
18
+ p_type = JIT::Pointer.new(JIT::Type::INT)
19
+ assert_equal 0, p_type.offset_of(0)
20
+ assert_equal 4, p_type.offset_of(1)
21
+ assert_equal 8, p_type.offset_of(2)
22
+ assert_equal 12, p_type.offset_of(3)
23
+ # TODO: check out of bounds
24
+ end
25
+
26
+ def test_type_of
27
+ p_type = JIT::Pointer.new(JIT::Type::INT)
28
+ assert_equal JIT::Type::INT, p_type.type_of(0)
29
+ assert_equal JIT::Type::INT, p_type.type_of(1)
30
+ assert_equal JIT::Type::INT, p_type.type_of(2)
31
+ assert_equal JIT::Type::INT, p_type.type_of(3)
32
+ # TODO: check out of bounds
33
+ end
34
+
35
+ def test_instance_bracket
36
+ p = proc { |f|
37
+ a_type = JIT::Array.new(JIT::Type::INT, 4)
38
+ p_type = JIT::Pointer.new(JIT::Type::INT)
39
+ a = a_type.create(f)
40
+ ptr = p_type.wrap(a.ptr)
41
+ f.insn_store_relative(a.ptr, 4, f.const(JIT::Type::INT, 42))
42
+ f.return ptr[1]
43
+ }
44
+ assert_function_result(
45
+ :result => [ JIT::Type::INT, 42 ],
46
+ &p)
47
+ end
48
+
49
+ def test_instance_bracket_eq
50
+ p = proc { |f|
51
+ a_type = JIT::Array.new(JIT::Type::INT, 4)
52
+ p_type = JIT::Pointer.new(JIT::Type::INT)
53
+ a = a_type.create(f)
54
+ ptr = p_type.wrap(a.ptr)
55
+ ptr[1] = f.const(JIT::Type::INT, 42)
56
+ f.return a[1]
57
+ }
58
+ assert_function_result(
59
+ :result => [ JIT::Type::INT, 42 ],
60
+ &p)
61
+ end
62
+ end
63
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-libjit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Brannan
@@ -9,11 +9,16 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-05 00:00:00 -05:00
12
+ date: 2009-12-02 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
16
- description: A wrapper for the libjit library
16
+ description: |
17
+ Ruby-libjit is a wrapper for the libjit library. Libjit is a
18
+ lightweight library for building just-in-time compilers. Ruby-libjit
19
+ includes both a wrapper for libjit and a minimal DSL for building loops
20
+ and control structures.
21
+
17
22
  email: curlypaul924@gmail.com
18
23
  executables: []
19
24
 
@@ -30,22 +35,25 @@ files:
30
35
  - lib/jit/array.rb
31
36
  - lib/jit/function.rb
32
37
  - lib/jit/struct.rb
38
+ - lib/jit/pointer.rb
33
39
  - lib/jit/value.rb
34
- - ext/rubypp.rb
35
40
  - ext/extconf.rb
36
- - ext/method_data.c
37
- - ext/minimal_node.c
41
+ - ext/rubypp.rb
38
42
  - ext/jit.c
39
- - ext/method_data.h
43
+ - ext/minimal_node.c
44
+ - ext/method_data.c
40
45
  - ext/minimal_node.h
46
+ - ext/method_data.h
41
47
  - ext/rubyjit.h
42
- - ext/insns.inc.rpp
43
48
  - ext/method_data.c.rpp
49
+ - ext/insns.inc.rpp
44
50
  - sample/gcd_benchmark.rb
45
- - sample/fib.rb
46
51
  - sample/simple.rb
52
+ - sample/fib.rb
47
53
  has_rdoc: true
48
54
  homepage: http://ruby-libjit.rubyforge.org
55
+ licenses: []
56
+
49
57
  post_install_message:
50
58
  rdoc_options: []
51
59
 
@@ -66,12 +74,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
74
  requirements: []
67
75
 
68
76
  rubyforge_project: ruby-libjit
69
- rubygems_version: 1.3.1
77
+ rubygems_version: 1.3.5
70
78
  signing_key:
71
- specification_version: 2
79
+ specification_version: 3
72
80
  summary: A wrapper for the libjit library
73
81
  test_files:
74
- - test/test_jit_array.rb
75
- - test/test_jit_function.rb
76
- - test/test_jit_value.rb
77
82
  - test/test_jit_struct.rb
83
+ - test/test_jit_value.rb
84
+ - test/test_jit_function.rb
85
+ - test/test_jit_array.rb
86
+ - test/test_jit_pointer.rb