looksee 2.1.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,141 @@
1
+ /**********************************************************************
2
+
3
+ method.h -
4
+
5
+ $Author: normal $
6
+ created at: Wed Jul 15 20:02:33 2009
7
+
8
+ Copyright (C) 2009 Koichi Sasada
9
+
10
+ **********************************************************************/
11
+ #ifndef METHOD_H
12
+ #define METHOD_H
13
+
14
+ #include "internal.h"
15
+
16
+ #ifndef END_OF_ENUMERATION
17
+ # if defined(__GNUC__) &&! defined(__STRICT_ANSI__)
18
+ # define END_OF_ENUMERATION(key)
19
+ # else
20
+ # define END_OF_ENUMERATION(key) END_OF_##key##_PLACEHOLDER = 0
21
+ # endif
22
+ #endif
23
+
24
+ typedef enum {
25
+ NOEX_PUBLIC = 0x00,
26
+ NOEX_NOSUPER = 0x01,
27
+ NOEX_PRIVATE = 0x02,
28
+ NOEX_PROTECTED = 0x04,
29
+ NOEX_MASK = 0x06,
30
+ NOEX_BASIC = 0x08,
31
+ NOEX_UNDEF = NOEX_NOSUPER,
32
+ NOEX_MODFUNC = 0x12,
33
+ NOEX_SUPER = 0x20,
34
+ NOEX_VCALL = 0x40,
35
+ NOEX_RESPONDS = 0x80,
36
+
37
+ NOEX_BIT_WIDTH = 8,
38
+ NOEX_SAFE_SHIFT_OFFSET = ((NOEX_BIT_WIDTH+3)/4)*4 /* round up to nibble */
39
+ } rb_method_flag_t;
40
+
41
+ #define NOEX_SAFE(n) ((int)((n) >> NOEX_SAFE_SHIFT_OFFSET) & 0x0F)
42
+ #define NOEX_WITH(n, s) (((s) << NOEX_SAFE_SHIFT_OFFSET) | (n) | (ruby_running ? 0 : NOEX_BASIC))
43
+ #define NOEX_WITH_SAFE(n) NOEX_WITH((n), rb_safe_level())
44
+
45
+ /* method data type */
46
+
47
+ typedef enum {
48
+ VM_METHOD_TYPE_ISEQ,
49
+ VM_METHOD_TYPE_CFUNC,
50
+ VM_METHOD_TYPE_ATTRSET,
51
+ VM_METHOD_TYPE_IVAR,
52
+ VM_METHOD_TYPE_BMETHOD,
53
+ VM_METHOD_TYPE_ZSUPER,
54
+ VM_METHOD_TYPE_UNDEF,
55
+ VM_METHOD_TYPE_NOTIMPLEMENTED,
56
+ VM_METHOD_TYPE_OPTIMIZED, /* Kernel#send, Proc#call, etc */
57
+ VM_METHOD_TYPE_MISSING, /* wrapper for method_missing(id) */
58
+ VM_METHOD_TYPE_REFINED,
59
+
60
+ END_OF_ENUMERATION(VM_METHOD_TYPE)
61
+ } rb_method_type_t;
62
+
63
+ struct rb_call_info_struct;
64
+
65
+ typedef struct rb_method_cfunc_struct {
66
+ VALUE (*func)(ANYARGS);
67
+ VALUE (*invoker)(VALUE (*func)(ANYARGS), VALUE recv, int argc, const VALUE *argv);
68
+ int argc;
69
+ } rb_method_cfunc_t;
70
+
71
+ typedef struct rb_method_attr_struct {
72
+ ID id;
73
+ const VALUE location;
74
+ } rb_method_attr_t;
75
+
76
+ typedef struct rb_iseq_struct rb_iseq_t;
77
+
78
+ typedef struct rb_method_definition_struct {
79
+ rb_method_type_t type; /* method type */
80
+ int alias_count;
81
+ ID original_id;
82
+ union {
83
+ rb_iseq_t * const iseq; /* should be mark */
84
+ rb_method_cfunc_t cfunc;
85
+ rb_method_attr_t attr;
86
+ const VALUE proc; /* should be mark */
87
+ enum method_optimized_type {
88
+ OPTIMIZED_METHOD_TYPE_SEND,
89
+ OPTIMIZED_METHOD_TYPE_CALL,
90
+
91
+ OPTIMIZED_METHOD_TYPE__MAX
92
+ } optimize_type;
93
+ struct rb_method_entry_struct *orig_me;
94
+ } body;
95
+ } rb_method_definition_t;
96
+
97
+ typedef struct rb_method_entry_struct {
98
+ rb_method_flag_t flag;
99
+ char mark;
100
+ rb_method_definition_t *def;
101
+ ID called_id;
102
+ VALUE klass; /* should be mark */
103
+ } rb_method_entry_t;
104
+
105
+ struct unlinked_method_entry_list_entry {
106
+ struct unlinked_method_entry_list_entry *next;
107
+ rb_method_entry_t *me;
108
+ };
109
+
110
+ #define UNDEFINED_METHOD_ENTRY_P(me) (!(me) || !(me)->def || (me)->def->type == VM_METHOD_TYPE_UNDEF)
111
+
112
+ void rb_add_method_cfunc(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc, rb_method_flag_t noex);
113
+ rb_method_entry_t *rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *option, rb_method_flag_t noex);
114
+ rb_method_entry_t *rb_method_entry(VALUE klass, ID id, VALUE *define_class_ptr);
115
+ rb_method_entry_t *rb_method_entry_at(VALUE obj, ID id);
116
+ void rb_add_refined_method_entry(VALUE refined_class, ID mid);
117
+ rb_method_entry_t *rb_resolve_refined_method(VALUE refinements,
118
+ const rb_method_entry_t *me,
119
+ VALUE *defined_class_ptr);
120
+ rb_method_entry_t *rb_method_entry_with_refinements(VALUE klass, ID id,
121
+ VALUE *defined_class_ptr);
122
+ rb_method_entry_t *rb_method_entry_without_refinements(VALUE klass, ID id,
123
+ VALUE *defined_class_ptr);
124
+
125
+ rb_method_entry_t *rb_method_entry_get_without_cache(VALUE klass, ID id, VALUE *define_class_ptr);
126
+ rb_method_entry_t *rb_method_entry_set(VALUE klass, ID mid, const rb_method_entry_t *, rb_method_flag_t noex);
127
+
128
+ int rb_method_entry_arity(const rb_method_entry_t *me);
129
+ int rb_method_entry_eq(const rb_method_entry_t *m1, const rb_method_entry_t *m2);
130
+ st_index_t rb_hash_method_entry(st_index_t hash, const rb_method_entry_t *me);
131
+
132
+ VALUE rb_method_entry_location(rb_method_entry_t *me);
133
+ VALUE rb_mod_method_location(VALUE mod, ID id);
134
+ VALUE rb_obj_method_location(VALUE obj, ID id);
135
+
136
+ void rb_mark_method_entry(const rb_method_entry_t *me);
137
+ void rb_free_method_entry(rb_method_entry_t *me);
138
+ void rb_sweep_method_entry(void *vm);
139
+ void rb_free_m_tbl_wrapper(struct method_table_wrapper *wrapper);
140
+
141
+ #endif /* METHOD_H */
data/lib/looksee.rb CHANGED
@@ -1,5 +1,2 @@
1
1
  require 'looksee/clean'
2
2
  require 'looksee/core_ext'
3
-
4
- # Ugh.
5
- Looksee::WirbleCompatibility.init
Binary file
@@ -1,10 +1,21 @@
1
1
  module Looksee
2
2
  module ObjectMixin
3
3
  #
4
- # Shortcut for Looksee[self, *args].
4
+ # Define #ls as a shortcut for Looksee[self, *args].
5
5
  #
6
- def ls(*args)
7
- Looksee[self, *args]
6
+ # This is defined via method_missing to be less intrusive. pry 0.10, e.g.,
7
+ # relies on Object#ls not existing.
8
+ #
9
+ def method_missing(name, *args)
10
+ if name == :ls
11
+ Looksee[self, *args]
12
+ else
13
+ super
14
+ end
15
+ end
16
+
17
+ def respond_to?(name, include_private=false)
18
+ super || name == :ls
8
19
  end
9
20
 
10
21
  def self.rename(name) # :nodoc:
@@ -1,5 +1,5 @@
1
1
  module Looksee
2
- VERSION = [2, 1, 1]
2
+ VERSION = [3, 0, 0]
3
3
 
4
4
  class << VERSION
5
5
  include Comparable
@@ -569,7 +569,7 @@ describe "Looksee.adapter" do
569
569
  end
570
570
 
571
571
  it "should return nil for primitive methods (MRI CBODY)" do
572
- method = Array.instance_method(:size)
572
+ method = String.instance_method(:bytesize)
573
573
  @adapter.source_location(method).should == nil
574
574
  end
575
575
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: looksee
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Ogata
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-13 00:00:00.000000000 Z
11
+ date: 2015-01-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -47,6 +47,8 @@ files:
47
47
  - ext/mri/2.0.0/method.h
48
48
  - ext/mri/2.1.0/internal.h
49
49
  - ext/mri/2.1.0/method.h
50
+ - ext/mri/2.2.0/internal.h
51
+ - ext/mri/2.2.0/method.h
50
52
  - ext/mri/env-1.8.h
51
53
  - ext/mri/eval_c-1.8.h
52
54
  - ext/mri/mri.c
@@ -66,7 +68,6 @@ files:
66
68
  - lib/looksee/lookup_path.rb
67
69
  - lib/looksee/rbx.bundle
68
70
  - lib/looksee/version.rb
69
- - lib/looksee/wirble_compatibility.rb
70
71
  - spec/looksee/adapter_spec.rb
71
72
  - spec/looksee/clean_spec.rb
72
73
  - spec/looksee/columnizer_spec.rb
@@ -74,7 +75,6 @@ files:
74
75
  - spec/looksee/editor_spec.rb
75
76
  - spec/looksee/inspector_spec.rb
76
77
  - spec/looksee/lookup_path_spec.rb
77
- - spec/looksee/wirble_compatibility_spec.rb
78
78
  - spec/spec_helper.rb
79
79
  - spec/support/core_ext.rb
80
80
  - spec/support/temporary_classes.rb
@@ -99,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  version: '0'
100
100
  requirements: []
101
101
  rubyforge_project:
102
- rubygems_version: 2.2.2
102
+ rubygems_version: 2.4.3
103
103
  signing_key:
104
104
  specification_version: 3
105
105
  summary: Supercharged method introspection in IRB.
@@ -111,7 +111,6 @@ test_files:
111
111
  - spec/looksee/editor_spec.rb
112
112
  - spec/looksee/inspector_spec.rb
113
113
  - spec/looksee/lookup_path_spec.rb
114
- - spec/looksee/wirble_compatibility_spec.rb
115
114
  - spec/spec_helper.rb
116
115
  - spec/support/core_ext.rb
117
116
  - spec/support/temporary_classes.rb
@@ -1,86 +0,0 @@
1
- module Looksee
2
- module WirbleCompatibility
3
- class << self
4
- def wirble_loaded?
5
- Object.const_defined?(:Wirble) &&
6
- Wirble.is_a?(Module) &&
7
- Wirble.respond_to?(:colorize)
8
- end
9
-
10
- def wirble_colorizing?
11
- require 'irb'
12
- IRB::Irb.method_defined?(:non_color_output_value)
13
- end
14
-
15
- def hook_into_wirble_load
16
- unless Object.const_defined?(:Wirble)
17
- Object.const_set :Wirble, Module.new
18
- end
19
- Wirble.send :extend, WirbleLoadHook
20
- end
21
-
22
- def hook_into_wirble_colorize
23
- class << Wirble
24
- def colorize_with_looksee(*args)
25
- # If this gets called twice, Wirble will fuck up the
26
- # aliases. Disable colorizing first to reset them.
27
- if WirbleCompatibility.hooked_into_irb_output_value?
28
- Wirble::Colorize.disable
29
- end
30
- colorize_without_looksee(*args)
31
- WirbleCompatibility.hook_into_irb_output_value
32
- end
33
-
34
- alias colorize_without_looksee colorize
35
- alias colorize colorize_with_looksee
36
- end
37
- end
38
-
39
- def hook_into_irb_output_value
40
- IRB::Irb.class_eval do
41
- def output_value_with_looksee
42
- case @context.last_value
43
- when Looksee::Inspector, Looksee::Help
44
- non_color_output_value
45
- else
46
- output_value_without_looksee
47
- end
48
- end
49
-
50
- alias output_value_without_looksee output_value
51
- alias output_value output_value_with_looksee
52
- end
53
- end
54
-
55
- def hooked_into_irb_output_value?
56
- IRB::Irb.method_defined?(:output_value_with_looksee)
57
- end
58
-
59
- def init
60
- #
61
- # How wirble is used:
62
- #
63
- # * Wirble is required/loaded. Defines Wirble module, with methods like Wirble.colorize.
64
- # * Wirble.init is called. Nothing interesting.
65
- # * Wirble.colorize is called. Hooks into IRB::Irb.output_value via an alias.
66
- #
67
- if !wirble_loaded?
68
- hook_into_wirble_load
69
- elsif !wirble_colorizing?
70
- hook_into_wirble_colorize
71
- else
72
- hook_into_irb_output_value
73
- end
74
- end
75
- end
76
-
77
- module WirbleLoadHook
78
- def singleton_method_added(name)
79
- if name == :colorize && !respond_to?(:colorize_with_looksee)
80
- WirbleCompatibility.hook_into_wirble_colorize
81
- end
82
- super
83
- end
84
- end
85
- end
86
- end
@@ -1,116 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Looksee::WirbleCompatibility do
4
- describe "when looksee is loaded" do
5
- #
6
- # Run the given ruby string, and return the standard output.
7
- #
8
- def init_irb_with(code)
9
- code = <<-EOS.demargin
10
- |#{code}
11
- |#{setup_code}
12
- |c.ls
13
- EOS
14
- code = code.chomp.gsub(/\n/, ';') # only print value of last line
15
- lib = File.expand_path('lib')
16
- # irb hangs when using readline without a tty
17
- output = IO.popen("bundle exec irb -f --noreadline --noprompt --noverbose -I#{lib}", 'r+') do |io|
18
- io.puts code
19
- io.flush
20
- io.close_write
21
- io.read
22
- end
23
- # Ruby 1.9.3 prints gc parameters if configured
24
- nil while output.gsub!(/^(?:malloc_limit|heap_min_slots|free_min)=.*\n/, '')
25
- # Ruby 1.9.2 prints an extra newline on exit.
26
- output.chomp! if RUBY_VERSION >= '1.9.2'
27
- output
28
- end
29
-
30
- def setup_code
31
- <<-EOS.demargin
32
- |C = Class.new
33
- |c = C.new
34
- |#{File.read('spec/support/test_adapter.rb')}
35
- |
36
- |Looksee.styles = Hash.new{'%s'}
37
- |Looksee.styles[:public] = "\\e[1;32m%s\\e[0m"
38
- |NATIVE_ADAPTER = Looksee.adapter
39
- |Looksee.adapter = TestAdapter.new
40
- |Looksee.adapter.ancestors[c] = [C]
41
- |Looksee.adapter.public_methods[C] = [:a]
42
- EOS
43
- end
44
-
45
- it "should work if wirble is not loaded" do
46
- output = init_irb_with(<<-EOS.demargin)
47
- |require 'irb'
48
- |require 'looksee'
49
- |require 'wirble'
50
- |Wirble.init
51
- |Wirble.colorize
52
- EOS
53
- output.should == <<-EOS.demargin
54
- |C
55
- | \e[1;32ma\e[0m
56
- EOS
57
- end
58
-
59
- it "should work if wirble is loaded, but not initialized" do
60
- output = init_irb_with(<<-EOS.demargin)
61
- |require 'irb'
62
- |require 'wirble'
63
- |require 'looksee'
64
- |Wirble.init
65
- |Wirble.colorize
66
- EOS
67
- output.should == <<-EOS.demargin
68
- |C
69
- | \e[1;32ma\e[0m
70
- EOS
71
- end
72
-
73
- it "should work if wirble is loaded and initialized, but colorizing is off" do
74
- output = init_irb_with(<<-EOS.demargin)
75
- |require 'irb'
76
- |require 'wirble'
77
- |Wirble.init
78
- |require 'looksee'
79
- |Wirble.colorize
80
- EOS
81
- output.should == <<-EOS.demargin
82
- |C
83
- | \e[1;32ma\e[0m
84
- EOS
85
- end
86
-
87
- it "should work if wirble is loaded, initialized, and colorizing is on" do
88
- output = init_irb_with(<<-EOS.demargin)
89
- |require 'irb'
90
- |require 'wirble'
91
- |Wirble.init
92
- |Wirble.colorize
93
- |require 'looksee'
94
- EOS
95
- output.should == <<-EOS.demargin
96
- |C
97
- | \e[1;32ma\e[0m
98
- EOS
99
- end
100
-
101
- it "should work if wirble colorizing is enabled twice" do
102
- output = init_irb_with(<<-EOS.demargin)
103
- |require 'irb'
104
- |require 'looksee'
105
- |require 'wirble'
106
- |Wirble.init
107
- |Wirble.colorize
108
- |Wirble.colorize
109
- EOS
110
- output.should == <<-EOS.demargin
111
- |C
112
- | \e[1;32ma\e[0m
113
- EOS
114
- end
115
- end
116
- end