diff options
author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-09 20:32:04 +0000 |
---|---|---|
committer | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2019-04-09 20:32:04 +0000 |
commit | 3ef4db15e95740839a0ed6d0224b2c9562bb2544 (patch) | |
tree | 18c23ed1b2e3c7b55860c27238a98cafafe63d9f /include/ruby/ruby.h | |
parent | c09e35d7bbb5c18124d7ab54740bef966e145529 (diff) | |
download | ruby-3ef4db15e95740839a0ed6d0224b2c9562bb2544.tar.gz |
Adding `GC.compact` and compacting GC support.
This commit adds the new method `GC.compact` and compacting GC support.
Please see this issue for caveats:
https://bugs.ruby-lang.org/issues/15626
[Feature #15626]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'include/ruby/ruby.h')
-rw-r--r-- | include/ruby/ruby.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 11387b540a..b22c4e3f2e 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -512,6 +512,7 @@ enum ruby_value_type { RUBY_T_NODE = 0x1b, RUBY_T_ICLASS = 0x1c, RUBY_T_ZOMBIE = 0x1d, + RUBY_T_MOVED = 0x1e, RUBY_T_MASK = 0x1f }; @@ -542,6 +543,7 @@ enum ruby_value_type { #define T_UNDEF RUBY_T_UNDEF #define T_NODE RUBY_T_NODE #define T_ZOMBIE RUBY_T_ZOMBIE +#define T_MOVED RUBY_T_MOVED #define T_MASK RUBY_T_MASK #define RB_BUILTIN_TYPE(x) (int)(((struct RBasic*)(x))->flags & RUBY_T_MASK) @@ -881,9 +883,14 @@ enum ruby_fl_type { RUBY_FL_SINGLETON = RUBY_FL_USER0 }; +struct RMoved { + VALUE flags; + VALUE destination; +}; + struct RUBY_ALIGNAS(SIZEOF_VALUE) RBasic { VALUE flags; - const VALUE klass; + VALUE klass; }; VALUE rb_obj_hide(VALUE obj); @@ -1105,7 +1112,7 @@ struct RArray { struct RRegexp { struct RBasic basic; struct re_pattern_buffer *ptr; - const VALUE src; + VALUE src; unsigned long usecnt; }; #define RREGEXP_PTR(r) (RREGEXP(r)->ptr) @@ -1144,7 +1151,8 @@ struct rb_data_type_struct { void (*dmark)(void*); void (*dfree)(void*); size_t (*dsize)(const void *); - void *reserved[2]; /* For future extension. + void (*dcompact)(void*); + void *reserved[1]; /* For future extension. This array *must* be filled with ZERO. */ } function; const rb_data_type_t *parent; @@ -1255,6 +1263,7 @@ int rb_big_sign(VALUE); #define RBIGNUM_NEGATIVE_P(b) (RBIGNUM_SIGN(b)==0) #define R_CAST(st) (struct st*) +#define RMOVED(obj) (R_CAST(RMoved)(obj)) #define RBASIC(obj) (R_CAST(RBasic)(obj)) #define ROBJECT(obj) (R_CAST(RObject)(obj)) #define RCLASS(obj) (R_CAST(RClass)(obj)) |