mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	struct.c: struct_make_members_list
* struct.c (struct_make_members_list): extract making member name list from char* va_list, with creating symbols without intermediate IDs. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54611 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									25c0a2d3ad
								
							
						
					
					
						commit
						c746d5027d
					
				
					 2 changed files with 24 additions and 28 deletions
				
			
		|  | @ -1,3 +1,9 @@ | |||
| Sat Apr 16 09:59:40 2016  Nobuyoshi Nakada  <nobu@ruby-lang.org> | ||||
| 
 | ||||
| 	* struct.c (struct_make_members_list): extract making member name | ||||
| 	  list from char* va_list, with creating symbols without | ||||
| 	  intermediate IDs. | ||||
| 
 | ||||
| Sat Apr 16 01:33:27 2016  CHIKANAGA Tomoyuki  <nagachika@ruby-lang.org> | ||||
| 
 | ||||
| 	* tool/redmine-backporter.rb: sort revisions. | ||||
|  |  | |||
							
								
								
									
										46
									
								
								struct.c
									
										
									
									
									
								
							
							
						
						
									
										46
									
								
								struct.c
									
										
									
									
									
								
							|  | @ -330,6 +330,20 @@ rb_struct_alloc_noinit(VALUE klass) | |||
|     return struct_alloc(klass); | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
| struct_make_members_list(va_list ar) | ||||
| { | ||||
|     char *mem; | ||||
|     VALUE ary = rb_ary_tmp_new(0); | ||||
| 
 | ||||
|     while ((mem = va_arg(ar, char*)) != 0) { | ||||
| 	VALUE sym = rb_sym_intern_ascii_cstr(mem); | ||||
| 	rb_ary_push(ary, sym); | ||||
|     } | ||||
|     OBJ_FREEZE_RAW(ary); | ||||
|     return ary; | ||||
| } | ||||
| 
 | ||||
| static VALUE | ||||
| struct_define_without_accessor(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, VALUE members) | ||||
| { | ||||
|  | @ -364,15 +378,10 @@ rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VAL | |||
| { | ||||
|     va_list ar; | ||||
|     VALUE members; | ||||
|     char *name; | ||||
| 
 | ||||
|     members = rb_ary_tmp_new(0); | ||||
|     va_start(ar, alloc); | ||||
|     while ((name = va_arg(ar, char*)) != NULL) { | ||||
|         rb_ary_push(members, ID2SYM(rb_intern(name))); | ||||
|     } | ||||
|     members = struct_make_members_list(ar); | ||||
|     va_end(ar); | ||||
|     OBJ_FREEZE_RAW(members); | ||||
| 
 | ||||
|     return struct_define_without_accessor(outer, class_name, super, alloc, members); | ||||
| } | ||||
|  | @ -382,15 +391,10 @@ rb_struct_define_without_accessor(const char *class_name, VALUE super, rb_alloc_ | |||
| { | ||||
|     va_list ar; | ||||
|     VALUE members; | ||||
|     char *name; | ||||
| 
 | ||||
|     members = rb_ary_tmp_new(0); | ||||
|     va_start(ar, alloc); | ||||
|     while ((name = va_arg(ar, char*)) != NULL) { | ||||
|         rb_ary_push(members, ID2SYM(rb_intern(name))); | ||||
|     } | ||||
|     members = struct_make_members_list(ar); | ||||
|     va_end(ar); | ||||
|     OBJ_FREEZE_RAW(members); | ||||
| 
 | ||||
|     return struct_define_without_accessor(0, class_name, super, alloc, members); | ||||
| } | ||||
|  | @ -400,17 +404,10 @@ rb_struct_define(const char *name, ...) | |||
| { | ||||
|     va_list ar; | ||||
|     VALUE st, ary; | ||||
|     char *mem; | ||||
| 
 | ||||
|     ary = rb_ary_tmp_new(0); | ||||
| 
 | ||||
|     va_start(ar, name); | ||||
|     while ((mem = va_arg(ar, char*)) != 0) { | ||||
| 	ID slot = rb_intern(mem); | ||||
| 	rb_ary_push(ary, ID2SYM(slot)); | ||||
|     } | ||||
|     ary = struct_make_members_list(ar); | ||||
|     va_end(ar); | ||||
|     OBJ_FREEZE_RAW(ary); | ||||
| 
 | ||||
|     if (!name) st = anonymous_struct(rb_cStruct); | ||||
|     else st = new_struct(rb_str_new2(name), rb_cStruct); | ||||
|  | @ -422,17 +419,10 @@ rb_struct_define_under(VALUE outer, const char *name, ...) | |||
| { | ||||
|     va_list ar; | ||||
|     VALUE ary; | ||||
|     char *mem; | ||||
| 
 | ||||
|     ary = rb_ary_tmp_new(0); | ||||
| 
 | ||||
|     va_start(ar, name); | ||||
|     while ((mem = va_arg(ar, char*)) != 0) { | ||||
| 	ID slot = rb_intern(mem); | ||||
| 	rb_ary_push(ary, ID2SYM(slot)); | ||||
|     } | ||||
|     ary = struct_make_members_list(ar); | ||||
|     va_end(ar); | ||||
|     OBJ_FREEZE_RAW(ary); | ||||
| 
 | ||||
|     return setup_struct(rb_define_class_under(outer, name, rb_cStruct), ary); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 nobu
						nobu