# Super dynamic class definition causes infinite loop

**URL:** <https://www.ruby-forum.com/t/super-dynamic-class-definition-causes-infinite-loop/152891>\
**Category:** Development\
**Created:** [November 9, 2008, 5:40am UTC](https://www.ruby-forum.com/t/super-dynamic-class-definition-causes-infinite-loop/152891 "2008-11-09T05:40:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kouhei\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f4b2a3/32.png) [@Kouhei\_S](https://www.ruby-forum.com/u/Kouhei_S)\
**Post date:** [November 9, 2008, 5:40am UTC](https://www.ruby-forum.com/t/super-dynamic-class-definition-causes-infinite-loop/152891/1 "2008-11-09T05:40:26Z")

</div>

e$B?\F#$G$9!#e(B

e$B0J2\<$N%9%/%j%W%H$Ne(B2e$B2sL$Ne(Bdefined\_class.newe$B$GL58B%k!\<%W$K$J$Ce(B  
e$B$F$7$^$$$^$9!#e(B

* * *

def define\_class(parent=nil)  
Class.new(parent || Object) do  
def initialize  
super  
end  
end  
end

defined\_class = define\_class  
p defined\_class.new

## define\_class(defined\_class) p defined\_class.new

% /tmp/local/bin/ruby -v /tmp/a.rb  
ruby 1.9.0 (2008-11-09 revision 20163) [x86\_64-linux]  
#\<#Class:0x00000000ef6c30:0x00000000ef6640\>  
/tmp/a.rb:4:in `initialize': stack level too deep (SystemStackError) from /tmp/a.rb:4:in`initialize’  
from /tmp/a.rb:4:in `initialize' from /tmp/a.rb:4:in`initialize’  
from /tmp/a.rb:4:in `initialize' from /tmp/a.rb:4:in`initialize’  
from /tmp/a.rb:4:in `initialize' from /tmp/a.rb:4:in`initialize’  
from /tmp/a.rb:4:in `initialize' ... 8716 levels... from /tmp/a.rb:4:in`initialize’  
from /tmp/a.rb:4:in `initialize' from /tmp/a.rb:13:in`new’  
from /tmp/a.rb:13:in `’

---

<div class="post-metadata">

**Author:** ![Kouhei\_S](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/f4b2a3/32.png) [@Kouhei\_S](https://www.ruby-forum.com/u/Kouhei_S)\
**Post date:** [November 23, 2008, 5:36am UTC](https://www.ruby-forum.com/t/super-dynamic-class-definition-causes-infinite-loop/152891/2 "2008-11-23T05:36:52Z")

</div>

e$B?\F#$G$9!#e(B

In [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
“[ruby-dev:37045] super dynamic class definition causes infinite loop”  
on Sun, 9 Nov 2008 13:37:39 +0900,  
Kouhei S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> end  
> #\<#Class:0x00000000ef6c30:0x00000000ef6640\>  
> from /tmp/a.rb:4:in `initialize' from /tmp/a.rb:4:in `initialize’  
> from /tmp/a.rb:13:in `new' from /tmp/a.rb:13:in `’

e$B%F%9%H$K$7$F$\_$^$7$?!#e(B

# Index: test/ruby/test\_class.rb

— test/ruby/test\_class.rb (revision 20332)  
+++ test/ruby/test\_class.rb (working copy)  
@@ -144,4 +144,20 @@  
assert\_raise(TypeError) { Class.allocate.new }  
assert\_raise(TypeError) { Class.allocate.superclass }  
end  
+

- def test\_dynamic\_defined\_initialize
- define\_class = Proc.new do |parent|
- 

```
 Class.new(parent) do

```

- 

```
   def initialize

```

- 

```
     super

```

- 

```
   end

```

- 

```
 end

```

- end
- 
- defined\_class = define\_class.call(Object)
- assert\_nothing\_raised {defined\_class.new}
- 
- define\_class.call(defined\_class)
- assert\_nothing\_raised {defined\_class.new}
- end  
end

e$B$3$N$h$&$K\<:GT$7$^$9!#e(B

% ./ruby test/runner.rb -ntest\_dynamic\_defined\_initialize  
test/ruby/test\_class.rb  
Loaded suite test/runner  
Started  
F  
Finished in 0.046818 seconds.

1. Failure:  
test\_dynamic\_defined\_initialize(TestClass)  
[/home/kou/work/ruby/ruby/test/ruby/test\_class.rb:152]:  
Exception raised:  
\<#\<SystemStackError: stack level too deep\>\>.

1 tests, 0 assertions, 1 failures, 0 errors, 0 skips
