class Riml::Compiler::ScopedVisitor

common visiting methods for nodes that are scope modified with variable name prefixes

Private Instance Methods

scope_modifier_for_node(node) click to toggle source
# File lib/riml/compiler.rb, line 279
def scope_modifier_for_node(node)
  if node.respond_to?(:name) && node.name == 'self'
    return node.scope_modifier = ''
  end
  if node.scope && node.scope.function?
    if DefNode === node && !node.defined_on_dictionary?
      return "s:"
    elsif GetVariableNode === node &&
          node.scope.function.shadowed_argument?(node.full_name)
      return ""
    elsif node.respond_to?(:name) && node.scope.argument_variable_names.include?(node.name) &&
          !(AssignNode === node.parent && node.parent.lhs == node)
      return "a:"
    elsif !node.is_a?(CallNode)
      return ""
    end
  end
  return "" if node.respond_to?(:autoload?) && node.autoload?
  "s:"
end
set_modifier(node) click to toggle source
# File lib/riml/compiler.rb, line 269
def set_modifier(node)
  # Ex: n:myVariable = "override riml default scoping" compiles into:
  #       myVariable = "override riml default scoping"
  if node.scope_modifier == "n:"
    node.scope_modifier = ""
  end
  return node.scope_modifier if node.scope_modifier
  node.scope_modifier = scope_modifier_for_node(node)
end