reject programs that use symbols that have not been defined or imported
[voodoo-lang.git] / lib / voodoo / symbol_tracker.rb
blobb3398fd7ea32d01e97e2ec7e9054949a3b3f6d49
1 require 'set'
3 module Voodoo
4   # Class to keep track of defined and used symbols.
5   class SymbolTracker
6     def initialize
7       @defined = Set.new
8       @used = Set.new
9     end
11     def define *symbols
12       @defined.merge symbols
13     end
15     def use *symbols
16       @used.merge symbols
17     end
19     def defined_but_unused_symbols
20       @defined - @used
21     end
23     def defined_symbols
24       @defined
25     end
27     def used_symbols
28       @used
29     end
31     def used_but_undefined_symbols
32       @used - @defined
33     end
34   end
35 end