12345678910111213141516171819202122232425262728293031323334353637 |
- class AST::Index
- attr_reader :object, :key
-
- def initialize(object, key)
- @object = object
- @key = key
- end
-
- def ==(other)
- other.is_a?(AST::Index) && other.object == @object && other.key == @key
- end
-
- def execute(env)
- object = @object.execute(env)
- key = @key.execute(env)
-
- if object.is_a?(Array)
- if key.is_a?(Float)
- if key.to_i == key && object.size > key
- object[key]
- elsif key.to_i != key
- raise "Array index requires integer key"
- elsif object.size <= key
- raise "Array index out of bounds"
- end
- else
- raise "Array index requires integer key"
- end
- elsif object.is_a?(Hash)
- if object.has_key?(key)
- object[key]
- else
- raise "Key #{key} does not exist on object"
- end
- end
- end
- end
|