class
Crystal::Macros::TypeNode
Overview
Represents a type in the program, likeInt32 orString.
Defined in:
compiler/crystal/macros.crInstance Method Summary
-
#<(other : TypeNode) : BoolLiteral
Returns
trueifother is an ancestor ofself. -
#<=(other : TypeNode) : BoolLiteral
Returns
trueifselfis the same asother or ifother is an ancestor ofself. -
#>(other : TypeNode) : BoolLiteral
Returns
trueifselfis an ancestor ofother. -
#>=(other : TypeNode) : BoolLiteral
Returns
trueifother is the same asselfor ifselfis an ancestor ofother. -
#[](key : SymbolLiteral | MacroId) : TypeNode | NilLiteral
Returns the type for the given key in this named tuple type.
-
#abstract? : BoolLiteral
Returns
trueifselfis abstract, otherwisefalse. -
#all_subclasses : ArrayLiteral(TypeNode)
Returns all subclasses of this type.
-
#ancestors : ArrayLiteral(TypeNode)
Returns all ancestors of this type.
-
#annotation(type : TypeNode) : Annotation | NilLiteral
Returns the last
Annotationwith the giventypeattached to this type orNilLiteralif there are none. -
#annotations(type : TypeNode) : ArrayLiteral(Annotation)
Returns an array of annotations with the given
typeattached to this type, or an emptyArrayLiteralif there are none. -
#annotations : ArrayLiteral(Annotation)
Returns an array of all annotations attached to this type, or an empty
ArrayLiteralif there are none. -
#class : TypeNode
Returns the class of this type.
-
#class? : BoolLiteral
Returns
trueifselfis a#class, otherwisefalse. -
#class_vars : ArrayLiteral(MetaVar)
Returns the class variables of this type.
-
#constant(name : StringLiteral | SymbolLiteral | MacroId) : ASTNode
Returns a constant defined in this type.
-
#constants : ArrayLiteral(MacroId)
Returns the constants and types defined by this type.
-
#has_constant?(name : StringLiteral | SymbolLiteral) : BoolLiteral
Returns
trueif this type has a constant. -
#has_inner_pointers? : BoolLiteral
Returns whether
selfcontains any inner pointers. -
#has_method?(name : StringLiteral | SymbolLiteral) : BoolLiteral
Returns
trueif this type has a method. -
#includers : ArrayLiteral(TypeNode)
Returns all the types
selfis directly included in. -
#instance : TypeNode
Returns the instance type of this type, if it's a class type, or
selfotherwise. -
#instance_vars : ArrayLiteral(MetaVar)
Returns the instance variables of this type.
-
#keys : ArrayLiteral(MacroId)
Returns the keys in this named tuple type.
-
#methods : ArrayLiteral(Def)
Returns the instance methods defined by this type, without including inherited methods.
-
#module? : BoolLiteral
Returns
trueifselfis amodule, otherwisefalse. -
#name(*, generic_args : BoolLiteral = true) : MacroId
Returns the fully qualified name of this type.
-
#nilable? : BoolLiteral
Returns
trueifnilis an instance ofself, otherwisefalse. -
#overrides?(type : TypeNode, method : StringLiteral | SymbolLiteral | MacroId) : BoolLiteral
Determines if
selfoverrides any method namedmethod from typetype. -
#private? : BoolLiteral
Return
trueifselfis private andfalseotherwise. -
#public? : BoolLiteral
Return
trueifselfis public andfalseotherwise. -
#resolve : TypeNode
Returns
self. -
#resolve? : TypeNode
Returns
self. -
#size : NumberLiteral
Returns the number of elements in this tuple type or tuple metaclass type.
-
#struct? : BoolLiteral
Returns
trueifselfis astruct, otherwisefalse. -
#subclasses : ArrayLiteral(TypeNode)
Returns the direct subclasses of this type.
-
#superclass : TypeNode | NilLiteral
Returns the direct superclass of this type.
-
#type_vars : ArrayLiteral(TypeNode)
Returns the type variables of the generic type.
-
#union? : BoolLiteral
Returns
trueifselfis a union type, otherwisefalse. -
#union_types : ArrayLiteral(TypeNode)
Returns the types forming a union type, if this is a union type.
-
#visibility : SymbolLiteral
Returns visibility of
selfas:publicor:private?
Instance methods inherited from class Crystal::Macros::ASTNode
!=(other : ASTNode) : BoolLiteral
!=,
==(other : ASTNode) : BoolLiteral
==,
class_name : StringLiteral
class_name,
column_number : StringLiteral | NilLiteral
column_number,
doc : StringLiteral
doc,
doc_comment : MacroId
doc_comment,
end_column_number : StringLiteral | NilLiteral
end_column_number,
end_line_number : StringLiteral | NilLiteral
end_line_number,
filename : StringLiteral | NilLiteral
filename,
id : MacroId
id,
is_a?(type : TypeNode) : BoolLiteral
is_a?,
line_number : StringLiteral | NilLiteral
line_number,
nil? : BoolLiteral
nil?,
raise(message) : NoReturn
raise,
stringify : StringLiteral
stringify,
symbolize : SymbolLiteral
symbolize,
warning(message : StringLiteral) : NilLiteral
warning
Instance Method Detail
Returnstrue ifself is the same asother or if
other is an ancestor ofself.
Returnstrue ifother is the same asself or if
self is an ancestor ofother.
Returns the type for the given key in this named tuple type. Gives a compile error if this is not a named tuple type.
Returnstrue ifself is abstract, otherwisefalse.
module One; end
abstract struct Two; end
class Three; end
abstract class Four; end
{{One.abstract?}} # => false
{{Two.abstract?}} # => true
{{Three.abstract?}} # => false
{{Four.abstract?}} # => true
Returns an array of annotations with the giventype
attached to this type, or an emptyArrayLiteral if there are none.
Returns an array of all annotations attached to this
type, or an emptyArrayLiteral if there are none.
Returns the class of this type. With this you can, for example, obtain class
methods by invokingtype.class.methods.
Returnstrue ifself is a#class, otherwisefalse.
module One; end
class Two; end
struct Three; end
{{One.class?}} # => false
{{Two.class?}} # => true
{{Three.class?}} # => false
Returns a constant defined in this type.
If the constant is a constant (likeA = 1), then its value
as anASTNode is returned. If the constant is a type, the
type is returned as aTypeNode. Otherwise,NilLiteral is returned.
Returnstrue if this type has a constant. For exampleDEFAULT_OPTIONS
(the name you pass to this method is"DEFAULT_OPTIONS" or:DEFAULT_OPTIONS
in this cases).
Returns whetherself contains any inner pointers.
Primitive types, exceptVoid, are expected to not contain inner pointers.
Proc andPointer contain inner pointers.
Unions, structs and collection types (tuples, static arrays)
have inner pointers if any of their contained types has inner pointers.
All other types, including classes, are expected to contain inner pointers.
Types that do not have inner pointers may opt to use atomic allocations,
i.e.GC.malloc_atomic rather thanGC.malloc. The compiler ensures
that, for any typeT:
Pointer(T).mallocis atomic if and only ifThas no inner pointers;T.allocateis atomic if and only ifTis a reference type andReferenceStorage(T)has no inner pointers.
NOTE Like#instance_vars this method must be called from within a method. The result may be incorrect when used in top-level code.
Returnstrue if this type has a method. For exampledefault_options
(the name you pass to this method is"default_options" or:default_options
in this cases).
Returns the instance type of this type, if it's a class type,
orself otherwise. This is the opposite of#class.
Returns the instance variables of this type. Can only be called from within methods (not top-level code), otherwise will return an empty list.
Returns the keys in this named tuple type. Gives a compile error if this is not a named tuple type.
Returns the instance methods defined by this type, without including inherited methods.
Returnstrue ifself is amodule, otherwisefalse.
module One; end
class Two; end
struct Three; end
{{One.module?}} # => true
{{Two.module?}} # => false
{{Three.module?}} # => false
Returns the fully qualified name of this type. Optionally withoutgeneric_args ifself is a generic type; see#type_vars.
class Foo(T); end
module Bar::Baz; end
{{Bar::Baz.name}} # => Bar::Baz
{{Foo.name}} # => Foo(T)
{{Foo.name(generic_args: false)}} # => Foo
Returnstrue ifnil is an instance ofself, otherwisefalse.
{{String.nilable?}} # => false
{{String?.nilable?}} # => true
{{Union(String, Bool, Nil).nilable?}} # => true
{{NoReturn.nilable?}} # => false
{{Value.nilable?}} # => true
Determines ifself overrides any method namedmethod from typetype.
class Foo
def one
1
end
def two
2
end
end
class Bar < Foo
def one
11
end
end
{{ Bar.overrides?(Foo, "one") }} # => true
{{ Bar.overrides?(Foo, "two") }} # => false
Returnsself. This method exists so you can safely call#resolve on a node and resolve it to a type, even if it's a type already.
Returnsself. This method exists so you can safely call#resolve on a node and resolve it to a type, even if it's a type already.
Returns the number of elements in this tuple type or tuple metaclass type. Gives a compile error if this is not one of those types.
Returnstrue ifself is astruct, otherwisefalse.
module One; end
class Two; end
struct Three; end
{{One.struct?}} # => false
{{Two.struct?}} # => false
{{Three.struct?}} # => true
Returns the type variables of the generic type. If the type is not generic, an empty array is returned.
Returnstrue ifself is a union type, otherwisefalse.
See also:#union_types.
{{String.union?}} # => false
{{String?.union?}} # => true
{{Union(String, Bool).union?}} # => true
Returns the types forming a union type, if this is a union type.
Otherwise returns this single type inside an array literal (so you can safely call#union_types on any type and treat all types uniformly).
See also:#union?.