class Steep::TypeInference::ConstantEnv
def initialize(builder:, context:)
ConstantEnv receives an optional Names::Module, not a Namespace, because this is a simulation of Ruby.
def initialize(builder:, context:) @cache = {} @builder = builder @context = context end
def lookup(name)
def lookup(name) cache[name] ||= lookup0(name, namespace: namespace) end
def lookup0(name, namespace:)
def lookup0(name, namespace:) full_name = name.in_namespace(namespace) case when signatures.module_name?(full_name) AST::Types::Name::Module.new(name: full_name) when signatures.class_name?(full_name) AST::Types::Name::Class.new(name: full_name, constructor: true) when signatures.const_name?(full_name) builder.absolute_type(signatures.find_const(name, current_module: namespace).type, current: namespace) else unless namespace.empty? lookup0(name, namespace: namespace.parent) end end end
def namespace
def namespace @namespace ||= if context context.namespace.append(context.name) else AST::Namespace.root end end
def signatures
def signatures builder.signatures end