Ruby2c 1.0.0.6 Released

ruby2c version 1.0.0.6 has been released!

ruby_to_c translates a static ruby subset to C. Hopefully it works.

NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE

                 THIS IS BETA SOFTWARE!

NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE ! NOTE

RubyToC has the following modules:

  • Rewriter - massages the sexp into a more consistent form.
  • TypeChecker - type inferencer for the above sexps.
  • RubyToRubyC - converts a ruby (subset) sexp to ruby interals C.
  • RubyToAnsiC - converts a ruby (subset) sexp to ANSI C.

and the following tools:

  • translate.rb - Translates a given file to C.

Changes:

1.0.0.6 / 2009-06-23

1 major enhancement:

  • Switched from ParseTree to ruby_parser for 1.9 compatibility. woo.
    • All translate/process methods are gone since we can’t reflect at
      runtime.

43 minor enhancements:

  • Added IterRewriter for finding free variables in iter nodes.

  • Added dxstr.

  • Added lots of new and missing tests

  • Added not, array, lit_long_negative, lit_range[23],
    lit_regexp{_n,_once}, lit_sym{,_splat}

  • Added pct_w tests

  • Added process_defx to ruby_to_ansi_c.rb

  • Added test data for array_pct_W, array_pct_W_dstr,
    attrasgn_index_equals, attrasgn_index_equals_space, and attrset.

  • Added tests for “and”. PONG to eric

  • Added to_ary and masgn for TypeChecker.

  • Added xstr support.

  • Added yield(*ary)

  • Cleaned up rewriter.rb and made changes for pt_testcase.rb

  • Cleaned up some free_vars processing code.

  • Converted everything to new enhanced PTTC test scheme.

  • Enhanced with_scope to allow for static arrays.

  • Extended Environment to separately store both types and values.

  • Extern methods to support rb_iterate, including #each and
    #each_with_index.

  • Free var static declarations for C layers.

  • Merged IterRewriter into CRewriter and make typed.

  • Migrated as much out of rewriter as possible.

  • Modernized via hoe.

  • Moved to full PTTC + UnifiedRuby.

  • Pulled dstr up from ZenObfuscator.

  • Pulled up tests, process_args, with_scope, and process_scope from
    obfuscator

  • Pushed unique.rb up to PT

  • Removed Environment methods that pushed up to ruby_parser.

  • Removed Sexp#sexp_type

  • Removed accessor, accessor_equals since they don’t exist in PTTC.

  • Removed bin/*

  • Removed dead test

  • Removed redundant defn_lvar_boundary, but added call to
    lvar_def_boundary.

  • Renamed blocks to extra_methods in ruby_to_ruby_c.

  • Renamed environment.rb to r2cenvironment.rb (incl tests)

  • Renamed iter_functions to extra_methods in crewriter.

  • Reordered so RubyToRubyC was always after RubyToAnsiC.

  • Some optimizations cleaning up Type#method_missing. Drops test time
    ~30%.

  • Split rewriter.rb to crewriter.rb (and renamed class to CRewriter).

  • Split up and deleted support.rb (and tests).

  • Switched from makefile to rakefile.

  • Switched to minitest

  • Test or node.

  • Track and trigger changes on pt_testcase.rb and r2ctestcase.rb

  • Used Hoe#add_include_dirs to clean up rakefile.

  • 12 bug fixes:

    • Fix types in iter rewriting.
    • Fix yield([42, 24])
    • Fixed 1.9-isms.
    • Fixed all rubygems loaders.
    • Fixed dependencies on all tests.
    • Fixed for new (incompatible?) Environment supplied by SexpProcessor
    • Fixed incompatibility with new inline changes.
    • Fixed requires on ruby_parser
    • Fixed ruby2c to work with autotest.
    • Fixed tests in r2ctestcase for all layers except the C layers.
    • Fixed zentest dependency in rakefile
    • Fixes for RAD, mostly renaming environment.rb to r2cenvironment.rb
      at this stage.