ruby2c 1.0.0.7 → 1.0.0.8

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.
Binary file
File without changes
@@ -1,3 +1,20 @@
1
+ === 1.0.0.8 / 2012-11-09
2
+
3
+ * 5 minor enhancements:
4
+
5
+ * Added TypeChecker methods: rewrite_attrasgn, rewrite_call, rewrite_defn to reverse structural changes in ruby_parser 3.x.
6
+ * Added new 1.9 tests from PTTC to skip list
7
+ * Added new test case data for new 1.8 based tests
8
+ * Added process_arglist_plain and hooked it up with process_iter to deal with new block sexps.
9
+ * Renames for ruby_parser namespace changes
10
+
11
+ * 4 bug fixes:
12
+
13
+ * Environment moved in ruby_parser. Got tests running again.
14
+ * Fixed all tests broken by 1.8/1.9 split in pt_testcase.rb.
15
+ * Removed unused variables listed in 1.9 warnings
16
+ * Spastic monkey is spastic
17
+
1
18
  === 1.0.0.7 / 2009-08-18
2
19
 
3
20
  * 1 bug fix:
data/README.txt CHANGED
@@ -1,8 +1,7 @@
1
1
  = RubyToC
2
2
 
3
- * http://rubyforge.org/projects/ruby2c/
4
- * ryand-ruby@zenspider.com
5
- * ruby2c@zenspider.com - mailing list
3
+ home :: https://github.com/seattlerb/ruby_to_c
4
+ rdoc :: http://ruby2c.rubyforge.org/ruby2c
6
5
 
7
6
  == DESCRIPTION:
8
7
 
@@ -21,26 +20,21 @@ RubyToC has the following modules:
21
20
  * RubyToRubyC - converts a ruby (subset) sexp to ruby interals C.
22
21
  * RubyToAnsiC - converts a ruby (subset) sexp to ANSI C.
23
22
 
24
- and the following tools:
25
-
26
- * translate.rb - Translates a given file to C.
27
-
28
23
  == FEATURES/PROBLEMS:
29
24
 
30
25
  * This is a preview release! BETA BETA BETA! Do NOT use this!
31
- * Please contact me or Eric (drbrain of segment7 dot net) if you:
32
- * have any feedback!
33
- * have any changes!
34
- * want to work on this!
35
26
 
36
27
  == SYNOPSYS:
37
28
 
38
- ./translate.rb blah.rb > blah.c; gcc -c -I /rubylib/1.8/platform blah.c
29
+ require 'ruby_parser'
30
+ require 'ruby_to_ruby_c'
31
+
32
+ sexp = RubyParser.new.parse '1 + 1'
33
+ c = RubyToRubyC.new.process sexp
39
34
 
40
35
  == TODO:
41
36
 
42
37
  * Numerous, but we are trying to get them in here... sorry...
43
- * Want to move to a gem directory structure (lib/ test/ bin/ etc)
44
38
 
45
39
  == REQUIREMENTS:
46
40
 
@@ -48,13 +42,13 @@ and the following tools:
48
42
 
49
43
  == INSTALL:
50
44
 
51
- * sudo gem install RubyToC
45
+ * sudo gem install ruby2c
52
46
 
53
47
  == LICENSE:
54
48
 
55
49
  (The MIT License)
56
50
 
57
- Copyright (c) 2001-2008 Ryan Davis, Zen Spider Software
51
+ Copyright (c) Ryan Davis, Eric Hodel, seattle.rb
58
52
 
59
53
  Permission is hereby granted, free of charge, to any person obtaining
60
54
  a copy of this software and associated documentation files (the
@@ -41,8 +41,8 @@ class CRewriter < SexpProcessor
41
41
 
42
42
  env = @env.all
43
43
 
44
- free = env.select { |k, (t, v)| bound_in_parent.include? k or not v }
45
- vars = free.map { |k, (t, v)| [k, t] }
44
+ free = env.select { |k, (_, v)| bound_in_parent.include? k or not v }
45
+ vars = free.map { |k, (t, _)| [k, t] }
46
46
  return vars
47
47
  end
48
48
 
@@ -1,6 +1,6 @@
1
1
  require 'ruby_parser_extras' # TODO: split out to environment.rb?
2
2
 
3
- class R2CEnvironment < Environment
3
+ class R2CEnvironment < RubyParserStuff::Environment
4
4
 
5
5
  TYPE = 0
6
6
  VALUE = 1
@@ -21,7 +21,7 @@ require 'r2cenvironment'
21
21
 
22
22
  class RubyToAnsiC < SexpProcessor
23
23
 
24
- VERSION = '1.0.0.7' # HACK version should be 1.0.0.beta.7, but rubygems sucks
24
+ VERSION = '1.0.0.8'
25
25
 
26
26
  # TODO: remove me
27
27
  def no(exp) # :nodoc:
@@ -407,9 +407,7 @@ typedef char * str;
407
407
 
408
408
  result = "if (#{cond_part})"
409
409
 
410
- then_block = ! exp.first.nil? && exp.first.first == :block
411
410
  then_part = process exp.shift
412
- else_block = ! exp.first.nil? && exp.first.first == :block
413
411
  else_part = process exp.shift
414
412
 
415
413
  then_part = "" if then_part.nil?
@@ -448,9 +446,7 @@ typedef char * str;
448
446
  @env.scope do
449
447
  enum = exp[0][1][1] # HACK ugly t(:iter, t(:call, lhs <-- get lhs
450
448
 
451
- p exp
452
-
453
- call = process exp.shift
449
+ _ = process exp.shift
454
450
  var = process(exp.shift).intern # semi-HACK-y
455
451
  body = process exp.shift
456
452
  index = "index_#{var}"
@@ -493,7 +489,6 @@ typedef char * str;
493
489
 
494
490
  exp_type = exp.sexp_type
495
491
  @env.add var.to_sym, exp_type
496
- var_type = self.class.c_type exp_type
497
492
 
498
493
  if exp_type.list? then
499
494
  assert_type args, :array
@@ -129,36 +129,6 @@ class RubyToRubyC < RubyToAnsiC
129
129
  # TODO: pull iasgn from obfuscator
130
130
  # TODO: pull ivar from obfuscator
131
131
 
132
- ##
133
- # Iterators for loops. After rewriter nearly all iter nodes
134
- # should be able to be interpreted as a for loop. If not, then you
135
- # are doing something not supported by C in the first place.
136
-
137
- def process_OLD_iter(exp) # TODO/REFACTOR: audit against obfuscator
138
- out = []
139
- # Only support enums in C-land
140
- raise UnsupportedNodeError if exp[0][1].nil? # HACK ugly
141
- @env.scope do
142
- enum = exp[0][1][1] # HACK ugly t(:iter, t(:call, lhs <-- get lhs
143
- call = process exp.shift
144
- var = process(exp.shift).intern # semi-HACK-y
145
- body = process exp.shift
146
- index = "index_#{var}"
147
-
148
- body += ";" unless body =~ /[;}]\Z/
149
- body.gsub!(/\n\n+/, "\n")
150
-
151
- out << "unsigned long #{index};"
152
- out << "unsigned long arrays_max = FIX2LONG(rb_funcall(arrays, rb_intern(\"size\"), 0));"
153
- out << "for (#{index} = 0; #{index} < arrays_max; ++#{index}) {"
154
- out << "VALUE x = rb_funcall(arrays, rb_intern(\"at\"), 1, LONG2FIX(index_x));"
155
- out << body
156
- out << "}"
157
- end
158
-
159
- return out.join("\n")
160
- end
161
-
162
132
  ##
163
133
  # Iterators for loops. After rewriter nearly all iter nodes
164
134
  # should be able to be interpreted as a for loop. If not, then you
@@ -214,7 +184,6 @@ class RubyToRubyC < RubyToAnsiC
214
184
 
215
185
  exp_type = exp.sexp_type
216
186
  @env.add var.to_sym, exp_type
217
- var_type = self.class.c_type exp_type
218
187
 
219
188
  if exp_type.list? then
220
189
  assert_type args, :array
@@ -161,7 +161,6 @@ class TypeChecker < SexpProcessor
161
161
  def process_arglist(exp)
162
162
  args = process_array exp
163
163
  args[0] = :arglist
164
-
165
164
  args
166
165
  end
167
166
 
@@ -179,6 +178,12 @@ class TypeChecker < SexpProcessor
179
178
  vars
180
179
  end
181
180
 
181
+ def rewrite_attrasgn exp
182
+ t, lhs, name, *rhs = exp
183
+
184
+ s(t, lhs, name, s(:arglist, *rhs))
185
+ end
186
+
182
187
  ##
183
188
  # Attrasgn processes its rhs and lhs, then returns an untyped sexp.
184
189
  #--
@@ -239,6 +244,19 @@ class TypeChecker < SexpProcessor
239
244
  t(:block_pass, block, call)
240
245
  end
241
246
 
247
+ def rewrite_call(exp)
248
+ t, recv, meth, *args = exp
249
+
250
+ args = args.compact
251
+ args = [s(:arglist)] if args == []
252
+
253
+ unless args.first and args.first.first == :arglist then
254
+ args = [s(:arglist, *args)]
255
+ end
256
+
257
+ s(t, recv, meth, *args)
258
+ end
259
+
242
260
  ##
243
261
  # Call unifies the actual function paramaters against the formal function
244
262
  # paramaters, if a function type signature already exists in the function
@@ -403,6 +421,15 @@ class TypeChecker < SexpProcessor
403
421
  return t(:defined, thing, Type.bool)
404
422
  end
405
423
 
424
+ def rewrite_defn(exp)
425
+ t, name, args, *body = exp
426
+
427
+ body = [s(:scope, s(:block, *body))] unless
428
+ body and body.first.first == :scope
429
+
430
+ s(t, name, args, *body)
431
+ end
432
+
406
433
  ##
407
434
  # Defn adds the formal argument types to the local environment and attempts
408
435
  # to unify itself against the function table. If no function exists in the
@@ -577,7 +604,7 @@ class TypeChecker < SexpProcessor
577
604
  cond_exp.sexp_type.unify Type.bool
578
605
  begin
579
606
  then_exp.sexp_type.unify else_exp.sexp_type unless then_exp.nil? or else_exp.nil?
580
- rescue TypeError => err
607
+ rescue TypeError
581
608
  puts "Error unifying #{then_exp.inspect} with #{else_exp.inspect}"
582
609
  raise
583
610
  end
@@ -589,13 +616,33 @@ class TypeChecker < SexpProcessor
589
616
  return t(:if, cond_exp, then_exp, else_exp, type)
590
617
  end
591
618
 
619
+ def process_arglist_plain(exp)
620
+ vars = t(:args)
621
+ until exp.empty? do
622
+ var = exp.shift
623
+ case var
624
+ when Symbol then
625
+ vars << process(s(:lasgn, var))
626
+ when Sexp then
627
+ vars << process(var)
628
+ else
629
+ raise "Unknown arglist type: #{var.inspect}"
630
+ end
631
+ end
632
+ vars
633
+ end
634
+
592
635
  ##
593
636
  # Iter unifies the dynamic variables against the call args (dynamic
594
637
  # variables are used in the iter body) and returns a void-typed sexp.
595
638
 
596
639
  def process_iter(exp)
597
640
  call_exp = process exp.shift
598
- dargs_exp = process exp.shift
641
+
642
+ dargs_exp = exp.shift
643
+ dargs_exp[0] = :arglist_plain
644
+ dargs_exp = process dargs_exp
645
+
599
646
  body_exp = process exp.shift
600
647
 
601
648
  lhs = call_exp[1] # FIX
@@ -604,7 +651,10 @@ class TypeChecker < SexpProcessor
604
651
  return t(:iter, call_exp, dargs_exp, body_exp, call_exp.sexp_type)
605
652
  else
606
653
  Type.unknown_list.unify lhs.sexp_type # force a list type, lhs must be Enum
607
- Type.new(lhs.sexp_type.list_type).unify dargs_exp.sexp_type # pull out type
654
+
655
+ dargs_exp.sexp_body.each do |subexp|
656
+ Type.new(lhs.sexp_type.list_type).unify subexp.sexp_type
657
+ end
608
658
 
609
659
  return t(:iter, call_exp, dargs_exp, body_exp, Type.void)
610
660
  end
@@ -388,7 +388,7 @@ class R2CTestCase < ParseTreeTestCase
388
388
  :downto,
389
389
  t(:arglist, t(:lit, 1, Type.long)),
390
390
  Type.unknown),
391
- t(:lasgn, :n, nil, Type.long),
391
+ t(:args, t(:lasgn, :n, nil, Type.long)),
392
392
  t(:call, nil, :puts,
393
393
  t(:arglist,
394
394
  t(:call,
@@ -416,7 +416,7 @@ class R2CTestCase < ParseTreeTestCase
416
416
  t(:lvar, :array, Type.long_list),
417
417
  :each,
418
418
  t(:arglist), Type.unknown),
419
- t(:lasgn, :x, nil, Type.long),
419
+ t(:args, t(:lasgn, :x, nil, Type.long)),
420
420
  t(:call, nil, :puts,
421
421
  t(:arglist,
422
422
  t(:call,
@@ -525,13 +525,13 @@ class R2CTestCase < ParseTreeTestCase
525
525
  t(:lvar, :array1, Type.long_list),
526
526
  :each,
527
527
  t(:arglist), Type.unknown),
528
- t(:lasgn, :x, nil, Type.long),
528
+ t(:args, t(:lasgn, :x, nil, Type.long)),
529
529
  t(:iter,
530
530
  t(:call,
531
531
  t(:lvar, :array2, Type.long_list),
532
532
  :each,
533
533
  t(:arglist), Type.unknown),
534
- t(:lasgn, :y, nil, Type.long),
534
+ t(:args, t(:lasgn, :y, nil, Type.long)),
535
535
  t(:block,
536
536
  t(:call, nil, :puts,
537
537
  t(:arglist,
@@ -809,7 +809,7 @@ puts(to_s(arg3));
809
809
  return \"foo\";
810
810
  }")
811
811
 
812
- add_tests("not",
812
+ add_tests("not__18",
813
813
  "Rewriter" => :same,
814
814
  "TypeChecker" => t(:not, t(:true, Type.bool), Type.bool),
815
815
  "CRewriter" => :same,
@@ -890,6 +890,28 @@ return \"foo\";
890
890
  "RubyToAnsiC" => "a = (void *) malloc(sizeof(void *) * 0)",
891
891
  "RubyToRubyC" => "a = rb_ary_new2(0)")
892
892
 
893
+ add_tests("str_question_control__18",
894
+ "Rewriter" => :same,
895
+ "TypeChecker" => t(:lit, 129, Type.long),
896
+ "CRewriter" => :same,
897
+ "RubyToAnsiC" => "129",
898
+ "RubyToRubyC" => "LONG2NUM(129)")
899
+
900
+ add_tests("str_question_escape__18",
901
+ "Rewriter" => :same,
902
+ "TypeChecker" => t(:lit, 10, Type.long),
903
+ "CRewriter" => :same,
904
+ "RubyToAnsiC" => "10",
905
+ "RubyToRubyC" => "LONG2NUM(10)")
906
+
907
+ add_tests("str_question_literal__18",
908
+ "Rewriter" => :same,
909
+ "TypeChecker" => t(:lit, 97, Type.long),
910
+ "CRewriter" => :same,
911
+ "RubyToAnsiC" => "97",
912
+ "RubyToRubyC" => "LONG2NUM(97)")
913
+
914
+ i_suck_and_my_tests_are_order_dependent!
893
915
 
894
916
  add_skipped_tests("alias",
895
917
  "alias_ugh",
@@ -934,13 +956,14 @@ return \"foo\";
934
956
  "call_arglist",
935
957
  "call_arglist_hash",
936
958
  "call_arglist_norm_hash",
937
- "call_arglist_norm_hash_splat",
938
- "call_arglist_space",
959
+ "call_arglist_norm_hash_splat__18",
960
+ "call_arglist_space__18",
939
961
  "call_command",
940
962
  "call_expr",
941
963
  "call_index",
942
964
  "call_index_no_args",
943
965
  "call_index_space",
966
+ "call_no_space_symbol",
944
967
  "call_unary_neg",
945
968
  "case",
946
969
  "case_nested",
@@ -1024,9 +1047,10 @@ return \"foo\";
1024
1047
  "fcall_arglist",
1025
1048
  "fcall_arglist_hash",
1026
1049
  "fcall_arglist_norm_hash",
1027
- "fcall_arglist_norm_hash_splat",
1050
+ "fcall_arglist_norm_hash_splat__18",
1028
1051
  "fcall_block",
1029
1052
  "fcall_index_space",
1053
+ "fcall_inside_parens",
1030
1054
  "fcall_keyword",
1031
1055
  "flip2",
1032
1056
  "flip2_method",
@@ -1044,19 +1068,33 @@ return \"foo\";
1044
1068
  "if_lasgn_short",
1045
1069
  "if_nested",
1046
1070
  "if_post",
1047
- "if_post_not",
1071
+ "if_post_not__18",
1048
1072
  "if_pre",
1049
- "if_pre_not",
1073
+ "if_pre_not__18",
1074
+ "iter_args_ivar__18",
1050
1075
  "iter_call_arglist_space",
1051
1076
  "iter_dasgn_curr_dasgn_madness",
1052
1077
  "iter_loop_empty",
1053
1078
  "iter_masgn_2",
1079
+ "iter_masgn_args_ivar__18",
1054
1080
  "iter_masgn_args_splat",
1055
1081
  "iter_masgn_args_splat_no_name",
1056
1082
  "iter_masgn_splat",
1057
1083
  "iter_masgn_splat_no_name",
1058
1084
  "iter_shadowed_var",
1059
1085
  "iter_upto",
1086
+ "lambda_args_anon_star",
1087
+ "lambda_args_anon_star_block",
1088
+ "lambda_args_block",
1089
+ "lambda_args_norm_anon_star",
1090
+ "lambda_args_norm_anon_star_block",
1091
+ "lambda_args_norm_block",
1092
+ "lambda_args_norm_comma",
1093
+ "lambda_args_norm_comma2",
1094
+ "lambda_args_norm_star",
1095
+ "lambda_args_norm_star_block",
1096
+ "lambda_args_star",
1097
+ "lambda_args_star_block",
1060
1098
  "lvar_def_boundary",
1061
1099
  "masgn",
1062
1100
  "masgn_argscat",
@@ -1077,6 +1115,7 @@ return \"foo\";
1077
1115
  "match2",
1078
1116
  "match3",
1079
1117
  "module",
1118
+ "module2",
1080
1119
  "module_scoped",
1081
1120
  "module_scoped3",
1082
1121
  "next",
@@ -1156,6 +1195,8 @@ return \"foo\";
1156
1195
  "super_block_splat",
1157
1196
  "super_n",
1158
1197
  "svalue",
1198
+ "ternary_nil_no_space",
1199
+ "ternary_symbol_no_spaces",
1159
1200
  "to_ary",
1160
1201
  "true",
1161
1202
  "undef",
@@ -1167,24 +1208,24 @@ return \"foo\";
1167
1208
  "undef_block_3_post",
1168
1209
  "undef_block_wtf",
1169
1210
  "unless_post",
1170
- "unless_post_not",
1211
+ "unless_post_not__18",
1171
1212
  "unless_pre",
1172
- "unless_pre_not",
1213
+ "unless_pre_not__18",
1173
1214
  "until_post",
1174
- "until_post_not",
1215
+ "until_post_not__18",
1175
1216
  "until_pre",
1176
1217
  "until_pre_mod",
1177
- "until_pre_not",
1178
- "until_pre_not_mod",
1218
+ "until_pre_not__18",
1219
+ "until_pre_not_mod__18",
1179
1220
  "valias",
1180
1221
  "while_post",
1181
1222
  "while_post2",
1182
- "while_post_not",
1223
+ "while_post_not__18",
1183
1224
  "while_pre",
1184
1225
  "while_pre_mod",
1185
1226
  "while_pre_nil",
1186
- "while_pre_not",
1187
- "while_pre_not_mod",
1227
+ "while_pre_not__18",
1228
+ "while_pre_not_mod__18",
1188
1229
  "xstr",
1189
1230
  "yield_0",
1190
1231
  "yield_1",
@@ -116,6 +116,9 @@ class TestFunctionType < MiniTest::Unit::TestCase
116
116
 
117
117
  fun9 = FunctionType.new(Type.long, [], Type.str)
118
118
  funa = FunctionType.new(Type.str, [], Type.unknown)
119
+
120
+ fun9, funa = funa, fun9 # get rid of unused warnings but keep them rooted
121
+
119
122
  assert_raises(TypeError) do
120
123
  fun7.unify_components fun8
121
124
  end
@@ -55,7 +55,7 @@ class TestRubyToAnsiC < R2CTestCase
55
55
 
56
56
  def test_env
57
57
  refute_nil @ruby_to_c.env
58
- assert_kind_of Environment, @ruby_to_c.env
58
+ assert_kind_of RubyParserStuff::Environment, @ruby_to_c.env
59
59
  end
60
60
 
61
61
  def test_process_and
@@ -215,8 +215,8 @@ class TestTypeChecker < R2CTestCase
215
215
  end
216
216
 
217
217
  def test_process_call_undefined
218
- input = t(:call, nil, :name, nil)
219
- output = t(:call, nil, :name, nil, Type.unknown)
218
+ input = t(:call, nil, :name)
219
+ output = t(:call, nil, :name, t(:arglist), Type.unknown)
220
220
 
221
221
  assert_equal output, @type_checker.process(input)
222
222
  # FIX returns unknown in s()
@@ -510,7 +510,7 @@ class TestTypeChecker < R2CTestCase
510
510
  t(:lvar, :array),
511
511
  :each,
512
512
  nil),
513
- t(:dasgn_curr, :x),
513
+ t(:args, :x),
514
514
  t(:call,
515
515
  nil,
516
516
  :puts,
@@ -523,9 +523,9 @@ class TestTypeChecker < R2CTestCase
523
523
  t(:call,
524
524
  t(:lvar, :array, var_type),
525
525
  :each,
526
- nil,
526
+ t(:arglist),
527
527
  Type.unknown),
528
- t(:dasgn_curr, :x, Type.long),
528
+ t(:args, t(:lasgn, :x, nil, Type.long)),
529
529
  t(:call,
530
530
  nil,
531
531
  :puts,
@@ -533,7 +533,7 @@ class TestTypeChecker < R2CTestCase
533
533
  t(:call,
534
534
  t(:dvar, :x, Type.long),
535
535
  :to_s,
536
- nil,
536
+ t(:arglist),
537
537
  Type.str)),
538
538
  Type.void),
539
539
  Type.void)
@@ -782,7 +782,7 @@ class TestTypeChecker < R2CTestCase
782
782
  input = t(:while, t(:true), t(:call, t(:lit, 1), :to_s, nil), true)
783
783
  expected = t(:while,
784
784
  t(:true, Type.bool),
785
- t(:call, t(:lit, 1, Type.long), :to_s, nil,
785
+ t(:call, t(:lit, 1, Type.long), :to_s, t(:arglist),
786
786
  Type.str), true)
787
787
 
788
788
  assert_equal expected, @type_checker.process(input)
metadata CHANGED
@@ -1,38 +1,105 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2c
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.7
4
+ hash: 79
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ - 8
11
+ version: 1.0.0.8
5
12
  platform: ruby
6
13
  authors:
7
14
  - Ryan Davis
8
15
  - Eric Hodel
9
16
  autorequire:
10
17
  bindir: bin
11
- cert_chain: []
18
+ cert_chain:
19
+ - |
20
+ -----BEGIN CERTIFICATE-----
21
+ MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
22
+ ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
23
+ GRYDY29tMB4XDTA5MDMwNjE4NTMxNVoXDTEwMDMwNjE4NTMxNVowRTETMBEGA1UE
24
+ AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
25
+ JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
26
+ b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
27
+ taCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT
28
+ oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
29
+ GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
30
+ qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
31
+ gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
32
+ HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
33
+ AQAY59gYvDxqSqgC92nAP9P8dnGgfZgLxP237xS6XxFGJSghdz/nI6pusfCWKM8m
34
+ vzjjH2wUMSSf3tNudQ3rCGLf2epkcU13/rguI88wO6MrE0wi4ZqLQX+eZQFskJb/
35
+ w6x9W1ur8eR01s397LSMexySDBrJOh34cm2AlfKr/jokKCTwcM0OvVZnAutaovC0
36
+ l1SVZ0ecg88bsWHA0Yhh7NFxK1utWoIhtB6AFC/+trM0FQEB/jZkIS8SaNzn96Rl
37
+ n0sZEf77FLf5peR8TP/PtmIg7Cyqz23sLM4mCOoTGIy5OcZ8TdyiyINUHtb5ej/T
38
+ FBHgymkyj/AOSqKRIpXPhjC6
39
+ -----END CERTIFICATE-----
12
40
 
13
- date: 2009-08-18 00:00:00 -07:00
14
- default_executable:
41
+ date: 2012-11-10 00:00:00 Z
15
42
  dependencies:
16
43
  - !ruby/object:Gem::Dependency
17
44
  name: ruby_parser
18
- type: :runtime
19
- version_requirement:
20
- version_requirements: !ruby/object:Gem::Requirement
45
+ prerelease: false
46
+ requirement: &id001 !ruby/object:Gem::Requirement
47
+ none: false
21
48
  requirements:
22
49
  - - ~>
23
50
  - !ruby/object:Gem::Version
51
+ hash: 3
52
+ segments:
53
+ - 2
54
+ - 0
24
55
  version: "2.0"
25
- version:
56
+ type: :runtime
57
+ version_requirements: *id001
26
58
  - !ruby/object:Gem::Dependency
27
- name: hoe
59
+ name: minitest
60
+ prerelease: false
61
+ requirement: &id002 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ hash: 31
67
+ segments:
68
+ - 4
69
+ - 2
70
+ version: "4.2"
28
71
  type: :development
29
- version_requirement:
30
- version_requirements: !ruby/object:Gem::Requirement
72
+ version_requirements: *id002
73
+ - !ruby/object:Gem::Dependency
74
+ name: rdoc
75
+ prerelease: false
76
+ requirement: &id003 !ruby/object:Gem::Requirement
77
+ none: false
31
78
  requirements:
32
- - - ">="
79
+ - - ~>
33
80
  - !ruby/object:Gem::Version
34
- version: 2.3.3
35
- version:
81
+ hash: 19
82
+ segments:
83
+ - 3
84
+ - 10
85
+ version: "3.10"
86
+ type: :development
87
+ version_requirements: *id003
88
+ - !ruby/object:Gem::Dependency
89
+ name: hoe
90
+ prerelease: false
91
+ requirement: &id004 !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ hash: 3
97
+ segments:
98
+ - 3
99
+ - 2
100
+ version: "3.2"
101
+ type: :development
102
+ version_requirements: *id004
36
103
  description: |-
37
104
  ruby_to_c translates a static ruby subset to C. Hopefully it works.
38
105
 
@@ -48,10 +115,6 @@ description: |-
48
115
  * TypeChecker - type inferencer for the above sexps.
49
116
  * RubyToRubyC - converts a ruby (subset) sexp to ruby interals C.
50
117
  * RubyToAnsiC - converts a ruby (subset) sexp to ANSI C.
51
-
52
- and the following tools:
53
-
54
- * translate.rb - Translates a given file to C.
55
118
  email:
56
119
  - ryand-ruby@zenspider.com
57
120
  - drbrain@segment7.net
@@ -99,8 +162,8 @@ files:
99
162
  - test/test_type.rb
100
163
  - test/test_type_checker.rb
101
164
  - test/test_typed_sexp.rb
102
- has_rdoc: true
103
- homepage: http://rubyforge.org/projects/ruby2c/
165
+ - .gemtest
166
+ homepage: https://github.com/seattlerb/ruby_to_c
104
167
  licenses: []
105
168
 
106
169
  post_install_message:
@@ -110,21 +173,27 @@ rdoc_options:
110
173
  require_paths:
111
174
  - lib
112
175
  required_ruby_version: !ruby/object:Gem::Requirement
176
+ none: false
113
177
  requirements:
114
178
  - - ">="
115
179
  - !ruby/object:Gem::Version
180
+ hash: 3
181
+ segments:
182
+ - 0
116
183
  version: "0"
117
- version:
118
184
  required_rubygems_version: !ruby/object:Gem::Requirement
185
+ none: false
119
186
  requirements:
120
187
  - - ">="
121
188
  - !ruby/object:Gem::Version
189
+ hash: 3
190
+ segments:
191
+ - 0
122
192
  version: "0"
123
- version:
124
193
  requirements: []
125
194
 
126
195
  rubyforge_project: ruby2c
127
- rubygems_version: 1.3.5
196
+ rubygems_version: 1.8.24
128
197
  signing_key:
129
198
  specification_version: 3
130
199
  summary: ruby_to_c translates a static ruby subset to C
Binary file