Anonymous (owner)

Revisions

  • fd0848 Sat Jul 11 16:20:53 -0700 2009
gist: 145425 Download_button fork
public
Public Clone URL: git://gist.github.com/145425.git
Embed All Files: show embed
Diff #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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_;
   }
 
Text only #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
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