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