mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 6649677eb9
			
		
	
	
		6649677eb9
		
	
	
	
	
		
			
			Former ROBJECT_IV_INDEX_TBL macro included RCLASS_IV_INDEX_TBL, which is not disclosed to extension libraies. The macro was kind of broken. Why not just deprecate it, and convert the internal use into an inline function.
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef INTERNAL_OBJECT_H                                /*-*-C-*-vi:se ft=c:*/
 | |
| #define INTERNAL_OBJECT_H
 | |
| /**
 | |
|  * @file
 | |
|  * @author     Ruby developers <ruby-core@ruby-lang.org>
 | |
|  * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 | |
|  *             Permission  is hereby  granted,  to  either redistribute  and/or
 | |
|  *             modify this file, provided that  the conditions mentioned in the
 | |
|  *             file COPYING are met.  Consult the file for details.
 | |
|  * @brief      Internal header for Object.
 | |
|  */
 | |
| #include "ruby/ruby.h"          /* for VALUE */
 | |
| #include "internal/class.h"     /* for RCLASS_IV_INDEX_TBL */
 | |
| 
 | |
| #ifdef ROBJECT_IV_INDEX_TBL
 | |
| # undef ROBJECT_IV_INDEX_TBL
 | |
| #endif
 | |
| 
 | |
| /* object.c */
 | |
| VALUE rb_class_search_ancestor(VALUE klass, VALUE super);
 | |
| NORETURN(void rb_undefined_alloc(VALUE klass));
 | |
| double rb_num_to_dbl(VALUE val);
 | |
| VALUE rb_obj_dig(int argc, VALUE *argv, VALUE self, VALUE notfound);
 | |
| VALUE rb_immutable_obj_clone(int, VALUE *, VALUE);
 | |
| VALUE rb_check_convert_type_with_id(VALUE,int,const char*,ID);
 | |
| int rb_bool_expected(VALUE, const char *);
 | |
| static inline void RBASIC_CLEAR_CLASS(VALUE obj);
 | |
| static inline void RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass);
 | |
| static inline void RBASIC_SET_CLASS(VALUE obj, VALUE klass);
 | |
| static inline struct st_table *ROBJECT_IV_INDEX_TBL_inline(VALUE obj);
 | |
| 
 | |
| RUBY_SYMBOL_EXPORT_BEGIN
 | |
| /* object.c (export) */
 | |
| int rb_opts_exception_p(VALUE opts, int default_value);
 | |
| RUBY_SYMBOL_EXPORT_END
 | |
| 
 | |
| MJIT_SYMBOL_EXPORT_BEGIN
 | |
| CONSTFUNC(VALUE rb_obj_equal(VALUE obj1, VALUE obj2));
 | |
| CONSTFUNC(VALUE rb_obj_not(VALUE obj));
 | |
| VALUE rb_obj_not_equal(VALUE obj1, VALUE obj2);
 | |
| void rb_obj_copy_ivar(VALUE dest, VALUE obj);
 | |
| VALUE rb_false(VALUE obj);
 | |
| VALUE rb_convert_type_with_id(VALUE v, int t, const char* nam, ID mid);
 | |
| VALUE rb_obj_size(VALUE self, VALUE args, VALUE obj);
 | |
| MJIT_SYMBOL_EXPORT_END
 | |
| 
 | |
| static inline void
 | |
| RBASIC_SET_CLASS_RAW(VALUE obj, VALUE klass)
 | |
| {
 | |
|     struct { VALUE flags; VALUE klass; } *ptr = (void *)obj;
 | |
|     ptr->klass = klass;
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| RBASIC_CLEAR_CLASS(VALUE obj)
 | |
| {
 | |
|     RBASIC_SET_CLASS_RAW(obj, 0);
 | |
| }
 | |
| 
 | |
| static inline void
 | |
| RBASIC_SET_CLASS(VALUE obj, VALUE klass)
 | |
| {
 | |
|     VALUE oldv = RBASIC_CLASS(obj);
 | |
|     RBASIC_SET_CLASS_RAW(obj, klass);
 | |
|     RB_OBJ_WRITTEN(obj, oldv, klass);
 | |
| }
 | |
| 
 | |
| RBIMPL_ATTR_PURE()
 | |
| static inline struct st_table *
 | |
| ROBJECT_IV_INDEX_TBL_inline(VALUE obj)
 | |
| {
 | |
|     if (RB_FL_ANY_RAW(obj, ROBJECT_EMBED)) {
 | |
|         VALUE klass = rb_obj_class(obj);
 | |
|         return RCLASS_IV_INDEX_TBL(klass);
 | |
|     }
 | |
|     else {
 | |
|         const struct RObject *const ptr = ROBJECT(obj);
 | |
|         return ptr->as.heap.iv_index_tbl;
 | |
|     }
 | |
| }
 | |
| #define ROBJECT_IV_INDEX_TBL ROBJECT_IV_INDEX_TBL_inline
 | |
| 
 | |
| #endif /* INTERNAL_OBJECT_H */
 |