class Parser::StaticEnvironment

def declare(name)

def declare(name)
  @variables.add(name.to_sym)
  self
end

def declare_anonymous_blockarg

def declare_anonymous_blockarg
  declare(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE)
end

def declare_anonymous_kwrestarg

def declare_anonymous_kwrestarg
  declare(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE)
end

def declare_anonymous_restarg

def declare_anonymous_restarg
  declare(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE)
end

def declare_forward_args

def declare_forward_args
  declare(FORWARD_ARGS)
end

def declared?(name)

def declared?(name)
  @variables.include?(name.to_sym)
end

def declared_anonymous_blockarg?

def declared_anonymous_blockarg?
  declared?(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE) || declared?(ANONYMOUS_BLOCKARG_INHERITED)
end

def declared_anonymous_blockarg_in_current_scpe?

def declared_anonymous_blockarg_in_current_scpe?
  declared?(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE)
end

def declared_anonymous_kwrestarg?

def declared_anonymous_kwrestarg?
  declared?(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE) || declared?(ANONYMOUS_KWRESTARG_INHERITED)
end

def declared_anonymous_kwrestarg_in_current_scope?

def declared_anonymous_kwrestarg_in_current_scope?
  declared?(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE)
end

def declared_anonymous_restarg?

def declared_anonymous_restarg?
  declared?(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE) || declared?(ANONYMOUS_RESTARG_INHERITED)
end

def declared_anonymous_restarg_in_current_scope?

def declared_anonymous_restarg_in_current_scope?
  declared?(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE)
end

def declared_forward_args?

def declared_forward_args?
  declared?(FORWARD_ARGS)
end

def empty?

def empty?
  @stack.empty?
end

def extend_dynamic

def extend_dynamic
  @stack.push(@variables)
  @variables = @variables.dup
  if @variables.delete(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE)
    @variables.add(ANONYMOUS_BLOCKARG_INHERITED)
  end
  if @variables.delete(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE)
    @variables.add(ANONYMOUS_RESTARG_INHERITED)
  end
  if @variables.delete(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE)
    @variables.add(ANONYMOUS_KWRESTARG_INHERITED)
  end
  self
end

def extend_static

def extend_static
  @stack.push(@variables)
  @variables = Set[]
  self
end

def initialize

def initialize
  reset
end

def parent_has_anonymous_blockarg?

def parent_has_anonymous_blockarg?
  @stack.any? { |variables| variables.include?(ANONYMOUS_BLOCKARG_IN_CURRENT_SCOPE) }
end

def parent_has_anonymous_kwrestarg?

def parent_has_anonymous_kwrestarg?
  @stack.any? { |variables| variables.include?(ANONYMOUS_KWRESTARG_IN_CURRENT_SCOPE) }
end

def parent_has_anonymous_restarg?

def parent_has_anonymous_restarg?
  @stack.any? { |variables| variables.include?(ANONYMOUS_RESTARG_IN_CURRENT_SCOPE) }
end

def reset

def reset
  @variables = Set[]
  @stack     = []
end

def unextend

def unextend
  @variables = @stack.pop
  self
end