class Ikra::AST::ClassDefNode

Attributes

instance_methods[R]
instance_variables[R]
name[R]
ruby_class[R]

Public Class Methods

new( name:, ruby_class:, instance_variables: [], instance_methods: [], class_variables: [], class_methods: []) click to toggle source

Class variables/methods are defined as instance variables/methods on the singleton class ClassDefNode

# File lib/ast/nodes.rb, line 53
def initialize(
        name:, 
        ruby_class:, 
        instance_variables: [], 
        instance_methods: [], 
        class_variables: [], 
        class_methods: [])
    @name = name
    @ruby_class = ruby_class
    @instance_variables = instance_variables
    @instance_methods = instance_methods
end

Public Instance Methods

==(other) click to toggle source
Calls superclass method Ikra::AST::Node#==
# File lib/ast/nodes.rb, line 100
def ==(other)
    return super(other) && 
        name == other.name &&
        ruby_class == other.ruby_class &&
        instance_variables == other.instance_variables &&
        instance_methods == other.instance_methods &&
        class_variables == other.class_variables &&
        class_methods == other.class_methods
end
accept(visitor) click to toggle source
# File lib/ast/visitor.rb, line 20
def accept(visitor)
    return visitor.visit_class_def_node(self)
end
add_instance_method(inst_meth) click to toggle source
# File lib/ast/nodes.rb, line 81
def add_instance_method(inst_meth)
    instance_methods.push(inst_meth)
    inst_meth.parent = self
end
add_instance_variable(inst_var) click to toggle source
# File lib/ast/nodes.rb, line 76
def add_instance_variable(inst_var)
    instance_variables.push(inst_var)
    inst_meth.parent = self
end
clone() click to toggle source
# File lib/ast/nodes.rb, line 66
def clone
    return ClassDefNode.new(
        name: @name,
        ruby_class: @ruby_class,
        instance_variables: @instance_variables.map do |i| i.clone end,
        instance_methods: @instance_methods.map do |i| i.clone end,
        class_variables: @class_variables.map do |c| c.clone end,
        class_methods: @class_methods.map do |c| c.clone end)
end
enclosing_class() click to toggle source
# File lib/ast/nodes.rb, line 96
def enclosing_class
    return self
end
get_type() click to toggle source
# File lib/types/inference/ast_inference.rb, line 42
def get_type
    return ruby_class.to_ikra_type
end
has_instance_method?(selector) click to toggle source
# File lib/ast/nodes.rb, line 86
def has_instance_method?(selector)
    return instance_method(selector) != nil
end
instance_method(selector) click to toggle source
# File lib/ast/nodes.rb, line 90
def instance_method(selector)
    return instance_methods.find do |meth|
        meth.name == selector
    end
end
to_s() click to toggle source
# File lib/ast/printer.rb, line 16
def to_s
    return "[ClassDefNode: #{name}; #{instance_variables.to_s}; #{instance_methods.to_s}]"
end