lib/parser/max_numparam_stack.rb
# frozen_string_literal: true
module Parser
# Holds p->max_numparam from parse.y
#
# @api private
class MaxNumparamStack
attr_reader :stack
ORDINARY_PARAMS = -1
def initialize
@stack = []
end
def empty?
@stack.size == 0
end
def has_ordinary_params!
set(ORDINARY_PARAMS)
end
def has_ordinary_params?
top == ORDINARY_PARAMS
end
def has_numparams?
top && top > 0
end
def register(numparam)
set( [top, numparam].max )
end
def top
@stack.last[:value]
end
def push(static:)
@stack.push(value: 0, static: static)
end
def pop
@stack.pop[:value]
end
private
def set(value)
@stack.last[:value] = value
end
end
end