Class: RubyParserStuff::Environment

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_parser_extras.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dyn = false) ⇒ Environment

Returns a new instance of Environment.



1189
1190
1191
1192
1193
1194
# File 'lib/ruby_parser_extras.rb', line 1189

def initialize dyn = false
  @dyn = []
  @env = []
  @use = []
  self.reset
end

Instance Attribute Details

#dynObject (readonly)

Returns the value of attribute dyn.



1154
1155
1156
# File 'lib/ruby_parser_extras.rb', line 1154

def dyn
  @dyn
end

#envObject (readonly)

Returns the value of attribute env.



1154
1155
1156
# File 'lib/ruby_parser_extras.rb', line 1154

def env
  @env
end

Instance Method Details

#[](k) ⇒ Object



1156
1157
1158
# File 'lib/ruby_parser_extras.rb', line 1156

def [] k
  self.all[k]
end

#[]=(k, v) ⇒ Object



1160
1161
1162
1163
# File 'lib/ruby_parser_extras.rb', line 1160

def []= k, v
  raise "no" if v == true
  self.current[k] = v
end

#allObject



1165
1166
1167
1168
# File 'lib/ruby_parser_extras.rb', line 1165

def all
  idx = @dyn.index(false) || 0
  @env[0..idx].reverse.inject { |env, scope| env.merge scope }
end

#currentObject



1170
1171
1172
# File 'lib/ruby_parser_extras.rb', line 1170

def current
  @env.first
end

#dynamicObject



1174
1175
1176
1177
# File 'lib/ruby_parser_extras.rb', line 1174

def dynamic
  idx = @dyn.index false
  @env[0...idx].reverse.inject { |env, scope| env.merge scope } || {}
end

#dynamic?Boolean

Returns:

  • (Boolean)


1179
1180
1181
# File 'lib/ruby_parser_extras.rb', line 1179

def dynamic?
  @dyn[0] != false
end

#extend(dyn = false) ⇒ Object



1183
1184
1185
1186
1187
# File 'lib/ruby_parser_extras.rb', line 1183

def extend dyn = false
  @dyn.unshift dyn
  @env.unshift({})
  @use.unshift({})
end

#resetObject



1196
1197
1198
1199
1200
1201
# File 'lib/ruby_parser_extras.rb', line 1196

def reset
  @dyn.clear
  @env.clear
  @use.clear
  self.extend
end

#unextendObject



1203
1204
1205
1206
1207
1208
# File 'lib/ruby_parser_extras.rb', line 1203

def unextend
  @dyn.shift
  @env.shift
  @use.shift
  raise "You went too far unextending env" if @env.empty?
end

#use(id) ⇒ Object



1210
1211
1212
1213
1214
1215
1216
# File 'lib/ruby_parser_extras.rb', line 1210

def use id
  @env.each_with_index do |env, i|
    if env[id] then
      @use[i][id] = true
    end
  end
end

#used?(id) ⇒ Boolean

Returns:

  • (Boolean)


1218
1219
1220
1221
1222
# File 'lib/ruby_parser_extras.rb', line 1218

def used? id
  idx = @dyn.index false # REFACTOR
  u = @use[0...idx].reverse.inject { |env, scope| env.merge scope } || {}
  u[id]
end