Class: Environment
- Inherits:
-
Object
- Object
- Environment
- Defined in:
- lib/ruby_parser_extras.rb
Instance Attribute Summary collapse
-
#dyn ⇒ Object
readonly
Returns the value of attribute dyn.
-
#env ⇒ Object
readonly
Returns the value of attribute env.
Instance Method Summary collapse
- #[](k) ⇒ Object
- #[]=(k, v) ⇒ Object
- #all ⇒ Object
- #current ⇒ Object
- #dynamic ⇒ Object
- #dynamic? ⇒ Boolean
- #extend(dyn = false) ⇒ Object
-
#initialize(dyn = false) ⇒ Environment
constructor
A new instance of Environment.
- #reset ⇒ Object
- #unextend ⇒ Object
- #use(id) ⇒ Object
- #used?(id) ⇒ Boolean
Constructor Details
#initialize(dyn = false) ⇒ Environment
Returns a new instance of Environment.
930 931 932 933 934 935 |
# File 'lib/ruby_parser_extras.rb', line 930 def initialize dyn = false @dyn = [] @env = [] @use = [] self.reset end |
Instance Attribute Details
#dyn ⇒ Object (readonly)
Returns the value of attribute dyn.
895 896 897 |
# File 'lib/ruby_parser_extras.rb', line 895 def dyn @dyn end |
#env ⇒ Object (readonly)
Returns the value of attribute env.
895 896 897 |
# File 'lib/ruby_parser_extras.rb', line 895 def env @env end |
Instance Method Details
#[](k) ⇒ Object
897 898 899 |
# File 'lib/ruby_parser_extras.rb', line 897 def [] k self.all[k] end |
#[]=(k, v) ⇒ Object
901 902 903 904 |
# File 'lib/ruby_parser_extras.rb', line 901 def []= k, v raise "no" if v == true self.current[k] = v end |
#all ⇒ Object
906 907 908 909 |
# File 'lib/ruby_parser_extras.rb', line 906 def all idx = @dyn.index(false) || 0 @env[0..idx].reverse.inject { |env, scope| env.merge scope } end |
#current ⇒ Object
911 912 913 |
# File 'lib/ruby_parser_extras.rb', line 911 def current @env.first end |
#dynamic ⇒ Object
915 916 917 918 |
# File 'lib/ruby_parser_extras.rb', line 915 def dynamic idx = @dyn.index false @env[0...idx].reverse.inject { |env, scope| env.merge scope } || {} end |
#dynamic? ⇒ Boolean
920 921 922 |
# File 'lib/ruby_parser_extras.rb', line 920 def dynamic? @dyn[0] != false end |
#extend(dyn = false) ⇒ Object
924 925 926 927 928 |
# File 'lib/ruby_parser_extras.rb', line 924 def extend dyn = false @dyn.unshift dyn @env.unshift({}) @use.unshift({}) end |
#reset ⇒ Object
937 938 939 940 941 942 |
# File 'lib/ruby_parser_extras.rb', line 937 def reset @dyn.clear @env.clear @use.clear self.extend end |
#unextend ⇒ Object
944 945 946 947 948 949 |
# File 'lib/ruby_parser_extras.rb', line 944 def unextend @dyn.shift @env.shift @use.shift raise "You went too far unextending env" if @env.empty? end |
#use(id) ⇒ Object
951 952 953 954 955 956 957 |
# File 'lib/ruby_parser_extras.rb', line 951 def use id @env.each_with_index do |env, i| if env[id] then @use[i][id] = true end end end |
#used?(id) ⇒ Boolean
959 960 961 962 963 |
# File 'lib/ruby_parser_extras.rb', line 959 def used? id idx = @dyn.index false # REFACTOR u = @use[0...idx].reverse.inject { |env, scope| env.merge scope } || {} u[id] end |