Skip to content

Instantly share code, notes, and snippets.

Created July 11, 2009 23:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/145425 to your computer and use it in GitHub Desktop.
Save anonymous/145425 to your computer and use it in GitHub Desktop.
diff --git a/vm/builtin/object.cpp b/vm/builtin/object.cpp
index e93b117..a6dc20b 100644
--- a/vm/builtin/object.cpp
+++ b/vm/builtin/object.cpp
@@ -228,6 +228,13 @@ namespace rubinius {
return Qnil;
}
+ if(!ivars_->nil_p()) {
+ if(try_as<CompactLookupTable>(ivars_)) return ivars_;
+ if(!try_as<LookupTable>(ivars_)) {
+ puts("bah!");
+ }
+ }
+
return ivars_;
}
gauss:rubinius brian$ gdb --args vm/vm -S gem install --ri --rdoc rdoc
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin"...Reading symbols for shared libraries ..... done
(gdb) b object.cpp : 234
Breakpoint 1 at 0xf91b2: file vm/builtin/object.cpp, line 234.
Breakpoint 2 at 0x10c9ad: file vm/capi/object.cpp, line 234.
warning: Multiple breakpoints were set.
Use the "delete" command to delete unwanted breakpoints.
(gdb) del 2
(gdb) r
Starting program: /Users/brian/devel/rubinius/vm/vm -S gem install --ri --rdoc rdoc
Reading symbols for shared libraries ++++. done
Reading symbols for shared libraries . done
Reading symbols for shared libraries .. done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
Successfully installed rdoc-2.4.3
1 gem installed
Installing ri documentation for rdoc-2.4.3...
Breakpoint 1, rubinius::Object::get_ivars (this=0x17f0144, state=0x1000f90) at vm/builtin/object.cpp:234
234 puts("bah!");
(gdb) bt 10
#0 rubinius::Object::get_ivars (this=0x17f0144, state=0x1000f90) at vm/builtin/object.cpp:234
#1 0x0008b2cd in rubinius::Primitives::object_get_ivars (state=0x1000f90, call_frame=0xbffdeb80, msg=@0x10c0320, args=@0xbffde674) at primitives_glue.gen.cpp:11771
#2 0x000579ab in rubinius::InlineCache::empty_cache_private (state=0x1000f90, cache=0x10c0320, call_frame=0xbffdeb80, args=@0xbffde674) at vm/inline_cache.cpp:248
#3 0x00058e39 in rubinius::InlineCache::initialize (this=0x10c0320, state=0x1000f90, call_frame=0xbffdeb80, args=@0xbffde674) at inline_cache.hpp:173
#4 0x00057d4f in rubinius::InlineCache::check_cache (state=0x1000f90, cache=0x10c0320, call_frame=0xbffdeb80, args=@0xbffde674) at vm/inline_cache.cpp:325
#5 0x0017a299 in rubinius::InlineCache::execute (this=0x10c0320, state=0x1000f90, call_frame=0xbffdeb80, args=@0xbffde674) at inline_cache.hpp:169
#6 0x00177bc9 in rubinius::VMMethod::interpreter (state=0x1000f90, vmm=0x10c0180, call_frame=0xbffdeb80, args=@0xbffdef44) at vm/gen/instructions.cpp:682
#7 0x000d8e85 in rubinius::VMMethod::execute_specialized<rubinius::NoArguments> (state=0x1000f90, previous=0xbffdf4a0, msg=@0x218ab80, args=@0xbffdef44) at vm/vmmethod.cpp:556
#8 0x00057d2a in rubinius::InlineCache::check_cache (state=0x1000f90, cache=0x218ab80, call_frame=0xbffdf4a0, args=@0xbffdef44) at vm/inline_cache.cpp:322
#9 0x0017a299 in rubinius::InlineCache::execute (this=0x218ab80, state=0x1000f90, call_frame=0xbffdf4a0, args=@0xbffdef44) at inline_cache.hpp:169
(More stack frames follow...)
(gdb) fr 1
#1 0x0008b2cd in rubinius::Primitives::object_get_ivars (state=0x1000f90, call_frame=0xbffdeb80, msg=@0x10c0320, args=@0xbffde674) at primitives_glue.gen.cpp:11771
11771 ret = recv->get_ivars(state);
(gdb) p call_frame->print_backtrace(state)
0xbffdeb80: <included module>#instance_variables in kernel/common/kernel.rb:460 (+4)
0xbffdf4a0: Struct#instance_variables in kernel/common/struct.rb:92 (+4)
0xbffdfe10: Object#to_yaml_properties in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:13 (+4)
0xbffe0730: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:94 (+16)
0xbffe1480: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:19 (+19)
0xbffe21f0: YAML.quick_emit in /Users/brian/devel/rubinius/lib/yaml.rb:133 (+133)
0xbffe2b30: Struct#to_yaml in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:23 (+23)
0xbffe3ad0: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:12 (+12)
0xbffe43b0: Array#each in kernel/bootstrap/array.rb:152 (+19)
0xbffe4cc0: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:11 (+11)
0xbffe5a10: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:19 (+19)
0xbffe6780: YAML.quick_emit in /Users/brian/devel/rubinius/lib/yaml.rb:133 (+133)
0xbffe70c0: Array#to_yaml in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:23 (+23)
0xbffe8060: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:30 (+30)
0xbffe8950: Array#each in kernel/bootstrap/array.rb:152 (+19)
0xbffe9270: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:13 (+13)
0xbffe9fc0: __block__ in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:19 (+19)
0xbffead30: YAML.quick_emit in /Users/brian/devel/rubinius/lib/yaml.rb:133 (+133)
0xbffeb670: Object#to_yaml in /Users/brian/devel/rubinius/lib/yaml/rubytypes.rb:23 (+23)
0xbffebfa0: RDoc::RI::Description#serialize in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/ri/descriptions.rb:3 (+3)
0xbffec8c0: __block__ in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/ri/writer.rb:57 (+11)
0xbffed1a0: File.open in kernel/common/file.rb:69 (+50)
0xbffedae0: RDoc::RI::Writer#add_method in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/ri/writer.rb:78 (+78)
0xbffee430: RDoc::Generator::RI#generate_method_info in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:205 (+205)
0xbffeed60: __block__ in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:14 (+14)
0xbffef640: Array#each in kernel/bootstrap/array.rb:152 (+19)
0xbffeff60: RDoc::Generator::RI#generate_class_info in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:259 (+259)
0xbfff08a0: RDoc::Generator::RI#process_class in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:47 (+7)
0xbfff11b0: __block__ in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:11 (+11)
0xbfff1ae0: Array#each in kernel/bootstrap/array.rb:152 (+19)
0xbfff2400: RDoc::Context#each_classmodule in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/context.rb:37 (+37)
0xbfff2d20: RDoc::Generator::RI#process_class in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:15 (+15)
0xbfff3630: __block__ in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:11 (+11)
0xbfff3f10: Array#each in kernel/bootstrap/array.rb:152 (+19)
0xbfff4830: RDoc::Generator::RI#generate in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb:12 (+12)
0xbfff5180: RDoc::RDoc#document in /Users/brian/devel/rubinius/gems/1.8/gems/rdoc-2.4.3/lib/rdoc/rdoc.rb:325 (+269)
0xbfff5b00: Gem::DocManager#run_rdoc in /Users/brian/devel/rubinius/lib/rubygems/doc_manager.rb:177 (+194)
0xbfff6450: Gem::DocManager#install_ri in /Users/brian/devel/rubinius/lib/rubygems/doc_manager.rb:57 (+57)
0xbfff6d80: Gem::DocManager#generate_ri in /Users/brian/devel/rubinius/lib/rubygems/doc_manager.rb:111 (+9)
0xbfff76a0: __block__ in /Users/brian/devel/rubinius/lib/rubygems/commands/install_command.rb:25 (+25)
0xbfff7f90: Array#each in kernel/bootstrap/array.rb:152 (+19)
0xbfff88b0: Gem::Commands::InstallCommand#execute in /Users/brian/devel/rubinius/lib/rubygems/commands/install_command.rb:147 (+164)
0xbfff9200: Gem::Command#invoke in /Users/brian/devel/rubinius/lib/rubygems/command.rb:44 (+44)
0xbfff9b20: Gem::CommandManager#process_args in /Users/brian/devel/rubinius/lib/rubygems/command_manager.rb:250 (+250)
0xbfffa450: Gem::CommandManager#run in /Users/brian/devel/rubinius/lib/rubygems/command_manager.rb:102 (+11)
0xbfffad80: Gem::GemRunner#run in /Users/brian/devel/rubinius/lib/rubygems/gem_runner.rb:58 (+134)
0xbfffb6d0: #<Object:0x20225cc>.__script__ in /usr/bin/gem:24 (+150)
0xbfffc000: Rubinius::CompiledMethod#as_script in kernel/common/compiled_method.rb:104 (+104)
0xbfffc930: Compiler::Utils.single_load in kernel/compiler/compile.rb:239 (+480)
0xbfffd2d0: Compiler::Utils.load_from_extension in kernel/compiler/compile.rb:244 (+244)
0xbfffdc30: Rubinius::Loader#script in kernel/loader.rb:317 (+98)
0xbfffe570: Rubinius::Loader#main in kernel/loader.rb:397 (+51)
0xbfffeeb0: Object#__script__ in kernel/loader.rb:445 (+45)
$1 = void
(gdb) fr
#1 0x0008b2cd in rubinius::Primitives::object_get_ivars (state=0x1000f90, call_frame=0xbffdeb80, msg=@0x10c0320, args=@0xbffde674) at primitives_glue.gen.cpp:11771
11771 ret = recv->get_ivars(state);
(gdb) fr 0
#0 rubinius::Object::get_ivars (this=0x17f0144, state=0x1000f90) at vm/builtin/object.cpp:234
234 puts("bah!");
(gdb) fr
#0 rubinius::Object::get_ivars (this=0x17f0144, state=0x1000f90) at vm/builtin/object.cpp:234
234 puts("bah!");
(gdb) p this
$2 = (class rubinius::Object * const) 0x17f0144
(gdb) rp this
<ERROR! Object reference points to old young half!>
$3 = void
(gdb) p *this
$4 = {
<rubinius::ObjectHeader> = {
{
{
obj_type_ = rubinius::ObjectType,
zone = rubinius::YoungObjectZone,
age = 1,
Forwarded = 1,
Remember = 0,
Marked = 0,
RequiresCleanup = 0,
RefsAreWeak = 0,
InImmix = 0,
Pinned = 0
},
all_flags = 18219
},
klass_ = 0x42e13b0,
ivars_ = 0x1203664,
__body__ = 0x17f0150
},
members of rubinius::Object:
static type = <optimized out>
}
(gdb) p *this->klass_
$5 = {
<rubinius::Module> = {
<rubinius::Object> = {
<rubinius::ObjectHeader> = {
{
{
obj_type_ = rubinius::ClassType,
zone = rubinius::MatureObjectZone,
age = 0,
Forwarded = 0,
Remember = 0,
Marked = 0,
RequiresCleanup = 0,
RefsAreWeak = 0,
InImmix = 1,
Pinned = 0
},
all_flags = 1049101
},
klass_ = 0x42e3d10,
ivars_ = 0x1a,
__body__ = 0x42e13bc
},
members of rubinius::Object:
static type = <optimized out>
},
members of rubinius::Module:
static type = <optimized out>,
method_table_ = 0x42e3d3c,
module_name_ = 0x14746,
constants_ = 0x42e3d54,
superclass_ = 0x2022d04
},
members of rubinius::Class:
static type = <optimized out>,
instance_type_ = 0x57,
type_info_ = 0x1002b70,
class_id_ = 2714
}
(gdb) rp this->klass_
#<RDoc::Markup::Flow::P(Class):0x42e13b0>
name: :RDoc::Markup::Flow::P
superclass: #<Struct(Class):0x2022d04>
constants: #<Rubinius::LookupTable:0x42e3d54>: 1
:STRUCT_ATTRS
>
method_table: #<Rubinius::MethodTable:0x42e3d3c>: 2
:body=, :body
>
>
$6 = void
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment