-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
base.jl
104 lines (82 loc) · 2.29 KB
/
base.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# This file is a part of Julia. License is MIT: http://julialang.org/license
type SystemError <: Exception
prefix::AbstractString
errnum::Int32
extrainfo
SystemError(p::AbstractString, e::Integer, extrainfo) = new(p, e, extrainfo)
SystemError(p::AbstractString, e::Integer) = new(p, e, nothing)
SystemError(p::AbstractString) = new(p, Libc.errno())
end
type ParseError <: Exception
msg::AbstractString
end
type ArgumentError <: Exception
msg::AbstractString
end
#type UnboundError <: Exception
# var::Symbol
#end
type KeyError <: Exception
key
end
type MethodError <: Exception
f
args
end
type EOFError <: Exception end
type DimensionMismatch <: Exception
msg::AbstractString
end
DimensionMismatch() = DimensionMismatch("")
type AssertionError <: Exception
msg::AbstractString
AssertionError() = new("")
AssertionError(msg) = new(msg)
end
#Generic wrapping of arbitrary exceptions
#Subtypes should put the exception in an 'error' field
abstract WrappedException <: Exception
type LoadError <: WrappedException
file::AbstractString
line::Int
error
end
type InitError <: WrappedException
mod::Symbol
error
end
ccall(:jl_get_system_hooks, Void, ())
==(w::WeakRef, v::WeakRef) = isequal(w.value, v.value)
==(w::WeakRef, v) = isequal(w.value, v)
==(w, v::WeakRef) = isequal(w, v.value)
function finalizer(o::ANY, f::ANY)
if isimmutable(o)
error("objects of type ", typeof(o), " cannot be finalized")
end
ccall(:jl_gc_add_finalizer, Void, (Any,Any), o, f)
end
function finalizer{T}(o::T, f::Ptr{Void})
@_inline_meta
if isimmutable(T)
error("objects of type ", T, " cannot be finalized")
end
ccall(:jl_gc_add_ptr_finalizer, Void, (Any, Ptr{Void}), o, f)
end
finalize(o::ANY) = ccall(:jl_finalize, Void, (Any,), o)
gc(full::Bool=true) = ccall(:jl_gc_collect, Void, (Cint,), full)
gc_enable(on::Bool) = ccall(:jl_gc_enable, Cint, (Cint,), on)!=0
# used by interpolating quote and some other things in the front end
function vector_any(xs::ANY...)
n = length(xs)
a = Array{Any}(n)
@inbounds for i = 1:n
arrayset(a,xs[i],i)
end
a
end
immutable Nullable{T}
isnull::Bool
value::T
Nullable() = new(true)
Nullable(value::T, isnull::Bool=false) = new(isnull, value)
end