Class: Steep::AST::Builtin::Type

Inherits:
Object
  • Object
show all
Defined in:
lib/steep/ast/builtin.rb

Constant Summary collapse

NONE =
::Object.new

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(module_name, arity: 0) ⇒ Type

Returns a new instance of Type.



8
9
10
11
# File 'lib/steep/ast/builtin.rb', line 8

def initialize(module_name, arity: 0)
  @module_name = Names::Module.parse(module_name)
  @arity = arity
end

Instance Attribute Details

#arityObject (readonly)

Returns the value of attribute arity.



6
7
8
# File 'lib/steep/ast/builtin.rb', line 6

def arity
  @arity
end

#module_nameObject (readonly)

Returns the value of attribute module_name.



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

def module_name
  @module_name
end

Instance Method Details

#class_type(constructor: nil) ⇒ Object



18
19
20
# File 'lib/steep/ast/builtin.rb', line 18

def class_type(constructor: nil)
  Types::Name::Class.new(name: module_name, constructor: constructor)
end

#class_type?(type, constructor: NONE) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
45
46
47
48
49
50
51
# File 'lib/steep/ast/builtin.rb', line 41

def class_type?(type, constructor: NONE)
  if type.is_a?(Types::Name::Class)
    unless constructor.equal?(NONE)
      type.name == module_name && type.name.constructor == constructor
    else
      type.name == module_name
    end
  else
    false
  end
end

#instance_type(*args) ⇒ Object



13
14
15
16
# File 'lib/steep/ast/builtin.rb', line 13

def instance_type(*args)
  arity == args.size or raise "Mulformed instance type: name=#{module_name}, args=#{args}"
  Types::Name::Instance.new(name: module_name, args: args)
end

#instance_type?(type, args: nil) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/steep/ast/builtin.rb', line 26

def instance_type?(type, args: nil)
  if type.is_a?(Types::Name::Instance)
    if args
      arity == args.size or raise "Mulformed instance type: name=#{module_name}, args=#{args}"
      type.name == module_name && type.args == args
    else
      type.name == module_name && type.args.size == arity
    end
  else
    false
  end
end

#module_typeObject



22
23
24
# File 'lib/steep/ast/builtin.rb', line 22

def module_type
  Types::Name::Module.new(name: module_name)
end

#module_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
56
57
58
59
# File 'lib/steep/ast/builtin.rb', line 53

def module_type?(type)
  if type.is_a?(Types::Name::Module)
    type.name == module_name
  else
    false
  end
end