Class: IRB::Frame

Inherits:
Object show all
Defined in:
lib/irb/frame.rb

Defined Under Namespace

Classes: FrameOverflow, FrameUnderflow

Constant Summary collapse

INIT_STACK_TIMES =

Default number of stack frames

3
CALL_STACK_OFFSET =

Default number of frames offset

3

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFrame

Creates a new stack frame



26
27
28
# File 'lib/irb/frame.rb', line 26

def initialize
  @frames = [TOPLEVEL_BINDING] * INIT_STACK_TIMES
end

Class Method Details

.bottom(n = 0) ⇒ Object

Convenience method for Frame#bottom



61
62
63
# File 'lib/irb/frame.rb', line 61

def Frame.bottom(n = 0)
  @backtrace.bottom(n)
end

.senderObject

Returns the binding context of the caller from the last frame initialized



71
72
73
# File 'lib/irb/frame.rb', line 71

def Frame.sender
  eval "self", @backtrace.top
end

.top(n = 0) ⇒ Object

Convenience method for Frame#top



66
67
68
# File 'lib/irb/frame.rb', line 66

def Frame.top(n = 0)
  @backtrace.top(n)
end

Instance Method Details

#bottom(n = 0) ⇒ Object

Returns the n number of frames on the call stack from the first frame initialized.

Raises FrameOverflow if there are no frames in the given stack range.



54
55
56
57
58
# File 'lib/irb/frame.rb', line 54

def bottom(n = 0)
  bind = @frames[n]
  fail FrameOverflow unless bind
  bind
end

#top(n = 0) ⇒ Object

Returns the n number of frames on the call stack from the last frame initialized.

Raises FrameUnderflow if there are no frames in the given stack range.



44
45
46
47
48
# File 'lib/irb/frame.rb', line 44

def top(n = 0)
  bind = @frames[-(n + CALL_STACK_OFFSET)]
  fail FrameUnderflow unless bind
  bind
end

#trace_func(event, file, line, id, binding) ⇒ Object

Used by Kernel#set_trace_func to register each event in the call stack



31
32
33
34
35
36
37
38
# File 'lib/irb/frame.rb', line 31

def trace_func(event, file, line, id, binding)
  case event
  when 'call', 'class'
    @frames.push binding
  when 'return', 'end'
    @frames.pop
  end
end