1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* include/ruby/backward/classext.h: for evil gems. fixed #4803

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2011-06-18 03:05:11 +00:00
parent 3b59f6c562
commit 19f386674e
6 changed files with 42 additions and 5 deletions

View file

@ -1,3 +1,7 @@
Sat Jun 18 12:05:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/backward/classext.h: for evil gems. fixed #4803
Sat Jun 18 11:12:13 2011 Tanaka Akira <akr@fsij.org> Sat Jun 18 11:12:13 2011 Tanaka Akira <akr@fsij.org>
* common.mk: update dependencies. * common.mk: update dependencies.

View file

@ -0,0 +1,18 @@
#if defined __GNUC__
#warning use of RClass internals is deprecated
#elif defined _MSC_VER || defined __BORLANDC__
#pragma message("warning: use of RClass internals is deprecated")
#endif
#ifndef RUBY_BACKWARD_CLASSEXT_H
#define RUBY_BACKWARD_CLASSEXT_H 1
typedef struct rb_deprecated_classext_struct {
VALUE super;
} rb_deprecated_classext_t;
#undef RCLASS_SUPER(c)
#define RCLASS_EXT(c) ((rb_deprecated_classext_t *)RCLASS(c)->ptr)
#define RCLASS_SUPER(c) (RCLASS_EXT(c)->super)
#endif /* RUBY_BACKWARD_CLASSEXT_H */

View file

@ -519,6 +519,7 @@ VALUE rb_obj_class(VALUE);
VALUE rb_class_real(VALUE); VALUE rb_class_real(VALUE);
VALUE rb_class_inherited_p(VALUE, VALUE); VALUE rb_class_inherited_p(VALUE, VALUE);
VALUE rb_class_superclass(VALUE); VALUE rb_class_superclass(VALUE);
VALUE rb_class_get_superclass(VALUE);
VALUE rb_convert_type(VALUE,int,const char*,const char*); VALUE rb_convert_type(VALUE,int,const char*,const char*);
VALUE rb_check_convert_type(VALUE,int,const char*,const char*); VALUE rb_check_convert_type(VALUE,int,const char*,const char*);
VALUE rb_check_to_integer(VALUE, const char *); VALUE rb_check_to_integer(VALUE, const char *);

View file

@ -617,11 +617,7 @@ struct RClass {
struct st_table *m_tbl; struct st_table *m_tbl;
struct st_table *iv_index_tbl; struct st_table *iv_index_tbl;
}; };
#define RCLASS_IV_TBL(c) (RCLASS(c)->ptr->iv_tbl) #define RCLASS_SUPER(c) rb_class_get_superclass(c)
#define RCLASS_CONST_TBL(c) (RCLASS(c)->ptr->const_tbl)
#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
#define RCLASS_SUPER(c) (RCLASS(c)->ptr->super)
#define RCLASS_IV_INDEX_TBL(c) (RCLASS(c)->iv_index_tbl)
#define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m) #define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m)
#define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m) #define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m)
#define RMODULE_M_TBL(m) RCLASS_M_TBL(m) #define RMODULE_M_TBL(m) RCLASS_M_TBL(m)

View file

@ -19,12 +19,24 @@ extern "C" {
#endif #endif
#endif #endif
struct rb_deprecated_classext_struct {
char conflict[sizeof(VALUE) * 3];
};
struct rb_classext_struct { struct rb_classext_struct {
VALUE super; VALUE super;
struct st_table *iv_tbl; struct st_table *iv_tbl;
struct st_table *const_tbl; struct st_table *const_tbl;
}; };
#undef RCLASS_SUPER
#define RCLASS_EXT(c) (RCLASS(c)->ptr)
#define RCLASS_SUPER(c) (RCLASS_EXT(c)->super)
#define RCLASS_IV_TBL(c) (RCLASS_EXT(c)->iv_tbl)
#define RCLASS_CONST_TBL(c) (RCLASS_EXT(c)->const_tbl)
#define RCLASS_M_TBL(c) (RCLASS(c)->m_tbl)
#define RCLASS_IV_INDEX_TBL(c) (RCLASS(c)->iv_index_tbl)
struct vtm; /* defined by timev.h */ struct vtm; /* defined by timev.h */
/* bignum.c */ /* bignum.c */

View file

@ -1668,6 +1668,12 @@ rb_class_superclass(VALUE klass)
return super; return super;
} }
VALUE
rb_class_get_superclass(VALUE klass)
{
return RCLASS_SUPER(klass);
}
/* /*
* call-seq: * call-seq:
* attr_reader(symbol, ...) -> nil * attr_reader(symbol, ...) -> nil