Class: Steep::AST::Types::Var

Inherits:
Object
  • Object
show all
Includes:
Helper::NoChild
Defined in:
lib/steep/ast/types/var.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper::NoChild

#each_child, #map_type

Constructor Details

#initialize(name:) ⇒ Var

Returns a new instance of Var.



7
8
9
# File 'lib/steep/ast/types/var.rb', line 7

def initialize(name:)
  @name = name
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/steep/ast/types/var.rb', line 5

def name
  @name
end

Class Method Details

.fresh(name, location: nil) ⇒ Object



33
34
35
# File 'lib/steep/ast/types/var.rb', line 33

def self.fresh(name, location: nil)
  new(name: fresh_name(name))
end

.fresh_name(name) ⇒ Object



22
23
24
25
26
27
28
29
30
31
# File 'lib/steep/ast/types/var.rb', line 22

def self.fresh_name(name)
  @mutex ||= Thread::Mutex.new

  @mutex.synchronize do
    @max ||= 0
    @max += 1

    :"#{name}(#{@max})"
  end
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



11
12
13
14
# File 'lib/steep/ast/types/var.rb', line 11

def ==(other)
  other.is_a?(Var) &&
    other.name == name
end

#free_variablesObject



49
50
51
# File 'lib/steep/ast/types/var.rb', line 49

def free_variables()
  @fvs ||= Set.new([name])
end

#hashObject



16
17
18
# File 'lib/steep/ast/types/var.rb', line 16

def hash
  self.class.hash ^ name.hash
end

#levelObject



55
56
57
# File 'lib/steep/ast/types/var.rb', line 55

def level
  [0]
end

#subst(s) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/steep/ast/types/var.rb', line 41

def subst(s)
  if s.key?(name)
    s[name]
  else
    self
  end
end

#to_sObject



37
38
39
# File 'lib/steep/ast/types/var.rb', line 37

def to_s
  name.to_s
end

#update(name: self.name) ⇒ Object



59
60
61
# File 'lib/steep/ast/types/var.rb', line 59

def update(name: self.name)
  self.class.new(name: name)
end