Class: NaturalDSL::Stack

Inherits:
Array
  • Object
show all
Defined in:
lib/natural_dsl/stack.rb

Instance Method Summary collapse

Instance Method Details

#pop_if(expected_class, raise: true) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/natural_dsl/stack.rb', line 5

def pop_if(expected_class, raise: true)
  return pop if last.is_a?(expected_class)
  return unless raise

  error_reason = empty? ? "stack was empty" : "got #{last.class.name.demodulize}"
  raise "Expected #{expected_class.name.demodulize} but #{error_reason}"
end

#pop_if_keyword(keyword_type, raise: true) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/natural_dsl/stack.rb', line 13

def pop_if_keyword(keyword_type, raise: true)
  pop_if(Primitives::Keyword, raise: raise).tap do |keyword|
    next if raise == false && keyword.nil? || keyword.type == keyword_type
    push(keyword)

    next unless raise

    raise "Expected #{keyword_type} but got #{keyword.type}"
  end
end