Skip to content

Commit

Permalink
Merge branch 'master' into sparsearrays-triangular-operations
Browse files Browse the repository at this point in the history
  • Loading branch information
KlausC committed Aug 11, 2018
2 parents 21592db + f8d82cc commit 72f777e
Show file tree
Hide file tree
Showing 19 changed files with 146 additions and 142 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ sudo apt-get install build-essential libatomic1 python gfortran perl wget m4 cma

Julia uses the following external libraries, which are automatically downloaded (or in a few cases, included in the Julia source repository) and then compiled from source the first time you run `make`:

- **[LLVM]** (3.9 + patches) — compiler infrastructure (see [note below](#llvm)).
- **[LLVM]** (6.0 + [patches](https://github.com/JuliaLang/julia/tree/master/deps/patches)) — compiler infrastructure (see [note below](#llvm)).
- **[FemtoLisp]** — packaged with Julia source, and used to implement the compiler front-end.
- **[libuv]** (custom fork) — portable, high-performance event-based I/O library.
- **[OpenLibm]** — portable libm library containing elementary math functions.
Expand Down Expand Up @@ -364,9 +364,11 @@ Please be aware that this procedure is not officially supported, as it introduce

### LLVM

The most complicated dependency is LLVM, for which we require version 3.9 with some additional patches from upstream (LLVM is not backward compatible). For packaging Julia, we recommend either:
The most complicated dependency is LLVM, for which we require additional patches from upstream (LLVM is not backward compatible).

For packaging Julia with LLVM, we recommend either:
- bundling a Julia-only LLVM library inside the Julia package, or
- adding the patches to the LLVM 3.9 package of the distribution.
- adding the patches to the LLVM package of the distribution.
* A complete list of patches is available in `deps/llvm.mk`, and the patches themselves are in `deps/patches/`.
* The only Julia-specific patch is the lib renaming (`llvm-symver-jlprefix.patch`), which should _not_ be applied to a system LLVM.
* The remaining patches are all upstream bug fixes, and have been contributed into upstream LLVM.
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.0-rc1
1.1.0-DEV
24 changes: 20 additions & 4 deletions base/compiler/abstractinterpretation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -305,10 +305,26 @@ function abstract_call_method(method::Method, @nospecialize(sig), sparams::Simpl
# if sig changed, may need to recompute the sparams environment
if isa(method.sig, UnionAll) && isempty(sparams)
recomputed = ccall(:jl_type_intersection_with_env, Any, (Any, Any), sig, method.sig)::SimpleVector
sig = recomputed[1]
if !isa(unwrap_unionall(sig), DataType) # probably Union{}
return Any, false, nothing
end
#@assert recomputed[1] !== Bottom
# We must not use `sig` here, since that may re-introduce structural complexity that
# our limiting heuristic sought to eliminate. The alternative would be to not increment depth over covariant contexts,
# but we prefer to permit inference of tuple-destructuring, so we don't do that right now
# For example, with a signature such as `Tuple{T, Ref{T}} where {T <: S}`
# we might want to limit this to `Tuple{S, Ref}`, while type-intersection can instead give us back the original type
# (which moves `S` back up to a lower comparison depth)
# Optionally, we could try to drive this to a fixed point, but I think this is getting too complex,
# and this would only cause more questions and more problems
# (the following is only an example, most of the statements are probable in the wrong order):
# newsig = sig
# seen = IdSet()
# while !(newsig in seen)
# push!(seen, newsig)
# lsig = length((unwrap_unionall(sig)::DataType).parameters)
# newsig = limit_type_size(newsig, sig, sv.linfo.specTypes, sv.params.TUPLE_COMPLEXITY_LIMIT_DEPTH, lsig)
# recomputed = ccall(:jl_type_intersection_with_env, Any, (Any, Any), newsig, method.sig)::SimpleVector
# newsig = recomputed[2]
# end
# sig = ?
sparams = recomputed[2]::SimpleVector
end

Expand Down
64 changes: 26 additions & 38 deletions base/compiler/typelimits.jl
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,20 @@ end
# try to find `type` somewhere in `comparison` type
# at a minimum nesting depth of `mindepth`
function is_derived_type(@nospecialize(t), @nospecialize(c), mindepth::Int)
if mindepth > 0
mindepth -= 1
end
if t === c
return mindepth == 0
return mindepth <= 1
end
if isa(c, Union)
# see if it is one of the elements of the union
return is_derived_type(t, c.a, mindepth + 1) || is_derived_type(t, c.b, mindepth + 1)
return is_derived_type(t, c.a, mindepth) || is_derived_type(t, c.b, mindepth)
elseif isa(c, UnionAll)
# see if it is derived from the body
return is_derived_type(t, c.var.ub, mindepth) || is_derived_type(t, c.body, mindepth + 1)
# also handle the var here, since this construct bounds the mindepth to the smallest possible value
return is_derived_type(t, c.var.ub, mindepth) || is_derived_type(t, c.body, mindepth)
elseif isa(c, DataType)
if mindepth > 0
mindepth -= 1
end
if isa(t, DataType)
# see if it is one of the supertypes of a parameter
super = supertype(c)
Expand Down Expand Up @@ -92,45 +93,32 @@ function _limit_type_size(@nospecialize(t), @nospecialize(c), sources::SimpleVec
elseif is_derived_type_from_any(unwrap_unionall(t), sources, depth)
return t # t isn't something new
end
if isa(t, TypeVar)
if isa(c, TypeVar)
if t.ub === c.ub && t.lb === c.lb
return t
end
# peel off (and ignore) wrappers - they contribute no useful information, so we don't need to consider their size
# first attempt to turn `c` into a type that contributes meaningful information
# by peeling off meaningless non-matching wrappers of comparison one at a time
# then unwrap `t`
if isa(c, TypeVar)
if isa(t, TypeVar) && t.ub === c.ub && (t.lb === Union{} || t.lb === c.lb)
return t # it's ok to change the name, or widen `lb` to Union{}, so we can handle this immediately here
end
return _limit_type_size(t, c.ub, sources, depth, allowed_tuplelen)
end
if isa(c, UnionAll)
return _limit_type_size(t, c.body, sources, depth, allowed_tuplelen)
end
if isa(t, UnionAll)
tbody = _limit_type_size(t.body, c, sources, depth, allowed_tuplelen)
tbody === t.body && return t
return UnionAll(t.var, tbody)
elseif isa(t, TypeVar)
# don't have a matching TypeVar in comparison, so we keep just the upper bound
return _limit_type_size(t.ub, c, sources, depth, allowed_tuplelen)
elseif isa(t, Union)
if isa(c, Union)
a = _limit_type_size(t.a, c.a, sources, depth, allowed_tuplelen)
b = _limit_type_size(t.b, c.b, sources, depth, allowed_tuplelen)
return Union{a, b}
end
elseif isa(t, UnionAll)
if isa(c, UnionAll)
tv = t.var
cv = c.var
if tv.ub === cv.ub
if tv.lb === cv.lb
return UnionAll(tv, _limit_type_size(t.body, c.body, sources, depth + 1, allowed_tuplelen))
end
ub = tv.ub
else
ub = _limit_type_size(tv.ub, cv.ub, sources, depth + 1, 0)
end
if tv.lb === cv.lb
lb = tv.lb
else
# note: lower bounds need to be widened by making them lower
lb = Bottom
end
v2 = TypeVar(tv.name, lb, ub)
return UnionAll(v2, _limit_type_size(t{v2}, c{v2}, sources, depth, allowed_tuplelen))
end
tbody = _limit_type_size(t.body, c, sources, depth, allowed_tuplelen)
tbody === t.body && return t
return UnionAll(t.var, tbody)
elseif isa(c, UnionAll)
# peel off non-matching wrapper of comparison
return _limit_type_size(t, c.body, sources, depth, allowed_tuplelen)
elseif isa(t, DataType)
if isa(c, DataType)
tP = t.parameters
Expand Down
37 changes: 0 additions & 37 deletions base/essentials.jl
Original file line number Diff line number Diff line change
Expand Up @@ -690,43 +690,6 @@ function invokelatest(@nospecialize(f), @nospecialize args...; kwargs...)
Core._apply_latest(inner)
end

# iteration protocol

"""
next(iter, state) -> item, state
For a given iterable object and iteration state, return the current item and the next iteration state.
# Examples
```jldoctest
julia> next(1:5, 3)
(3, 4)
julia> next(1:5, 5)
(5, 6)
```
"""
function next end

"""
start(iter) -> state
Get initial iteration state for an iterable object.
# Examples
```jldoctest
julia> start(1:5)
1
julia> start([1;2;3])
1
julia> start([4;2;3])
1
```
"""
function start end

"""
isempty(collection) -> Bool
Expand Down
9 changes: 0 additions & 9 deletions base/exports.jl
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ export
InvalidStateException,
KeyError,
MissingException,
ParseError,
SystemError,
StringIndexError,

Expand Down Expand Up @@ -411,8 +410,6 @@ export
rot180,
rotl90,
rotr90,
shuffle,
shuffle!,
size,
selectdim,
sort!,
Expand Down Expand Up @@ -607,9 +604,6 @@ export
summary,

# logging
info,
logging,
warn,
@debug,
@info,
@warn,
Expand All @@ -624,9 +618,6 @@ export
set_zero_subnormals,

# iteration
done,
next,
start,
iterate,

enumerate, # re-exported from Iterators
Expand Down
9 changes: 7 additions & 2 deletions base/io.jl
Original file line number Diff line number Diff line change
Expand Up @@ -235,9 +235,14 @@ readuntil(io::AbstractPipe, arg::AbstractString; kw...) = readuntil(pipe_reader(
readuntil(io::AbstractPipe, arg::AbstractVector; kw...) = readuntil(pipe_reader(io), arg; kw...)
readuntil_vector!(io::AbstractPipe, target::AbstractVector, keep::Bool, out) = readuntil_vector!(pipe_reader(io), target, keep, out)

readavailable(io::AbstractPipe) = readavailable(pipe_reader(io))
for f in (
# peek/mark interface
:peek, :mark, :unmark, :reset, :ismarked,
# Simple reader functions
:readavailable, :isreadable)
@eval $(f)(io::AbstractPipe) = $(f)(pipe_reader(io))
end

isreadable(io::AbstractPipe) = isreadable(pipe_reader(io))
iswritable(io::AbstractPipe) = iswritable(pipe_writer(io))
isopen(io::AbstractPipe) = isopen(pipe_writer(io)) || isopen(pipe_reader(io))
close(io::AbstractPipe) = (close(pipe_writer(io)); close(pipe_reader(io)))
Expand Down
5 changes: 2 additions & 3 deletions base/stream.jl
Original file line number Diff line number Diff line change
Expand Up @@ -911,17 +911,16 @@ for (x, writable, unix_fd, c_symbol) in
(:stderr, true, 2, :jl_uv_stderr))
f = Symbol("redirect_", lowercase(string(x)))
_f = Symbol("_", f)
Ux = Symbol(uppercase(string(x)))
@eval begin
function ($_f)(stream)
global $x, $Ux
global $x
posix_fd = _fd(stream)
@static if Sys.iswindows()
ccall(:SetStdHandle, stdcall, Int32, (Int32, OS_HANDLE),
$(-10 - unix_fd), Libc._get_osfhandle(posix_fd))
end
dup(posix_fd, RawFD($unix_fd))
$Ux = $x = stream
$x = stream
nothing
end
function ($f)(handle::Union{LibuvStream, IOStream})
Expand Down
15 changes: 8 additions & 7 deletions base/version.jl
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,8 @@ function banner(io::IO = stdout)
commit_string = "$(branch)/$(commit) (fork: $(distance) commits, $(days) $(unit))"
end
end
commit_date = !isempty(GIT_VERSION_INFO.date_string) ? " ($(GIT_VERSION_INFO.date_string))" : ""

commit_date = isempty(Base.GIT_VERSION_INFO.date_string) ? "" : " ($(split(Base.GIT_VERSION_INFO.date_string)[1]))"

if get(io, :color, false)
c = text_colors
Expand All @@ -290,25 +291,25 @@ function banner(io::IO = stdout)
d4 = c[:bold] * c[:magenta] # fourth dot

print(io,""" $(d3)_$(tx)
$(d1)_$(tx) $(jl)_$(tx) $(d2)_$(d3)(_)$(d4)_$(tx) | A fresh approach to technical computing
$(d1)(_)$(jl) | $(d2)(_)$(tx) $(d4)(_)$(tx) | Documentation: https://docs.julialang.org
$(d1)_$(tx) $(jl)_$(tx) $(d2)_$(d3)(_)$(d4)_$(tx) | Documentation: https://docs.julialang.org
$(d1)(_)$(jl) | $(d2)(_)$(tx) $(d4)(_)$(tx) |
$(jl)_ _ _| |_ __ _$(tx) | Type \"?\" for help, \"]?\" for Pkg help.
$(jl)| | | | | | |/ _` |$(tx) |
$(jl)| | |_| | | | (_| |$(tx) | Version $(VERSION)$(commit_date)
$(jl)_/ |\\__'_|_|_|\\__'_|$(tx) | $(commit_string)
$(jl)|__/$(tx) | $(Sys.MACHINE)
$(jl)|__/$(tx) |
""")
else
print(io,"""
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: https://docs.julialang.org
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type \"?\" for help, \"]?\" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version $(VERSION)$(commit_date)
_/ |\\__'_|_|_|\\__'_| | $(commit_string)
|__/ | $(Sys.MACHINE)
|__/ |
""")
end
Expand Down
1 change: 0 additions & 1 deletion contrib/precompile_explicit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,6 @@ precompile(Tuple{typeof(Base.similar), Type{Array{Method, N} where N}, Tuple{Bas
precompile(Tuple{typeof(Base.sizeof), String})
precompile(Tuple{typeof(Base.skip_deleted_floor!), Base.Dict{Symbol, Any}})
precompile(Tuple{typeof(Base.sort!), Array{Int64, 1}, Base.Sort.QuickSortAlg, Base.Order.Perm{Base.Order.ForwardOrdering, Array{Tuple{Float64, Int64}, 1}}})
precompile(Tuple{typeof(Base.start), Nothing})
precompile(Tuple{typeof(Base.startswith), Base.SubString{String}, String})
precompile(Tuple{typeof(Base.startswith), String, Char})
precompile(Tuple{typeof(Base.stream_wait), Base.Timer, Base.Condition})
Expand Down
14 changes: 7 additions & 7 deletions doc/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,16 @@ cd(joinpath(@__DIR__, "src")) do
end
end

# Generate a suitable markdown file from NEWS.md and put it in src
str = read(joinpath(@__DIR__, "..", "NEWS.md"), String)
splitted = split(str, "<!--- generated by NEWS-update.jl: -->")
@assert length(splitted) == 2
replaced_links = replace(splitted[1], r"\[\#([0-9]*?)\]" => s"[#\g<1>](https://github.com/JuliaLang/julia/issues/\g<1>)")
write(joinpath(@__DIR__, "src", "NEWS.md"), replaced_links)
# # Generate a suitable markdown file from NEWS.md and put it in src
# str = read(joinpath(@__DIR__, "..", "NEWS.md"), String)
# splitted = split(str, "<!--- generated by NEWS-update.jl: -->")
# @assert length(splitted) == 2
# replaced_links = replace(splitted[1], r"\[\#([0-9]*?)\]" => s"[#\g<1>](https://github.com/JuliaLang/julia/issues/\g<1>)")
# write(joinpath(@__DIR__, "src", "NEWS.md"), replaced_links)

const PAGES = [
"Home" => "index.md",
hide("NEWS.md"),
# hide("NEWS.md"),
"Manual" => [
"manual/getting-started.md",
"manual/variables.md",
Expand Down
10 changes: 7 additions & 3 deletions doc/src/index.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
# Julia 0.7 Documentation
# Julia 1.0 Documentation

Welcome to the documentation for Julia 0.7.
Welcome to the documentation for Julia 1.0.

Please read the [release notes](NEWS.md) to see what has changed since the last release.
Please read the [release blog post](https://julialang.org/blog/2018/08/one-point-zero) for a general overview of the language and
many of the changes since Julia v0.6. Note that version 0.7 was released alongside
1.0 to provide an upgrade path for packages and code that predates the 1.0 release.
The only difference between 0.7 and 1.0 is the removal of deprecation warnings.
For a complete list of all the changes since 0.6, see the [release notes for version 0.7](https://docs.julialang.org/en/v0.7.0/NEWS/)

### [Introduction](@id man-introduction)

Expand Down
4 changes: 2 additions & 2 deletions src/julia-parser.scm
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@
(define prec-lazy-and '(&&))
(define prec-comparison
(append! '(|<:| |>:| in isa)
(add-dots '(> < >= ≥ <= ≤ == === ≡ != ≠ !== ≢ ∈ ∉ ∋ ∌ ⊆ ⊈ ⊂ ⊄ ⊊ ∝ ∊ ∍ ∥ ∦ ∷ ∺ ∻ ∽ ∾ ≁ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≐ ≑ ≒ ≓ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≣ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ⊀ ⊁ ⊃ ⊅ ⊇ ⊉ ⊋ ⊏ ⊐ ⊑ ⊒ ⊜ ⊩ ⊬ ⊮ ⊰ ⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⋍ ⋐ ⋑ ⋕ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟ ⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭ ⋲ ⋳ ⋴ ⋵ ⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿ ⟈ ⟉ ⟒ ⦷ ⧀ ⧁ ⧡ ⧣ ⧤ ⧥ ⩦ ⩧ ⩪ ⩫ ⩬ ⩭ ⩮ ⩯ ⩰ ⩱ ⩲ ⩳ ⩵ ⩶ ⩷ ⩸ ⩹ ⩺ ⩻ ⩼ ⩽ ⩾ ⩿ ⪀ ⪁ ⪂ ⪃ ⪄ ⪅ ⪆ ⪇ ⪈ ⪉ ⪊ ⪋ ⪌ ⪍ ⪎ ⪏ ⪐ ⪑ ⪒ ⪓ ⪔ ⪕ ⪖ ⪗ ⪘ ⪙ ⪚ ⪛ ⪜ ⪝ ⪞ ⪟ ⪠ ⪡ ⪢ ⪣ ⪤ ⪥ ⪦ ⪧ ⪨ ⪩ ⪪ ⪫ ⪬ ⪭ ⪮ ⪯ ⪰ ⪱ ⪲ ⪳ ⪴ ⪵ ⪶ ⪷ ⪸ ⪹ ⪺ ⪻ ⪼ ⪽ ⪾ ⪿ ⫀ ⫁ ⫂ ⫃ ⫄ ⫅ ⫆ ⫇ ⫈ ⫉ ⫊ ⫋ ⫌ ⫍ ⫎ ⫏ ⫐ ⫑ ⫒ ⫓ ⫔ ⫕ ⫖ ⫗ ⫘ ⫙ ⫷ ⫸ ⫹ ⫺ ⊢ ⊣ ⟂))))
(add-dots '(> < >= ≥ <= ≤ == === ≡ != ≠ !== ≢ ∈ ∉ ∋ ∌ ⊆ ⊈ ⊂ ⊄ ⊊ ∝ ∊ ∍ ∥ ∦ ∷ ∺ ∻ ∽ ∾ ≁ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≐ ≑ ≒ ≓ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ ≣ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ ≰ ≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ ⊀ ⊁ ⊃ ⊅ ⊇ ⊉ ⊋ ⊏ ⊐ ⊑ ⊒ ⊜ ⊩ ⊬ ⊮ ⊰ ⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⋍ ⋐ ⋑ ⋕ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟ ⋠ ⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭ ⋲ ⋳ ⋴ ⋵ ⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿ ⟈ ⟉ ⟒ ⦷ ⧀ ⧁ ⧡ ⧣ ⧤ ⧥ ⩦ ⩧ ⩪ ⩫ ⩬ ⩭ ⩮ ⩯ ⩰ ⩱ ⩲ ⩳ ⩵ ⩶ ⩷ ⩸ ⩹ ⩺ ⩻ ⩼ ⩽ ⩾ ⩿ ⪀ ⪁ ⪂ ⪃ ⪄ ⪅ ⪆ ⪇ ⪈ ⪉ ⪊ ⪋ ⪌ ⪍ ⪎ ⪏ ⪐ ⪑ ⪒ ⪓ ⪔ ⪕ ⪖ ⪗ ⪘ ⪙ ⪚ ⪛ ⪜ ⪝ ⪞ ⪟ ⪠ ⪡ ⪢ ⪣ ⪤ ⪥ ⪦ ⪧ ⪨ ⪩ ⪪ ⪫ ⪬ ⪭ ⪮ ⪯ ⪰ ⪱ ⪲ ⪳ ⪴ ⪵ ⪶ ⪷ ⪸ ⪹ ⪺ ⪻ ⪼ ⪽ ⪾ ⪿ ⫀ ⫁ ⫂ ⫃ ⫄ ⫅ ⫆ ⫇ ⫈ ⫉ ⫊ ⫋ ⫌ ⫍ ⫎ ⫏ ⫐ ⫑ ⫒ ⫓ ⫔ ⫕ ⫖ ⫗ ⫘ ⫙ ⫷ ⫸ ⫹ ⫺ ⊢ ⊣ ⟂))))
(define prec-pipe< '(|.<\|| |<\||))
(define prec-pipe> '(|.\|>| |\|>|))
(define prec-colon (append! '(: |..|) (add-dots '(… ⁝ ⋮ ⋱ ⋰ ⋯))))
(define prec-plus (append! '($)
(add-dots '(+ - |\|| ⊕ ⊖ ⊞ ⊟ |++| ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣))))
(add-dots '(+ - |\|| ⊕ ⊖ ⊞ ⊟ |++| ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦ ⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣))))
(define prec-times (add-dots '(* / ÷ % & ⋅ ∘ × |\\| ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇ ⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻ ⨼ ⨽ ⩀ ⩃ ⩄ ⩋ ⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗)))
(define prec-rational (add-dots '(//)))
(define prec-bitshift (add-dots '(<< >> >>>)))
Expand Down
2 changes: 2 additions & 0 deletions src/toplevel.c
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,8 @@ jl_value_t *jl_toplevel_eval_flex(jl_module_t *m, jl_value_t *e, int fast, int e
jl_module_use(m, import, name);
}
else {
if (!jl_is_module(u))
jl_errorf("invalid using path: \"%s\" does not name a module", jl_symbol_name(name));
// `using A.B` syntax
jl_module_using(m, u);
if (m == jl_main_module && name == NULL) {
Expand Down
2 changes: 1 addition & 1 deletion stdlib/LibGit2/src/LibGit2.jl
Original file line number Diff line number Diff line change
Expand Up @@ -829,7 +829,7 @@ function rebase!(repo::GitRepo, upstream::AbstractString="", newbase::AbstractSt
try
rbs = GitRebase(repo, head_ann, upst_ann, onto=onto_ann)
try
while (rbs_op = next(rbs)) !== nothing
for rbs_op in rbs
commit(rbs, sig)
end
finish(rbs, sig)
Expand Down
Loading

0 comments on commit 72f777e

Please sign in to comment.