Module: Postsvg::Visitors::PsVisitor::Stack
- Included in:
- Postsvg::Visitors::PsVisitor
- Defined in:
- lib/postsvg/visitors/ps_visitor/stack.rb
Overview
Stack manipulation operator handlers.
Instance Method Summary collapse
- #visit_clear(_op, _ctx) ⇒ Object
- #visit_count(_op, _ctx) ⇒ Object
- #visit_dup(_op, _ctx) ⇒ Object
- #visit_exch(_op, _ctx) ⇒ Object
- #visit_index(op, _ctx) ⇒ Object
- #visit_pop(_op, _ctx) ⇒ Object
- #visit_roll(op, _ctx) ⇒ Object
Instance Method Details
#visit_clear(_op, _ctx) ⇒ Object
37 38 39 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 37 def visit_clear(_op, _ctx) @stack = [] end |
#visit_count(_op, _ctx) ⇒ Object
41 42 43 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 41 def visit_count(_op, _ctx) @stack << @stack.length end |
#visit_dup(_op, _ctx) ⇒ Object
19 20 21 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 19 def visit_dup(_op, _ctx) @stack << @stack.last end |
#visit_exch(_op, _ctx) ⇒ Object
12 13 14 15 16 17 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 12 def visit_exch(_op, _ctx) b = pop_value a = pop_value @stack << b @stack << a end |
#visit_index(op, _ctx) ⇒ Object
23 24 25 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 23 def visit_index(op, _ctx) @stack << @stack[-1 - op.index] end |
#visit_pop(_op, _ctx) ⇒ Object
8 9 10 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 8 def visit_pop(_op, _ctx) pop_value end |
#visit_roll(op, _ctx) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/postsvg/visitors/ps_visitor/stack.rb', line 27 def visit_roll(op, _ctx) count = op.count positions = op.positions return if count.abs > @stack.length slice = @stack.pop(count) rotated = positions.negative? ? slice.rotate(positions) : slice.rotate(-positions) rotated.each { |v| @stack << v } end |