rubybreaker 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. data/NEWS +6 -46
  2. data/README.md +30 -19
  3. data/TODO +22 -20
  4. data/VERSION +1 -1
  5. data/bin/rubybreaker +11 -2
  6. data/lib/rubybreaker.rb +31 -11
  7. data/lib/rubybreaker/debug.rb +5 -49
  8. data/lib/rubybreaker/{context.rb → debug/context.rb} +0 -0
  9. data/lib/rubybreaker/debug/debug.rb +61 -0
  10. data/lib/rubybreaker/{error.rb → debug/error.rb} +1 -1
  11. data/lib/rubybreaker/runtime.rb +3 -2
  12. data/lib/rubybreaker/runtime/inspector.rb +20 -13
  13. data/lib/rubybreaker/runtime/monitor.rb +21 -13
  14. data/lib/rubybreaker/runtime/object_wrapper.rb +3 -1
  15. data/lib/rubybreaker/runtime/type_system.rb +3 -2
  16. data/lib/rubybreaker/test/testcase.rb +0 -1
  17. data/lib/rubybreaker/type/type.rb +1 -1
  18. data/lib/rubybreaker/type/type_grammar.treetop +1 -1
  19. data/lib/rubybreaker/type/type_unparser.rb +1 -1
  20. data/lib/rubybreaker/util.rb +3 -11
  21. data/test/integrated/tc_both_broken_breakable.rb +27 -0
  22. data/test/ts_integrated.rb +1 -0
  23. data/webpage/index.html +30 -19
  24. data/webpage/rdoc/RubyBreaker.html +127 -10
  25. data/webpage/rdoc/RubyBreaker/Breakable.html +1 -5
  26. data/webpage/rdoc/RubyBreaker/Broken.html +2 -6
  27. data/webpage/rdoc/RubyBreaker/Broken/BrokenEigen.html +3 -6
  28. data/webpage/rdoc/RubyBreaker/Context.html +6 -10
  29. data/webpage/rdoc/RubyBreaker/Errors.html +2 -6
  30. data/webpage/rdoc/RubyBreaker/Errors/InternalError.html +3 -7
  31. data/webpage/rdoc/RubyBreaker/Errors/InvalidSubtypeCheck.html +3 -7
  32. data/webpage/rdoc/RubyBreaker/Errors/InvalidTypeConstruction.html +2 -6
  33. data/webpage/rdoc/RubyBreaker/Errors/SubtypeFailure.html +2 -6
  34. data/webpage/rdoc/RubyBreaker/Errors/TypeError.html +3 -7
  35. data/webpage/rdoc/RubyBreaker/Errors/UserError.html +3 -7
  36. data/webpage/rdoc/RubyBreaker/Main.html +33 -20
  37. data/webpage/rdoc/RubyBreaker/ObjectPosition.html +4 -8
  38. data/webpage/rdoc/RubyBreaker/Position.html +7 -11
  39. data/webpage/rdoc/RubyBreaker/RubyTypeUtils.html +1 -5
  40. data/webpage/rdoc/RubyBreaker/Runtime.html +1 -5
  41. data/webpage/rdoc/RubyBreaker/Runtime/Inspector.html +25 -18
  42. data/webpage/rdoc/RubyBreaker/Runtime/MethodInfo.html +1 -5
  43. data/webpage/rdoc/RubyBreaker/Runtime/Monitor.html +4 -8
  44. data/webpage/rdoc/RubyBreaker/Runtime/MonitorInstaller.html +20 -43
  45. data/webpage/rdoc/RubyBreaker/Runtime/MonitorSwitch.html +7 -11
  46. data/webpage/rdoc/RubyBreaker/Runtime/MonitorUtils.html +6 -10
  47. data/webpage/rdoc/RubyBreaker/Runtime/ObjectWrapper.html +7 -11
  48. data/webpage/rdoc/RubyBreaker/Runtime/Pluggable.html +1 -5
  49. data/webpage/rdoc/RubyBreaker/Runtime/TypePlaceholder.html +1 -5
  50. data/webpage/rdoc/RubyBreaker/Runtime/TypeSigParser.html +1 -5
  51. data/webpage/rdoc/RubyBreaker/Runtime/TypeSystem.html +8 -12
  52. data/webpage/rdoc/RubyBreaker/TestCase.html +1 -6
  53. data/webpage/rdoc/RubyBreaker/TypeComparer.html +1 -5
  54. data/webpage/rdoc/RubyBreaker/TypeDefs.html +1 -5
  55. data/webpage/rdoc/RubyBreaker/TypeDefs/AnyType.html +1 -5
  56. data/webpage/rdoc/RubyBreaker/TypeDefs/BlockType.html +1 -5
  57. data/webpage/rdoc/RubyBreaker/TypeDefs/DuckType.html +1 -5
  58. data/webpage/rdoc/RubyBreaker/TypeDefs/FusionType.html +1 -5
  59. data/webpage/rdoc/RubyBreaker/TypeDefs/MethodListType.html +1 -5
  60. data/webpage/rdoc/RubyBreaker/TypeDefs/MethodType.html +1 -5
  61. data/webpage/rdoc/RubyBreaker/TypeDefs/NilType.html +1 -5
  62. data/webpage/rdoc/RubyBreaker/TypeDefs/NominalType.html +1 -5
  63. data/webpage/rdoc/RubyBreaker/TypeDefs/OptionalType.html +1 -5
  64. data/webpage/rdoc/RubyBreaker/TypeDefs/OrType.html +1 -5
  65. data/webpage/rdoc/RubyBreaker/TypeDefs/SelfType.html +1 -5
  66. data/webpage/rdoc/RubyBreaker/TypeDefs/Type.html +1 -5
  67. data/webpage/rdoc/RubyBreaker/TypeDefs/VarLengthType.html +1 -5
  68. data/webpage/rdoc/RubyBreaker/TypeUnparser.html +1 -5
  69. data/webpage/rdoc/RubyBreaker/Typing.html +1 -5
  70. data/webpage/rdoc/RubyBreaker/{Utilities.html → Util.html} +8 -9
  71. data/webpage/rdoc/created.rid +15 -14
  72. data/webpage/rdoc/index.html +1 -5
  73. data/webpage/rdoc/js/search_index.js +1 -1
  74. data/webpage/rdoc/table_of_contents.html +22 -36
  75. metadata +9 -7
  76. data/webpage/rdoc/RubyBreaker/Debug.html +0 -411
  77. data/webpage/rdoc/RubyBreaker/Kernel.html +0 -259
@@ -114,8 +114,6 @@
114
114
 
115
115
  <li><a href="../RubyBreaker/Context.html">RubyBreaker::Context</a>
116
116
 
117
- <li><a href="../RubyBreaker/Debug.html">RubyBreaker::Debug</a>
118
-
119
117
  <li><a href="../RubyBreaker/Errors.html">RubyBreaker::Errors</a>
120
118
 
121
119
  <li><a href="../RubyBreaker/Errors/InternalError.html">RubyBreaker::Errors::InternalError</a>
@@ -130,8 +128,6 @@
130
128
 
131
129
  <li><a href="../RubyBreaker/Errors/UserError.html">RubyBreaker::Errors::UserError</a>
132
130
 
133
- <li><a href="../RubyBreaker/Kernel.html">RubyBreaker::Kernel</a>
134
-
135
131
  <li><a href="../RubyBreaker/Main.html">RubyBreaker::Main</a>
136
132
 
137
133
  <li><a href="../RubyBreaker/ObjectPosition.html">RubyBreaker::ObjectPosition</a>
@@ -200,7 +196,7 @@
200
196
 
201
197
  <li><a href="../RubyBreaker/Typing.html">RubyBreaker::Typing</a>
202
198
 
203
- <li><a href="../RubyBreaker/Utilities.html">RubyBreaker::Utilities</a>
199
+ <li><a href="../RubyBreaker/Util.html">RubyBreaker::Util</a>
204
200
 
205
201
  </ul>
206
202
  </nav>
@@ -252,9 +248,10 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
252
248
 
253
249
 
254
250
  <div class="method-source-code" id="input-source">
255
- <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 69</span>
251
+ <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 72</span>
256
252
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">input</span>()
257
253
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:io_file</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:io_file</span>])
254
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">verbose</span>(<span class="ruby-string">&quot;RubyBreaker input file exists...loading&quot;</span>)
258
255
  <span class="ruby-identifier">eval</span> <span class="ruby-node">&quot;load \&quot;#{OPTIONS[:io_file]}\&quot;&quot;</span>, <span class="ruby-constant">TOPLEVEL_BINDING</span>
259
256
  <span class="ruby-keyword">end</span></pre>
260
257
  </div><!-- input-source -->
@@ -278,14 +275,16 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
278
275
 
279
276
  <div class="method-description">
280
277
 
281
- <p>This method will generate the output</p>
278
+ <p>This method will generate the output.</p>
282
279
 
283
280
 
284
281
 
285
282
  <div class="method-source-code" id="output-source">
286
- <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 140</span>
283
+ <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 144</span>
287
284
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">output</span>()
288
285
 
286
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">verbose</span>(<span class="ruby-string">&quot;Generating type documentation&quot;</span>)
287
+
289
288
  <span class="ruby-identifier">io_exist</span> = <span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:io_file</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:io_file</span>])
290
289
 
291
290
  <span class="ruby-identifier">str</span> = <span class="ruby-string">&quot;&quot;</span>
@@ -309,6 +308,8 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
309
308
  <span class="ruby-keyword">end</span>
310
309
  <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">str</span>
311
310
  <span class="ruby-keyword">end</span>
311
+
312
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">verbose</span>(<span class="ruby-string">&quot;Done generating type documentation&quot;</span>)
312
313
  <span class="ruby-keyword">end</span></pre>
313
314
  </div><!-- output-source -->
314
315
 
@@ -336,7 +337,7 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
336
337
 
337
338
 
338
339
  <div class="method-source-code" id="pp_methods-source">
339
- <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 75</span>
340
+ <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 79</span>
340
341
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">pp_methods</span>(<span class="ruby-identifier">pp</span>, <span class="ruby-identifier">meth_type_map</span>)
341
342
  <span class="ruby-identifier">meth_type_map</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">meth_name</span>, <span class="ruby-identifier">meth_type</span><span class="ruby-operator">|</span>
342
343
  <span class="ruby-keyword">case</span> <span class="ruby-identifier">meth_type</span>
@@ -383,7 +384,7 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
383
384
 
384
385
 
385
386
  <div class="method-source-code" id="pp_module-source">
386
- <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 97</span>
387
+ <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 101</span>
387
388
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">pp_module</span>(<span class="ruby-identifier">pp</span>, <span class="ruby-identifier">mod</span>)
388
389
  <span class="ruby-comment"># Skip it if we already have seen it</span>
389
390
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-constant">DOCUMENTED</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mod</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">mod</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-node">&quot;#&lt;&quot;</span>
@@ -446,17 +447,25 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
446
447
 
447
448
  <div class="method-description">
448
449
 
449
- <p>This method will run the input file</p>
450
+ <p>This method will run do things in the following order:</p>
451
+
452
+ <pre class="ruby">* <span class="ruby-constant">Checks</span> <span class="ruby-identifier">to</span> <span class="ruby-identifier">see</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">the</span> <span class="ruby-identifier">user</span> <span class="ruby-identifier">program</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">an</span> <span class="ruby-identifier">input</span> <span class="ruby-identifier">file</span> <span class="ruby-identifier">exists</span>
453
+ * <span class="ruby-constant">Loads</span> <span class="ruby-identifier">the</span> <span class="ruby-identifier">documentation</span> <span class="ruby-keyword">for</span> <span class="ruby-constant">Ruby</span> <span class="ruby-constant">Core</span> <span class="ruby-constant">Library</span> (<span class="ruby-constant">TODO</span>)
454
+ * <span class="ruby-constant">Reads</span> <span class="ruby-identifier">the</span> <span class="ruby-identifier">input</span> <span class="ruby-identifier">type</span> <span class="ruby-identifier">documentation</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">any</span>
455
+ * <span class="ruby-constant">Reads</span> (<span class="ruby-identifier">require</span><span class="ruby-string">'s) the user program
456
+ </span></pre>
450
457
 
451
458
 
452
459
 
453
460
  <div class="method-source-code" id="run-source">
454
- <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 168</span>
461
+ <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 182</span>
455
462
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">run</span>()
456
463
 
457
- <span class="ruby-comment"># First, take care of the program file.</span>
464
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">setup_logger</span>()
465
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">verbose</span>(<span class="ruby-string">&quot;Running RubyBreaker&quot;</span>)
458
466
 
459
- <span class="ruby-identifier">argv0</span> = <span class="ruby-constant">ARGV</span>[<span class="ruby-value">0</span>]
467
+ <span class="ruby-comment"># First, take care of the program file.</span>
468
+ <span class="ruby-identifier">argv0</span> = <span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:file</span>]
460
469
  <span class="ruby-identifier">prog_file</span> = <span class="ruby-identifier">argv0</span>
461
470
  <span class="ruby-identifier">prog_file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">prog_file</span>)
462
471
 
@@ -466,7 +475,7 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
466
475
  <span class="ruby-keyword">end</span>
467
476
 
468
477
  <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">prog_file</span>)
469
- <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;ERROR: '#{argv0}' is an invalid file.&quot;</span>
478
+ <span class="ruby-identifier">fatal</span>(<span class="ruby-node">&quot;#{argv0} is an invalid file.&quot;</span>)
470
479
  <span class="ruby-identifier">exit</span>(<span class="ruby-value">1</span>)
471
480
  <span class="ruby-keyword">end</span>
472
481
 
@@ -477,6 +486,7 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
477
486
  <span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:io_file</span>] = <span class="ruby-constant">File</span>.<span class="ruby-identifier">absolute_path</span>(<span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:io_file</span>])
478
487
 
479
488
  <span class="ruby-keyword">if</span> <span class="ruby-constant">OPTIONS</span>[<span class="ruby-value">:rubylib</span>]
489
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">verbose</span>(<span class="ruby-string">&quot;Loading RubyBreaker's Ruby Core Library documentation&quot;</span>)
480
490
  <span class="ruby-comment"># Load the core library type documentation</span>
481
491
  <span class="ruby-identifier">eval</span>(<span class="ruby-string">&quot;require \&quot;rubybreaker/rubylib\&quot;&quot;</span>, <span class="ruby-constant">TOPLEVEL_BINDING</span>)
482
492
  <span class="ruby-keyword">end</span>
@@ -488,6 +498,8 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
488
498
  <span class="ruby-comment"># Finally, require the program file! Let it run! Wheeee!</span>
489
499
  <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;require '#{prog_file}'&quot;</span>, <span class="ruby-constant">TOPLEVEL_BINDING</span>)
490
500
 
501
+ <span class="ruby-constant">RubyBreaker</span>.<span class="ruby-identifier">verbose</span>(<span class="ruby-string">&quot;Done running the input program&quot;</span>)
502
+
491
503
  <span class="ruby-keyword">end</span></pre>
492
504
  </div><!-- run-source -->
493
505
 
@@ -515,14 +527,15 @@ running <a href="../RubyBreaker.html">RubyBreaker</a>.</p>
515
527
 
516
528
 
517
529
  <div class="method-source-code" id="setup-source">
518
- <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 48</span>
530
+ <pre><span class="ruby-comment"># File lib/rubybreaker.rb, line 50</span>
519
531
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">setup</span>()
520
532
 
521
533
  <span class="ruby-constant">BREAKABLE</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">mod</span><span class="ruby-operator">|</span>
522
- <span class="ruby-comment"># Avoid already installed module or now Broken module. Remember,</span>
523
- <span class="ruby-comment"># once a module is a declared to be Broken, it wins. Broken modules</span>
524
- <span class="ruby-comment"># cannot be Breakable!</span>
525
- <span class="ruby-keyword">unless</span> <span class="ruby-constant">INSTALLED</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mod</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">BROKEN</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mod</span>)
534
+
535
+ <span class="ruby-comment"># Remember, RubyBreaker now supports a hybrid of Breakable and</span>
536
+ <span class="ruby-comment"># Broken module. Just check if the module has already been</span>
537
+ <span class="ruby-comment"># instrumented.</span>
538
+ <span class="ruby-keyword">unless</span> <span class="ruby-constant">INSTALLED</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">mod</span>)
526
539
  <span class="ruby-constant">MonitorInstaller</span>.<span class="ruby-identifier">install_module_monitor</span>(<span class="ruby-identifier">mod</span>)
527
540
  <span class="ruby-constant">INSTALLED</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">mod</span>
528
541
  <span class="ruby-keyword">end</span>
@@ -47,7 +47,7 @@
47
47
  <nav id="file-list-section" class="section">
48
48
  <h3 class="section-header">Defined In</h3>
49
49
  <ul>
50
- <li>lib/rubybreaker/context.rb
50
+ <li>lib/rubybreaker/debug/context.rb
51
51
  </ul>
52
52
  </nav>
53
53
 
@@ -96,8 +96,6 @@
96
96
 
97
97
  <li><a href="../RubyBreaker/Context.html">RubyBreaker::Context</a>
98
98
 
99
- <li><a href="../RubyBreaker/Debug.html">RubyBreaker::Debug</a>
100
-
101
99
  <li><a href="../RubyBreaker/Errors.html">RubyBreaker::Errors</a>
102
100
 
103
101
  <li><a href="../RubyBreaker/Errors/InternalError.html">RubyBreaker::Errors::InternalError</a>
@@ -112,8 +110,6 @@
112
110
 
113
111
  <li><a href="../RubyBreaker/Errors/UserError.html">RubyBreaker::Errors::UserError</a>
114
112
 
115
- <li><a href="../RubyBreaker/Kernel.html">RubyBreaker::Kernel</a>
116
-
117
113
  <li><a href="../RubyBreaker/Main.html">RubyBreaker::Main</a>
118
114
 
119
115
  <li><a href="../RubyBreaker/ObjectPosition.html">RubyBreaker::ObjectPosition</a>
@@ -182,7 +178,7 @@
182
178
 
183
179
  <li><a href="../RubyBreaker/Typing.html">RubyBreaker::Typing</a>
184
180
 
185
- <li><a href="../RubyBreaker/Utilities.html">RubyBreaker::Utilities</a>
181
+ <li><a href="../RubyBreaker/Util.html">RubyBreaker::Util</a>
186
182
 
187
183
  </ul>
188
184
  </nav>
@@ -267,7 +263,7 @@ a method being invoked.</p>
267
263
 
268
264
 
269
265
  <div class="method-source-code" id="new-source">
270
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 61</span>
266
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 61</span>
271
267
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">obj</span>, <span class="ruby-identifier">meth_name</span>)
272
268
  <span class="ruby-ivar">@obj</span> = <span class="ruby-identifier">obj</span>
273
269
  <span class="ruby-ivar">@meth_name</span> = <span class="ruby-identifier">meth_name</span>
@@ -304,7 +300,7 @@ a method being invoked.</p>
304
300
 
305
301
 
306
302
  <div class="method-source-code" id="to_s-source">
307
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 66</span>
303
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 66</span>
308
304
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>()
309
305
  <span class="ruby-identifier">m_delim</span> = <span class="ruby-ivar">@obj</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">Module</span>) <span class="ruby-operator">?</span> <span class="ruby-string">&quot;.&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-node">&quot;#&quot;</span>
310
306
  <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;&gt; #{@obj.class}#{m_delim}#{@meth_name}&quot;</span>
@@ -47,7 +47,7 @@
47
47
  <nav id="file-list-section" class="section">
48
48
  <h3 class="section-header">Defined In</h3>
49
49
  <ul>
50
- <li>lib/rubybreaker/context.rb
50
+ <li>lib/rubybreaker/debug/context.rb
51
51
  </ul>
52
52
  </nav>
53
53
 
@@ -102,8 +102,6 @@
102
102
 
103
103
  <li><a href="../RubyBreaker/Context.html">RubyBreaker::Context</a>
104
104
 
105
- <li><a href="../RubyBreaker/Debug.html">RubyBreaker::Debug</a>
106
-
107
105
  <li><a href="../RubyBreaker/Errors.html">RubyBreaker::Errors</a>
108
106
 
109
107
  <li><a href="../RubyBreaker/Errors/InternalError.html">RubyBreaker::Errors::InternalError</a>
@@ -118,8 +116,6 @@
118
116
 
119
117
  <li><a href="../RubyBreaker/Errors/UserError.html">RubyBreaker::Errors::UserError</a>
120
118
 
121
- <li><a href="../RubyBreaker/Kernel.html">RubyBreaker::Kernel</a>
122
-
123
119
  <li><a href="../RubyBreaker/Main.html">RubyBreaker::Main</a>
124
120
 
125
121
  <li><a href="../RubyBreaker/ObjectPosition.html">RubyBreaker::ObjectPosition</a>
@@ -188,7 +184,7 @@
188
184
 
189
185
  <li><a href="../RubyBreaker/Typing.html">RubyBreaker::Typing</a>
190
186
 
191
- <li><a href="../RubyBreaker/Utilities.html">RubyBreaker::Utilities</a>
187
+ <li><a href="../RubyBreaker/Util.html">RubyBreaker::Util</a>
192
188
 
193
189
  </ul>
194
190
  </nav>
@@ -301,7 +297,7 @@ array.</p>
301
297
 
302
298
 
303
299
  <div class="method-source-code" id="convert_caller_to_pos-source">
304
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 49</span>
300
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 49</span>
305
301
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">convert_caller_to_pos</span>(<span class="ruby-identifier">caller_ary</span>, <span class="ruby-identifier">idx</span>=<span class="ruby-value">0</span>)
306
302
  <span class="ruby-identifier">tokens</span> = <span class="ruby-identifier">caller_ary</span>[<span class="ruby-identifier">idx</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;:&quot;</span>)
307
303
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">tokens</span>[<span class="ruby-value">0</span>],<span class="ruby-identifier">tokens</span>[<span class="ruby-value">1</span>],<span class="ruby-value">-1</span>,<span class="ruby-identifier">tokens</span>[<span class="ruby-value">2</span>]) <span class="ruby-comment"># no col </span>
@@ -333,7 +329,7 @@ position.</p>
333
329
 
334
330
 
335
331
  <div class="method-source-code" id="get-source">
336
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 43</span>
332
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 43</span>
337
333
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get</span>()
338
334
  <span class="ruby-keyword">return</span> <span class="ruby-constant">Position</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">@@file</span>,<span class="ruby-identifier">@@line</span>,<span class="ruby-identifier">@@col</span>)
339
335
  <span class="ruby-keyword">end</span></pre>
@@ -363,7 +359,7 @@ position.</p>
363
359
 
364
360
 
365
361
  <div class="method-source-code" id="new-source">
366
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 23</span>
362
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 23</span>
367
363
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">file</span>=<span class="ruby-string">&quot;&quot;</span>,<span class="ruby-identifier">line</span>=<span class="ruby-value">-1</span>,<span class="ruby-identifier">col</span>=<span class="ruby-value">-1</span>,<span class="ruby-identifier">meth</span>=<span class="ruby-string">&quot;&quot;</span>)
368
364
  <span class="ruby-ivar">@file</span> = <span class="ruby-identifier">file</span>
369
365
  <span class="ruby-ivar">@line</span> = <span class="ruby-identifier">line</span>
@@ -396,7 +392,7 @@ position.</p>
396
392
 
397
393
 
398
394
  <div class="method-source-code" id="set-source">
399
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 35</span>
395
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 35</span>
400
396
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">set</span>(<span class="ruby-identifier">file</span>,<span class="ruby-identifier">line</span>,<span class="ruby-identifier">col</span>)
401
397
  <span class="ruby-identifier">@@file</span> = <span class="ruby-identifier">file</span>
402
398
  <span class="ruby-identifier">@@line</span> = <span class="ruby-identifier">line</span>
@@ -434,7 +430,7 @@ position.</p>
434
430
 
435
431
 
436
432
  <div class="method-source-code" id="to_s-source">
437
- <pre><span class="ruby-comment"># File lib/rubybreaker/context.rb, line 30</span>
433
+ <pre><span class="ruby-comment"># File lib/rubybreaker/debug/context.rb, line 30</span>
438
434
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>()
439
435
  <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;#{@file}:(#{@line},#{@col}):in #{@method}&quot;</span>
440
436
  <span class="ruby-keyword">end</span></pre>
@@ -90,8 +90,6 @@
90
90
 
91
91
  <li><a href="../RubyBreaker/Context.html">RubyBreaker::Context</a>
92
92
 
93
- <li><a href="../RubyBreaker/Debug.html">RubyBreaker::Debug</a>
94
-
95
93
  <li><a href="../RubyBreaker/Errors.html">RubyBreaker::Errors</a>
96
94
 
97
95
  <li><a href="../RubyBreaker/Errors/InternalError.html">RubyBreaker::Errors::InternalError</a>
@@ -106,8 +104,6 @@
106
104
 
107
105
  <li><a href="../RubyBreaker/Errors/UserError.html">RubyBreaker::Errors::UserError</a>
108
106
 
109
- <li><a href="../RubyBreaker/Kernel.html">RubyBreaker::Kernel</a>
110
-
111
107
  <li><a href="../RubyBreaker/Main.html">RubyBreaker::Main</a>
112
108
 
113
109
  <li><a href="../RubyBreaker/ObjectPosition.html">RubyBreaker::ObjectPosition</a>
@@ -176,7 +172,7 @@
176
172
 
177
173
  <li><a href="../RubyBreaker/Typing.html">RubyBreaker::Typing</a>
178
174
 
179
- <li><a href="../RubyBreaker/Utilities.html">RubyBreaker::Utilities</a>
175
+ <li><a href="../RubyBreaker/Util.html">RubyBreaker::Util</a>
180
176
 
181
177
  </ul>
182
178
  </nav>
@@ -86,8 +86,6 @@
86
86
 
87
87
  <li><a href="../RubyBreaker/Context.html">RubyBreaker::Context</a>
88
88
 
89
- <li><a href="../RubyBreaker/Debug.html">RubyBreaker::Debug</a>
90
-
91
89
  <li><a href="../RubyBreaker/Errors.html">RubyBreaker::Errors</a>
92
90
 
93
91
  <li><a href="../RubyBreaker/Errors/InternalError.html">RubyBreaker::Errors::InternalError</a>
@@ -102,8 +100,6 @@
102
100
 
103
101
  <li><a href="../RubyBreaker/Errors/UserError.html">RubyBreaker::Errors::UserError</a>
104
102
 
105
- <li><a href="../RubyBreaker/Kernel.html">RubyBreaker::Kernel</a>
106
-
107
103
  <li><a href="../RubyBreaker/Main.html">RubyBreaker::Main</a>
108
104
 
109
105
  <li><a href="../RubyBreaker/ObjectPosition.html">RubyBreaker::ObjectPosition</a>
@@ -172,7 +168,7 @@
172
168
 
173
169
  <li><a href="../RubyBreaker/Typing.html">RubyBreaker::Typing</a>
174
170
 
175
- <li><a href="../RubyBreaker/Utilities.html">RubyBreaker::Utilities</a>
171
+ <li><a href="../RubyBreaker/Util.html">RubyBreaker::Util</a>
176
172
 
177
173
  </ul>
178
174
  </nav>
@@ -94,8 +94,6 @@
94
94
 
95
95
  <li><a href="../../RubyBreaker/Context.html">RubyBreaker::Context</a>
96
96
 
97
- <li><a href="../../RubyBreaker/Debug.html">RubyBreaker::Debug</a>
98
-
99
97
  <li><a href="../../RubyBreaker/Errors.html">RubyBreaker::Errors</a>
100
98
 
101
99
  <li><a href="../../RubyBreaker/Errors/InternalError.html">RubyBreaker::Errors::InternalError</a>
@@ -110,8 +108,6 @@
110
108
 
111
109
  <li><a href="../../RubyBreaker/Errors/UserError.html">RubyBreaker::Errors::UserError</a>
112
110
 
113
- <li><a href="../../RubyBreaker/Kernel.html">RubyBreaker::Kernel</a>
114
-
115
111
  <li><a href="../../RubyBreaker/Main.html">RubyBreaker::Main</a>
116
112
 
117
113
  <li><a href="../../RubyBreaker/ObjectPosition.html">RubyBreaker::ObjectPosition</a>
@@ -180,7 +176,7 @@
180
176
 
181
177
  <li><a href="../../RubyBreaker/Typing.html">RubyBreaker::Typing</a>
182
178
 
183
- <li><a href="../../RubyBreaker/Utilities.html">RubyBreaker::Utilities</a>
179
+ <li><a href="../../RubyBreaker/Util.html">RubyBreaker::Util</a>
184
180
 
185
181
  </ul>
186
182
  </nav>
@@ -193,8 +189,9 @@
193
189
 
194
190
  <div id="description" class="description">
195
191
 
196
- <p>This module inspects a <a href="../Breakable.html">Breakable</a> module and
197
- retrieves type information if there is any.</p>
192
+ <p>This module inspects a <a href="../Breakable.html">Breakable</a> module, a
193
+ <a href="../Broken.html">Broken</a> module, or a hybrid module to fetch the
194
+ type information for each method.</p>
198
195
 
199
196
  </div><!-- description -->
200
197
 
@@ -233,7 +230,7 @@ containing (method name, method type) pairs.</p>
233
230
 
234
231
 
235
232
  <div class="method-source-code" id="inspect_all-source">
236
- <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 51</span>
233
+ <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 53</span>
237
234
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">inspect_all</span>(<span class="ruby-identifier">mod</span>)
238
235
  <span class="ruby-identifier">mtypes</span> = {}
239
236
  <span class="ruby-identifier">mm</span> = <span class="ruby-constant">Breakable</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>[<span class="ruby-identifier">mod</span>]
@@ -242,6 +239,12 @@ containing (method name, method type) pairs.</p>
242
239
  <span class="ruby-identifier">mtypes</span>[<span class="ruby-identifier">im</span>] = <span class="ruby-identifier">mtype</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mtype</span>
243
240
  }
244
241
  <span class="ruby-keyword">end</span>
242
+ <span class="ruby-identifier">mm</span> = <span class="ruby-constant">Broken</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>[<span class="ruby-identifier">mod</span>]
243
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">mm</span>
244
+ <span class="ruby-identifier">mm</span>.<span class="ruby-identifier">meth_type_map</span>.<span class="ruby-identifier">each_pair</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">im</span>,<span class="ruby-identifier">mtype</span><span class="ruby-operator">|</span>
245
+ <span class="ruby-identifier">mtypes</span>[<span class="ruby-identifier">im</span>] = <span class="ruby-identifier">mtype</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mtype</span>
246
+ }
247
+ <span class="ruby-keyword">end</span>
245
248
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">mtypes</span>
246
249
  <span class="ruby-keyword">end</span></pre>
247
250
  </div><!-- inspect_all-source -->
@@ -273,7 +276,7 @@ eigen class.</p>
273
276
 
274
277
 
275
278
  <div class="method-source-code" id="inspect_class_meth-source">
276
- <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 35</span>
279
+ <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 37</span>
277
280
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">inspect_class_meth</span>(<span class="ruby-identifier">mod</span>, <span class="ruby-identifier">mname</span>)
278
281
  <span class="ruby-identifier">eigen_class</span> = <span class="ruby-constant">Runtime</span>.<span class="ruby-identifier">eigen_class</span>(<span class="ruby-identifier">mod</span>)
279
282
  <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">inspect_meth</span>(<span class="ruby-identifier">eigen_class</span>, <span class="ruby-identifier">mname</span>)
@@ -299,24 +302,28 @@ eigen class.</p>
299
302
 
300
303
  <div class="method-description">
301
304
 
302
- <p>This method inspects the module for specified method name. It returns the
303
- method type or method list type for the given method. If no method exists
304
- or if there is no type information for the method, it returns nil</p>
305
+ <p>This method inspects the module for the type of the specified method. It
306
+ returns the method type or method list type for the given method, by
307
+ looking at, first, the placeholder for the <a
308
+ href="../Breakable.html">Breakable</a> side of the module, and then, the
309
+ placeholder for the <a href="../Broken.html">Broken</a> side of the module.
310
+ If no method exists or if there is no type information for the method, it
311
+ returns nil.</p>
305
312
 
306
313
 
307
314
 
308
315
  <div class="method-source-code" id="inspect_meth-source">
309
- <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 20</span>
316
+ <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 22</span>
310
317
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">inspect_meth</span>(<span class="ruby-identifier">mod</span>, <span class="ruby-identifier">mname</span>)
311
318
  <span class="ruby-identifier">mname</span> = <span class="ruby-identifier">mname</span>.<span class="ruby-identifier">to_sym</span>
312
319
  <span class="ruby-keyword">if</span> <span class="ruby-constant">Breakable</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">mod</span>)
313
320
  <span class="ruby-identifier">placeholder</span> = <span class="ruby-constant">Breakable</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>[<span class="ruby-identifier">mod</span>]
314
- <span class="ruby-keyword">elsif</span> <span class="ruby-constant">Broken</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">mod</span>)
315
- <span class="ruby-identifier">placeholder</span> = <span class="ruby-constant">Broken</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>[<span class="ruby-identifier">mod</span>]
316
- <span class="ruby-keyword">else</span>
317
- <span class="ruby-comment"># TODO</span>
318
321
  <span class="ruby-keyword">end</span>
319
322
  <span class="ruby-identifier">t</span> = <span class="ruby-identifier">placeholder</span>.<span class="ruby-identifier">meth_type_map</span>[<span class="ruby-identifier">mname</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">placeholder</span>
323
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">t</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">Broken</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">mod</span>)
324
+ <span class="ruby-identifier">placeholder</span> = <span class="ruby-constant">Broken</span><span class="ruby-operator">::</span><span class="ruby-constant">TYPE_PLACEHOLDER_MAP</span>[<span class="ruby-identifier">mod</span>]
325
+ <span class="ruby-identifier">t</span> = <span class="ruby-identifier">placeholder</span>.<span class="ruby-identifier">meth_type_map</span>[<span class="ruby-identifier">mname</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">placeholder</span>
326
+ <span class="ruby-keyword">end</span>
320
327
  <span class="ruby-keyword">return</span> <span class="ruby-identifier">t</span>
321
328
  <span class="ruby-keyword">end</span></pre>
322
329
  </div><!-- inspect_meth-source -->
@@ -347,7 +354,7 @@ a hash of (mname, mtype) pairs.</p>
347
354
 
348
355
 
349
356
  <div class="method-source-code" id="inspect_meths-source">
350
- <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 41</span>
357
+ <pre><span class="ruby-comment"># File lib/rubybreaker/runtime/inspector.rb, line 43</span>
351
358
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">inspect_meths</span>(<span class="ruby-identifier">mod</span>, <span class="ruby-identifier">mnames</span>)
352
359
  <span class="ruby-identifier">mtype_hash</span> = {}
353
360
  <span class="ruby-identifier">mnames</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mname</span><span class="ruby-operator">|</span>