mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* eval.c (rb_call_super): should call method_missing if super is
called from Kernel method. * eval.c (exec_under): frame during eval should preserve external information. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@9491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									cdcfcef20f
								
							
						
					
					
						commit
						90509da425
					
				
					 3 changed files with 19 additions and 5 deletions
				
			
		|  | @ -1,3 +1,11 @@ | ||||||
|  | Tue Nov  1 14:20:11 2005  Yukihiro Matsumoto  <matz@ruby-lang.org> | ||||||
|  | 
 | ||||||
|  | 	* eval.c (rb_call_super): should call method_missing if super is | ||||||
|  | 	  called from Kernel method. | ||||||
|  | 
 | ||||||
|  | 	* eval.c (exec_under): frame during eval should preserve external | ||||||
|  | 	  information. | ||||||
|  | 
 | ||||||
| Tue Nov 01 10:50:17 2005  GOTOU Yuuzou  <gotoyuzo@notwork.org> | Tue Nov 01 10:50:17 2005  GOTOU Yuuzou  <gotoyuzo@notwork.org> | ||||||
| 
 | 
 | ||||||
| 	* ext/openssl/extconf.rb: should check ERR_peek_last_error(). | 	* ext/openssl/extconf.rb: should check ERR_peek_last_error(). | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								eval.c
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								eval.c
									
										
									
									
									
								
							|  | @ -6080,6 +6080,9 @@ rb_call_super(argc, argv) | ||||||
| 
 | 
 | ||||||
|     self = ruby_frame->self; |     self = ruby_frame->self; | ||||||
|     klass = ruby_frame->last_class; |     klass = ruby_frame->last_class; | ||||||
|  |     if (RCLASS(klass)->super == 0) { | ||||||
|  | 	return method_missing(self, ruby_frame->last_func, argc, argv, CSTAT_SUPER); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT); |     PUSH_ITER(ruby_iter->iter ? ITER_PRE : ITER_NOT); | ||||||
|     result = rb_call(RCLASS(klass)->super, self, ruby_frame->orig_func, argc, argv, 3); |     result = rb_call(RCLASS(klass)->super, self, ruby_frame->orig_func, argc, argv, 3); | ||||||
|  | @ -6439,14 +6442,16 @@ exec_under(func, under, cbase, args) | ||||||
|     VALUE val = Qnil;		/* OK */ |     VALUE val = Qnil;		/* OK */ | ||||||
|     int state; |     int state; | ||||||
|     int mode; |     int mode; | ||||||
|  |     struct FRAME *f = ruby_frame->prev; | ||||||
| 
 | 
 | ||||||
|     PUSH_CLASS(under); |     PUSH_CLASS(under); | ||||||
|     PUSH_FRAME(); |     PUSH_FRAME(); | ||||||
|     ruby_frame->self = _frame.prev->self; |     ruby_frame->self = f->self; | ||||||
|     ruby_frame->last_func = _frame.prev->last_func; |     ruby_frame->last_func = f->last_func; | ||||||
|     ruby_frame->last_class = _frame.prev->last_class; |     ruby_frame->orig_func = f->orig_func; | ||||||
|     ruby_frame->argc = _frame.prev->argc; |     ruby_frame->last_class = f->last_class; | ||||||
|     ruby_frame->argv = _frame.prev->argv; |     ruby_frame->argc = f->argc; | ||||||
|  |     ruby_frame->argv = f->argv; | ||||||
|     if (cbase) { |     if (cbase) { | ||||||
| 	PUSH_CREF(cbase); | 	PUSH_CREF(cbase); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -436,6 +436,7 @@ class RubyLex | ||||||
|   def_exception(:SyntaxError, "%s") |   def_exception(:SyntaxError, "%s") | ||||||
|    |    | ||||||
|   include RubyToken |   include RubyToken | ||||||
|  |   include IRB | ||||||
| 
 | 
 | ||||||
|   attr_reader :continue |   attr_reader :continue | ||||||
|   attr_reader :lex_state |   attr_reader :lex_state | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 matz
						matz