Permalink
Switch branches/tags
Nothing to show
Commits on Mar 5, 2013
Commits on Jan 4, 2011
  1. Bump version to 1.0.0

    jeremyevans committed Jan 4, 2011
  2. Support building fat Windows binary gem

    jeremyevans committed Jan 4, 2011
    Add a Rakefile.cross file for the cross compiling. Because
    fat Windows binary gems have two shared objects, and evilr
    doesn't ship with any .rb files, add a shim evilr.rb file
    for the Windows binary that loads the correct version.
    
    Also, to allow the tests to be run on Windows (without the
    rake-compiler dependency), no longer have irb and spec
    tasks depend on compile if rake-compiler is not installed.
    Note that if a Windows user has rake-compiler installed
    without a compiliation environment, things will still
    fail.
  3. No longer compiler with DEBUG and STRICT by default

    jeremyevans committed Jan 4, 2011
    Use the DEBUG and STRICT environment variables when compiling
    if you want that behavior.
    
    Also, no longer use -rdynamic when compiling with DEBUG, as
    gcc 4.4.5 seems to complain about it.
  4. Bump copyright year

    jeremyevans committed Jan 4, 2011
  5. Add ruby 1.8.6 support

    jeremyevans committed Jan 4, 2011
    ruby 1.8.6 didn't define some of the macros evilr used, so
    do the ifndef define endif dance for those.
    
    Also, parsing changed slightly between 1.8.6 and 1.8.7 that
    led to a couple spec failures, so add parantheses to fix that.
    
    Also, all singleton classes should have an attached object, so
    raise an error instead of doing some wrong if that isn't the
    case.
  6. More cache clearing

    jeremyevans committed Jan 4, 2011
  7. Fix remaining warnings

    jeremyevans committed Jan 4, 2011
    Make OBJECT_SIZE a macro instead of a variable.  RClass should be
    the largest type used, so use it.
Commits on Dec 22, 2010
  1. Make Object#swap_instance_variables raise for other builtin types

    jeremyevans committed Dec 22, 2010
    These would use FL_EXIVAR to store them outside the object, but
    I don't want to support that yet, and there would probably be
    issues swapping from FL_EXIVAR types to standard objects.
  2. Fix Object#swap_instance_variables when used with modules

    jeremyevans committed Dec 22, 2010
    Remove the ROBJECT_IV_INDEX_TBL macro that was defined for
    1.8, since it wasn't the same as the one on 1.9.  Instead,
    rename the 1.8 macro to ROBJECT_IVPTR, though it still
    doesn't mean the same thing as in 1.9.
    
    On 1.8, you can swap a module's instance variables with
    a regular object, but that's not simple on 1.9, so we'll
    just disallow it on both.
    
    On 1.9, fix it so swap_instance_variables doesn't swap
    the super, method table, and iv_index_tbl for the objects,
    as that would cause problems.
  3. Add Object#swap for completely swapping objects

    jeremyevans committed Dec 22, 2010
    Swapping classes with non-classes and modules with non-modules
    is forbidden because it is really easy to get a segfault due
    to the super chain.
    
    This uses variable sized arrays, which are forbidden in C90,
    but evil code doesn't care about standards.
    
    Switch swap_instance_variables to use a temporary array instead
    of a new object, for potentially more robust garbage collection.
  4. Add Proc#self=

    jeremyevans committed Dec 22, 2010
  5. Add Proc#self, for determining the receiver where the proc was defined

    jeremyevans committed Dec 22, 2010
    In evilr_debug_print, print the flags in hex, since that's how they
    are defined in ruby.h.
Commits on Dec 21, 2010
  1. Add Object#swap_instance_variables

    jeremyevans committed Dec 21, 2010
    Add evilr__check_immediates to DRY up some code.
  2. Add Object#extend_between

    jeremyevans committed Dec 21, 2010
    Similar to Module#include_between in how it works with module
    insertion, but similar to Object#unextend in that it does not
    go beyond the object's class.
    
    Also, fix an issue with Object#unextend for objects without
    existing singleton classes.
    
    Add evilr__iclass_matching_before, to returning an iclass
    without going above a given node in the super chain.
  3. Add Object#unextend for removing modules that extend the object

    jeremyevans committed Dec 21, 2010
    This operates slightly differently from Module#uninclude in that
    it does not traverse beyond the object's class.
  4. Add Module#uninclude and Module#include_between

    jeremyevans committed Dec 21, 2010
    uninclude removes a module from the super chain, and include_between
    inserts it between two arbitrary classes/modules, based on calling
    a block with each link in the chain.
    
    Add evilr__iclass_matching to return the matching T_ICLASS in the
    super chain for the given module.
  5. Add Class#inherit, for inheriting from multiple classes

    jeremyevans committed Dec 21, 2010
    inherit basically converts the classes to modules (including
    modules in those classes, but not their superclasses).
    
    This commit fixes an important bug in Class#to_module by
    not modifying the existing method chain for a class.  Previously,
    a class with an included module that called to module would
    end up with no superclass, because it modified the super pointer
    of the last included iclass.  Now, it creates a copy of the chain,
    by including all included modules in reverse order.
    
    Add evilr__check_compatible_classes to DRY up some code.
    
    Add evilr_include_iclasses for copying the iclass chain in
    reverse order, using recursion.
Commits on Dec 20, 2010
  1. Add Class.superclass= for changing the superclass of a class

    jeremyevans committed Dec 20, 2010
    Add evilr__check_data_type for raising TypeErrors where T_DATA
    objects are encountered.
  2. Make evilr_debug_print callable from ruby

    jeremyevans committed Dec 20, 2010
    It's generally useful for seeing the method call chain.
Commits on Dec 18, 2010
  1. Add Object#remove_singleton_classes

    jeremyevans committed Dec 18, 2010
    This removes all singleton classes and extended modules at once,
    useful in conjunction with push_singleton_class.
  2. Make {push,pop}_singleton_class return the class instead of nil

    jeremyevans committed Dec 18, 2010
    Except when pop_singleton_class is called without an existing
    singleton class.