class
Crystal::TypeDeclarationVisitor
Overview
In this pass we check type declarations like:
@x : Int32
@@x : Int32
$x : Int32
In this way we declare their type before the "main" code.
This allows to put "main" code before these declarations, so order matters less in the end.
This visitor also processes the following:
- C struct/union fields
- fun declarations
- alias declarations
We do this now because in a previous pass, TopLevelVisitor declared all types so now we can search them and always find them, not needing any kind of forward referencing.
Defined in:
compiler/crystal/semantic/type_declaration_visitor.crConstructors
Instance Method Summary
- #add_external(external : External)
- #class_vars : Hash(Crystal::ClassVarContainer, Hash(String, Crystal::TypeDeclarationProcessor::TypeDeclarationWithLocation))
- #declare_c_struct_or_union_field(type, field_name, var, location)
- #declare_c_struct_or_union_field(node)
- #declare_class_var(node, var, uninitialized)
- #declare_instance_var(owner, node, var)
- #declare_instance_var(node, var)
- #include_c_struct(node)
- #instance_vars : Hash(Crystal::Type, Hash(String, Crystal::TypeDeclarationProcessor::TypeDeclarationWithLocation))
- #visit(node : Alias)
- #visit(node : Include)
- #visit(node : LibDef)
- #visit(node : CStructOrUnionDef)
- #visit(node : ExternalVar)
- #visit(node : FunDef)
- #visit(node : TypeDeclaration)
- #visit(node : UninitializedVar)
- #visit(node : Assign)
- #visit(node : ProcLiteral)
Instance methods inherited from class Crystal::SemanticVisitor
check_allowed_in_lib(node, type = node.type.instance_type)
check_allowed_in_lib,
check_class_var_annotations
check_class_var_annotations,
check_declare_var_type(node, declared_type, variable_kind)
check_declare_var_type,
check_outside_exp(node, op)
check_outside_exp,
class_var_owner(node)
class_var_owner,
current_type : ModuleType
current_type,
current_type=(current_type : ModuleType)
current_type=,
end_visit_any(node)
end_visit_any,
eval_macro(node, &)
eval_macro,
expand_inline_macro(node, mode = nil, accept = true)
expand_inline_macro,
expand_macro(node, raise_on_missing_const = true, first_pass = false, accept = true)expand_macro(the_macro, node, mode = nil, *, visibility : Visibility, accept = true, &) expand_macro, expand_macro_argument(node, expansion_scope) expand_macro_argument, expand_macro_arguments(call, expansion_scope) expand_macro_arguments, free_vars : Hash(String, TypeVar) | Nil free_vars, inside_exp? inside_exp?, interpret_enum_value(node : ASTNode, target_type : IntegerType | Nil = nil) interpret_enum_value, lookup_annotation(ann) lookup_annotation, lookup_type(node : ASTNode, free_vars = nil, find_root_generic_type_parameters = true) lookup_type, nesting_exp?(node) nesting_exp?, process_annotations(annotations, &) process_annotations, program : Program program, pushing_type(type : ModuleType, &) pushing_type, read_annotations read_annotations, scope : Type scope, scope=(scope : Type)
scope=(scope : Crystal::Type | Nil) scope=, scope? : Type | Nil scope?, validate_annotation(annotation_type, ann) validate_annotation, vars : MetaVars vars, vars=(vars : MetaVars) vars=, visit(node : Require)
visit(node : ClassDef)
visit(node : ModuleDef)
visit(node : AnnotationDef)
visit(node : EnumDef)
visit(node : LibDef)
visit(node : Include)
visit(node : Extend)
visit(node : Alias)
visit(node : Def)
visit(node : Macro)
visit(node : Annotation)
visit(node : Call)
visit(node : MacroExpression)
visit(node : MacroIf)
visit(node : MacroFor)
visit(node : MacroVerbatim)
visit(node : ExternalVar | Path | Generic | ProcNotation | Union | Metaclass | Self | TypeOf)
visit(node : ASTNode) visit, visit_any(node) visit_any
Constructor methods inherited from class Crystal::SemanticVisitor
new(program : Crystal::Program, vars : Hash(String, Crystal::MetaVar) = MetaVars.new)
new
Instance methods inherited from class Crystal::Visitor
accept(node)
accept,
end_visit(node)
end_visit,
end_visit_any(node)
end_visit_any,
visit_any(node)
visit_any
Instance methods inherited from class Reference
==(other : self)==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, initialize initialize, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s
Constructor methods inherited from class Reference
new
new,
unsafe_construct(address : Pointer, *args, **opts) : self
unsafe_construct
Class methods inherited from class Reference
pre_initialize(address : Pointer)
pre_initialize
Instance methods inherited from class Object
! : Bool
!,
!=(other)
!=,
!~(other)
!~,
==(other)
==,
===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io : String | IO, root : String)from_json(string_or_io : String | IO) from_json, from_yaml(string_or_io : String | IO) from_yaml
Macros inherited from class Object
class_getter(*names, &block)
class_getter,
class_getter!(*names)
class_getter!,
class_getter?(*names, &block)
class_getter?,
class_property(*names, &block)
class_property,
class_property!(*names)
class_property!,
class_property?(*names, &block)
class_property?,
class_setter(*names)
class_setter,
def_clone
def_clone,
def_equals(*fields)
def_equals,
def_equals_and_hash(*fields)
def_equals_and_hash,
def_hash(*fields)
def_hash,
delegate(*methods, to object)
delegate,
forward_missing_to(delegate)
forward_missing_to,
getter(*names, &block)
getter,
getter!(*names)
getter!,
getter?(*names, &block)
getter?,
property(*names, &block)
property,
property!(*names)
property!,
property?(*names, &block)
property?,
setter(*names)
setter
Constructor Detail
Instance Method Detail
def class_vars : Hash(Crystal::ClassVarContainer, Hash(String, Crystal::TypeDeclarationProcessor::TypeDeclarationWithLocation))
#
def instance_vars : Hash(Crystal::Type, Hash(String, Crystal::TypeDeclarationProcessor::TypeDeclarationWithLocation))
#