module Bpl::AST::Scope
Constants
- KIND
Public Class Methods
notify(msg, *args)
click to toggle source
# File lib/bpl/ast/scope.rb, line 21 def self.notify(msg, *args) case msg when :link parent, child = args if child.is_a?(Declaration) fail "declaration parent #{parent.class} not a scope" \ unless parent.respond_to?(:lookup_table) child.names.each do |name| parent.lookup_table(KIND[child.class],name) << child end end when :unlink parent, child = args if child.is_a?(Declaration) fail "declaration parent #{parent.class} not a scope" \ unless parent.respond_to?(:lookup_table) child.names.each do |name| parent.lookup_table(KIND[child.class],name).delete(child) end end end end
Public Instance Methods
lookup_table(kind,name)
click to toggle source
# File lib/bpl/ast/scope.rb, line 47 def lookup_table(kind,name) @lookup_table ||= {} @lookup_table[kind] ||= {} @lookup_table[kind][name] ||= Set.new end
resolve(id)
click to toggle source
# File lib/bpl/ast/scope.rb, line 53 def resolve(id) lookup_table(KIND[id.class],id.name).first end