From 478771778d6495972f925d49c036368096fb6068 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 11 Aug 2018 14:44:23 -0700 Subject: [PATCH 1/5] Test against Julia 1.0 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d971c1a..b412a51 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ os: - osx julia: - 0.7 + - 1.0 - nightly notifications: email: false From c767fa170f0a1eaf4124dd7f6ca8a91acadcad20 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sat, 11 Aug 2018 14:52:59 -0700 Subject: [PATCH 2/5] Use the default test script --- .travis.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b412a51..4ac41d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,9 +26,6 @@ git: #before_script: # homebrew for mac # - if [ $TRAVIS_OS_NAME = osx ]; then brew install gcc; fi -# uncomment the following lines to override the default test script -script: - - julia -e 'Pkg.clone(pwd()); Pkg.build("Setfield"); VERSION < v"0.7-" && Pkg.add("StaticArrays"); Pkg.test("Setfield"; coverage=true)' after_success: # push coverage results to Coveralls - julia -e 'cd(Pkg.dir("Setfield")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' From 100a4c6f4ed1706fb8a1b5a26239ec6abffe23bf Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Mon, 13 Aug 2018 17:35:45 -0700 Subject: [PATCH 3/5] Fix after_success for Julia 1.0 --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4ac41d9..162d36c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,8 +28,8 @@ git: after_success: # push coverage results to Coveralls - - julia -e 'cd(Pkg.dir("Setfield")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' + - julia -e 'using Pkg; cd(Pkg.dir("Setfield")); Pkg.add("Coverage"); using Coverage; Coveralls.submit(Coveralls.process_folder())' # push coverage results to Codecov - - julia -e 'cd(Pkg.dir("Setfield")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())' - - julia -e 'Pkg.add("Documenter")' - - julia -e 'cd(Pkg.dir("Setfield")); include(joinpath("docs", "make.jl"))' + - julia -e 'using Pkg; cd(Pkg.dir("Setfield")); Pkg.add("Coverage"); using Coverage; Codecov.submit(Codecov.process_folder())' + - julia -e 'using Pkg; Pkg.add("Documenter")' + - julia -e 'using Pkg; cd(Pkg.dir("Setfield")); include(joinpath("docs", "make.jl"))' From d4b8fccb808eccbe4c057945ab06b89e11ffb7ff Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 12 Aug 2018 16:39:56 -0700 Subject: [PATCH 4/5] Enable tests with QuickTypes --- test/runtests.jl | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 7c076d8..5e65235 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -23,10 +23,8 @@ end include("test_kwonly.jl") end -@static if VERSION < v"0.7-" @testset "QuickTypes.jl" begin include("test_quicktypes.jl") end -end end # module From 05179c8d57bdc49874ce90077f3c64bec481a744 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Mon, 13 Aug 2018 20:46:59 -0700 Subject: [PATCH 5/5] Fix IndexLens for mutable arrays --- src/lens.jl | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/lens.jl b/src/lens.jl index 574e066..8de93ab 100644 --- a/src/lens.jl +++ b/src/lens.jl @@ -3,7 +3,7 @@ export @lens export set, get, modify import Base: get -using Base: setindex, getproperty +using Base: getproperty """ Lens @@ -146,8 +146,25 @@ struct IndexLens{I <: Tuple} <: Lens end get(l::IndexLens, obj) = getindex(obj, l.indices...) -set(l::IndexLens, obj, val) = setindex(obj, val, l.indices...) +set(l::IndexLens, obj, val) = _setindex(obj, val, l.indices...) +@generated function _setindex(obj, val, indices...) + if hasmethod(Base.setindex, Tuple{obj, val, indices...}) + setter = Base.setindex + else + setter = setindex_on_copy + end + quote + $setter(obj, val, indices...) + end +end + +function setindex_on_copy(obj, val, indices...) + clone = similar(obj, promote_type(eltype(obj), typeof(val))) + copyto!(clone, obj) + setindex!(clone, val, indices...) + return clone +end const NNamedTupleLens{N,s} = NamedTuple{s, T} where {T <: NTuple{N, Lens}} struct MultiPropertyLens{L <: NNamedTupleLens} <: Lens