# This file is a part of Julia. License is MIT: http://julialang.org/license # commented-out definitions are implemented in C #abstract Any <: Any #abstract Type{T} #abstract Vararg{T} #Tuple = (Any...) #type Symbol # #opaque #end #type TypeName # name::Symbol #end #type DataType <: Type # name::TypeName # super::Type # parameters::Tuple # names::Tuple # types::Tuple # ctor # instance # size::Int32 # abstract::Bool # mutable::Bool # pointerfree::Bool #end #type Union <: Type # types::Tuple #end #type TypeVar # name::Symbol # lb::Type # ub::Type #end #type TypeConstructor # parameters::Tuple # body #end #immutable Void #end #const nothing = Void() #abstract AbstractArray{T,N} #abstract DenseArray{T,N} <: AbstractArray{T,N} #type Array{T,N} <: DenseArray{T,N} #end #type Module # name::Symbol #end #type LambdaStaticData # ast::Expr # sparams::Tuple # tfunc # name::Symbol # specializations # inferred # file::Symbol # line::Int # module::Module #end #type Box # contents::Any #end #abstract Ref{T} #bitstype {32|64} Ptr{T} <: Ref{T} # types for the front end #type Expr # head::Symbol # args::Array{Any,1} # typ::Any #end #immutable LineNumberNode # file::Symbol # line::Int #end #immutable LabelNode # label::Int #end #immutable GotoNode # label::Int #end #immutable QuoteNode # value #end #immutable TopNode # name::Symbol #end #immutable GlobalRef # mod::Module # name::Symbol #end # type Task # parent::Task # last::Task # storage::Any # consumers # started::Bool # done::Bool # runnable::Bool # end import Core.Intrinsics.ccall export # key types Any, DataType, Vararg, ANY, NTuple, Tuple, Type, TypeConstructor, TypeName, TypeVar, Union, Void, SimpleVector, AbstractArray, DenseArray, # special objects Box, Function, IntrinsicFunction, LambdaStaticData, Method, MethodTable, Module, Symbol, Task, Array, WeakRef, # numeric types Number, Real, Integer, Bool, Ref, Ptr, AbstractFloat, Float16, Float32, Float64, Signed, Int, Int8, Int16, Int32, Int64, Int128, Unsigned, UInt, UInt8, UInt16, UInt32, UInt64, UInt128, # string types Char, ASCIIString, ByteString, DirectIndexString, AbstractString, UTF8String, # errors BoundsError, DivideError, DomainError, Exception, InexactError, InterruptException, OutOfMemoryError, ReadOnlyMemoryError, OverflowError, StackOverflowError, SegmentationFault, UndefRefError, UndefVarError, TypeError, # AST representation Expr, GotoNode, LabelNode, LineNumberNode, QuoteNode, SymbolNode, TopNode, GlobalRef, NewvarNode, GenSym, # object model functions fieldtype, getfield, setfield!, nfields, throw, tuple, is, ===, isdefined, # arraylen, arrayref, arrayset, arraysize, # _apply, kwcall, # sizeof # not exported, to avoid conflicting with Base.sizeof # type reflection issubtype, typeof, isa, # typeassert, apply_type, # method reflection applicable, invoke, method_exists, # constants nothing, Main, # intrinsics module Intrinsics #ccall, cglobal, llvmcall, abs_float, add_float, add_int, and_int, ashr_int, #box, bswap_int, checked_fptosi, checked_fptoui, checked_sadd, #checked_smul, checked_ssub, checked_uadd, checked_umul, checked_usub, #checked_trunc_sint, checked_trunc_uint, check_top_bit, #nan_dom_err, copysign_float, ctlz_int, ctpop_int, cttz_int, #div_float, eq_float, eq_int, eqfsi64, eqfui64, flipsign_int, select_value, #sqrt_llvm, powi_llvm, #sqrt_llvm_fast, #fpext, fpiseq, fpislt, fpsiround, fpuiround, fptosi, fptoui, #fptrunc, le_float, lefsi64, lefui64, lesif64, #leuif64, lshr_int, lt_float, ltfsi64, ltfui64, ltsif64, ltuif64, mul_float, #mul_int, ne_float, ne_int, neg_float, neg_int, not_int, or_int, rem_float, #sdiv_int, shl_int, sitofp, sle_int, slt_int, smod_int, #srem_int, sub_float, sub_int, trunc_int, udiv_int, uitofp, #ule_int, ult_int, unbox, urem_int, xor_int, sext_int, zext_int const (===) = is abstract Number abstract Real <: Number abstract AbstractFloat <: Real abstract Integer <: Real abstract Signed <: Integer abstract Unsigned <: Integer bitstype 16 Float16 <: AbstractFloat bitstype 32 Float32 <: AbstractFloat bitstype 64 Float64 <: AbstractFloat bitstype 8 Bool <: Integer bitstype 32 Char bitstype 8 Int8 <: Signed bitstype 8 UInt8 <: Unsigned bitstype 16 Int16 <: Signed bitstype 16 UInt16 <: Unsigned bitstype 32 Int32 <: Signed bitstype 32 UInt32 <: Unsigned bitstype 64 Int64 <: Signed bitstype 64 UInt64 <: Unsigned bitstype 128 Int128 <: Signed bitstype 128 UInt128 <: Unsigned if is(Int,Int64) typealias UInt UInt64 else typealias UInt UInt32 end abstract AbstractString abstract Exception immutable BoundsError <: Exception a::Any i::Any BoundsError() = new() BoundsError(a::ANY) = new(a) BoundsError(a::ANY, i::ANY) = new(a,i) end immutable DivideError <: Exception end immutable DomainError <: Exception end immutable OverflowError <: Exception end immutable InexactError <: Exception end immutable OutOfMemoryError <: Exception end immutable ReadOnlyMemoryError<: Exception end immutable SegmentationFault <: Exception end immutable StackOverflowError <: Exception end immutable UndefRefError <: Exception end immutable UndefVarError <: Exception var::Symbol end immutable InterruptException <: Exception end type TypeError <: Exception func::Symbol context::AbstractString expected::Type got end type SymbolNode name::Symbol typ SymbolNode(name::Symbol, t::ANY) = new(name, t) end abstract DirectIndexString <: AbstractString immutable ASCIIString <: DirectIndexString data::Array{UInt8,1} end immutable UTF8String <: AbstractString data::Array{UInt8,1} end typealias ByteString Union{ASCIIString,UTF8String} include(fname::ByteString) = ccall(:jl_load_, Any, (Any,), fname) # constructors for built-in types type WeakRef value WeakRef() = WeakRef(nothing) WeakRef(v::ANY) = ccall(:jl_gc_new_weakref, Any, (Any,), v)::WeakRef end TypeVar(n::Symbol) = ccall(:jl_new_typevar, Any, (Any, Any, Any), n, Union{}, Any)::TypeVar TypeVar(n::Symbol, ub::ANY) = (isa(ub,Bool) ? ccall(:jl_new_typevar_, Any, (Any, Any, Any, Any), n, Union{}, Any, ub)::TypeVar : ccall(:jl_new_typevar, Any, (Any, Any, Any), n, Union{}, ub::Type)::TypeVar) TypeVar(n::Symbol, lb::ANY, ub::ANY) = (isa(ub,Bool) ? ccall(:jl_new_typevar_, Any, (Any, Any, Any, Any), n, Union{}, lb::Type, ub)::TypeVar : ccall(:jl_new_typevar, Any, (Any, Any, Any), n, lb::Type, ub::Type)::TypeVar) TypeVar(n::Symbol, lb::ANY, ub::ANY, b::Bool) = ccall(:jl_new_typevar_, Any, (Any, Any, Any, Any), n, lb::Type, ub::Type, b)::TypeVar TypeConstructor(p::ANY, t::ANY) = ccall(:jl_new_type_constructor, Any, (Any, Any), p::SimpleVector, t::Type) Void() = nothing Expr(args::ANY...) = _expr(args...) _new(typ::Symbol, argty::Symbol) = eval(:(Core.call(::Type{$typ}, n::$argty) = $(Expr(:new, typ, :n)))) _new(:LabelNode, :Int) _new(:GotoNode, :Int) _new(:TopNode, :Symbol) _new(:NewvarNode, :Symbol) _new(:QuoteNode, :ANY) _new(:GenSym, :Int) eval(:(Core.call(::Type{LineNumberNode}, f::Symbol, l::Int) = $(Expr(:new, :LineNumberNode, :f, :l)))) eval(:(Core.call(::Type{GlobalRef}, m::Module, s::Symbol) = $(Expr(:new, :GlobalRef, :m, :s)))) Module(name::Symbol=:anonymous, std_imports::Bool=true) = ccall(:jl_f_new_module, Any, (Any, Bool), name, std_imports)::Module Task(f::ANY) = ccall(:jl_new_task, Any, (Any, Int), f::Function, 0)::Task # simple convert for use by constructors of types in Core # note that there is no actual conversion defined here, # so the methods and ccall's in Core aren't permitted to use convert convert(::Type{Any}, x::ANY) = x convert{T}(::Type{T}, x::T) = x cconvert(T::Type, x) = convert(T, x) unsafe_convert{T}(::Type{T}, x::T) = x ccall(:jl_set_istopmod, Void, (Bool,), true)